Sorry to bring up such an old topic, but I'm recently experiencing this in 
a project.
I added the gem 'business_time' which includes a dependency on 
ActiveSupport and suddenly all my Sequel to_json calls are no longer 
working properly.

How can I mandate that to_json be run through Sequel rather than 
ActiveSupport? Thanks!

On Thursday, August 16, 2012 at 12:45:20 PM UTC-4, Jeremy Evans wrote:
>
> On Thursday, August 16, 2012 9:12:43 AM UTC-7, Alex Cavalli wrote:
>>
>> Hi there,
>>
>> I'm using Sequel 3.38.0 and ActiveSupport 3.2.6.
>>
>> I'm trying to use the JSON Serializer plugin to generate JSON for some 
>> nested model structures. The project that I'm working on also makes use of 
>> some ActiveSupport features. Unfortunately, this appears to create a 
>> conflict when ActiveSupport overrides the to_json methods on Hash and 
>> Array. I've found a workaround in monkeypatching the monkeypatched Hash and 
>> Array classes, but it's pretty ugly. Is there a better way?
>>
>> Here's a sample gist that shows the conflict:
>>
>> <script src="https://gist.github.com/3371268.js";> </script>
>>
>> Running this script will produce the following:
>>
>> Good JSON
>>
>> [{"name":"Bob","id":1,"albums":[{"label":"Summer","tracks":[{"id":1,"length":10,"json_class":"Track"},{"id":2,"length":20,"json_class":"Track"}],"id":1,"json_class":"Album"},{"label":"Winter","tracks":[{"id":3,"length":30,"json_class":"Track"},{"id":4,"length":40,"json_class":"Track"}],"id":2,"json_class":"Album"}],"json_class":"Artist"}]
>>
>> Bad JSON
>>
>> [{"json":"{\"name\":\"Bob\",\"id\":1,\"albums\":[{\"json\":\"{\\\"label\\\":\\\"Summer\\\",\\\"tracks\\\":[{\\\"id\\\":1,\\\"length\\\":10},{\\\"id\\\":2,\\\"length\\\":20}],\\\"id\\\":1,\\\"json_class\\\":\\\"Album\\\"}\"},{\"json\":\"{\\\"label\\\":\\\"Winter\\\",\\\"tracks\\\":[{\\\"id\\\":3,\\\"length\\\":30},{\\\"id\\\":4,\\\"length\\\":40}],\\\"id\\\":2,\\\"json_class\\\":\\\"Album\\\"}\"}],\"json_class\":\"Artist\"}"}]
>>
>> Good JSON, ugly workaround
>>
>> [{"name":"Bob","id":1,"albums":[{"label":"Summer","tracks":[{"id":1,"length":10,"json_class":"Track"},{"id":2,"length":20,"json_class":"Track"}],"id":1,"json_class":"Album"},{"label":"Winter","tracks":[{"id":3,"length":30,"json_class":"Track"},{"id":4,"length":40,"json_class":"Track"}],"id":2,"json_class":"Album"}],"json_class":"Artist"}]
>>
>>
>> Is there a better workaround or some configuration step I'm missing?
>>
>
> Don't use ActiveSupport::JSON?  Unfortunately, there really isn't a better 
> way.  ActiveSupport::JSON basically completely takes over the JSON 
> serialization process in a way incompatible with the standard JSON 
> library.  I consider that a bug in ActiveSupport, but it's unlikely they 
> will change it.  Even getting obvious bugs fixed in ActiveSupport has been 
> a chore in my experience.  Your workaround basically undoes what 
> ActiveSupport does, using the standard JSON library for serializing hashes 
> and arrays, which is why it works.
>
> I'm not sure if there is a way to use the ActiveSupport features you want 
> without requiring ActiveSupport::JSON.  ActiveSupport 3 is theoretically 
> supposed to be modular in that you can only require certain parts without 
> the whole ball of wax.  However, in my experience, requiring one feature 
> often loads other unrelated and undesired features. For example, loading 
> ActiveSupport's Duration class requires loading ActiveSupport's inflection 
> support, even though if you just want to use Duration for time 
> calculations, there is no need for inflections.
>
> Jeremy
>

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to