rails 2.3.2 ActiveResource fieldnames uncamelizing

Hey all,

Just updated rails and i have a bunch of activeresource models that connect to a bunch of tables that don't follow the rails naming convention.. they actually have CamelCase field names, which wasn't my idea, but i have to deal with it.. it was working fine pre-upgrade, but now when i get an object or hash from activeresource the fieldnames/keys are uncamelized (ie: CustomerID becomes customer_id)..

This change is causing me much grief and i don't want to keep referencing the fields by their actual fieldnames.

I know that the new rails allows for you to swap the xml parser out for another one though i haven't actually figured out how to do this. I used to have the faster_from_xml plugin installed on my app along with the libxml-ruby gem, but the upgrade broke the plugin so i deleted the plugin. Is it the parser that is doing that to the field names or is it something inside activesupport?

thanks a bunch!

Stuart

I once looked into this as well, but worked around it… :slight_smile:

Anyways, the problem was introduced in Hash.from_xml iirc, it has nothing to do with the recent changes to xml mini.

Eloy

I searched my irc logs and found the chat where I mentioned the
specific commit: http://github.com/rails/rails/commit/aa5cdb0d47fb5484bfdde8244df7efeb2175bf3a

I don't remember how well I tested that though. But do find out :slight_smile:

Eloy

Thanks for the reply Eloy. I took a look at the link to that commit you posted, but i'm not sure if its exactly what i'm looking for. If i'm reading the code correctly (specifically the activesupport bits since activerecords to_xml seems to be working as i want it to) the code seems to look for a :camelize option passed along and then camelizes the key if its set and dasherizes the key by default.. what i want to do is just keep the fieldname / tag the same regardless of what naming convention is used.

The test case would be something like this:

xml = %(<blah_blah> <JunkOne> 1 </JunkOne> <JunkTwo> 2 </JunkTwo> <dasherized_tag> 3 </dasherized_tag> </blah_blah>

h = Hash.from_xml(xml)

assert_equal(h, {"blah_blah" => {"JunkOne" => "1", "JunkTwo" => "2", "dasherized_tag" => "3"}})

notice that regardless of the tag name the key is the same string. what rails is currently doing is giving me a result that looks like this: {"blah_blah" => {"junk_one" => "1", "junk_two" => "2", "dasherized_tag" => "3"}}

Forgive me if that is indeed what the commit you posted will accomplish.. it's been a long day and i had my app almost ready to deploy prior to this new release of rails.

Thanks a million,

Stuart

sorted it out today.. line 223 from activesupport/lib/active_support/core_ext/hash/ conversions.rb h[k.to_s.underscore.tr("-", "_")] = unrename_keys(v)

changed to

h[k.to_s.tr("-", "_")] = unrename_keys(v)

any specific reason they decided to force the tags/attributes to underscored keys?

Stuart