This project is archived and is in readonly mode.
from_xml and from_json don't work
Reported by timuckun | November 27th, 2008 @ 09:51 PM | in 2.x
Here is a transcript from a console session
u = User.find(1) => #itdepartment@panztel.com", crypted_password: "81d8c8a916ddf51de06a3cef5a50498698183273", salt: "b57457ea9c805ef82ed34349eeb0dd0f8fe0f848", timezone: "UTC", remember_token: nil, remember_token_expires_at: nil, activation_code: "a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805", activated_at: "2008-11-19 22:12:07", password_reset_code: nil, enabled: true, created_at: "2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07", lock_version: 4, address_id: nil>
xml = u.to_xml => "<?xml version="1.0" encoding="UTF-8"?>\n\n <activated-at type="datetime">2008-11-19T22:12:07Z</activated-at>\n <activation-code>a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805</activation-code>\n <address-id type="integer" nil="true"></address-id>\n <company-id type="integer">1</company-id>\n <crypted-password>81d8c8a916ddf51de06a3cef5a50498698183273</crypted-password>\n itdepartment@panztel.com\n true\n 1\n <lock-version type="integer">4</lock-version>\n admin\n <password-reset-code nil="true"></password-reset-code>\n <remember-token nil="true"></remember-token>\n <remember-token-expires-at type="datetime" nil="true"></remember-token-expires-at>\n b57457ea9c805ef82ed34349eeb0dd0f8fe0f848\n UTC\n\n"
Change the time zone to ABC instead of UTC
xml = "<?xml version="1.0" encoding="UTF-8"?>\n\n <activated-at type="datetime">2008-11-19T22:12:07Z</activated-at>\n <activation-code>a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805</activation-code>\n <address-id type="integer" nil="true"></address-id>\n <company-id type="integer">1</company-id>\n <crypted-password>81d8c8a916ddf51de06a3cef5a50498698183273</crypted-password>\n itdepartment@panztel.com\n true\n 1\n lock-version type="integer">4</lock-version>\n admin\n <password-reset-code nil="true"></password-reset-code>\n <remember-token nil="true"></remember-token>\n <remember-token-expires-at type="datetime" nil="true"></remember-token-expires-at>\n b57457ea9c805ef82ed34349eeb0dd0f8fe0f848\n ABC\n\n" => "<?xml version="1.0" encoding="UTF-8"?>\n\n <activated-at type="datetime">2008-11-19T22:12:07Z</activated-at>\n <activation-code>a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805</activation-code>\n <address-id type="integer" nil="true"></address-id>\n <company-id type="integer">1</company-id>\n <crypted-password>81d8c8a916ddf51de06a3cef5a50498698183273</crypted-password>\n itdepartment@panztel.com\n true\n 1\n lock-version type="integer">4</lock-version>\n admin\n <password-reset-code nil="true"></password-reset-code>\n <remember-token nil="true"></remember-token>\n <remember-token-expires-at type="datetime" nil="true"></remember-token-expires-at>\n b57457ea9c805ef82ed34349eeb0dd0f8fe0f848\n ABC\n\n"
u.from_xml(xml) REXML::ParseException: #<REXML::ParseException: Missing end tag for 'user' (got "lock-version") Line: Position: Last 80 unconsumed characters: admin <password-reset-code nil="true"></password-reset-code> > /usr/lib/ruby/1.8/rexml/parsers/baseparser.rb:330:in
pull' /usr/lib/ruby/1.8/rexml/parsers/treeparser.rb:22:in
parse' /usr/lib/ruby/1.8/rexml/document.rb:228:inbuild' /usr/lib/ruby/1.8/rexml/document.rb:43:in
initialize' /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/vendor/xml-simple-1.0.11/xmlsimple.rb:952:innew' /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/vendor/xml-simple-1.0.11/xmlsimple.rb:952:in
parse' /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/hash/conversions.rb:12:inxml_in_string' /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/hash/conversions.rb:23:in
xml_in_string' /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/hash/conversions.rb:171:infrom_xml' /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/serializers/xml_serializer.rb:159:in
from_xml' (irb):128:inirb_binding' /usr/lib/ruby/1.8/irb/workspace.rb:52:in
irb_binding' :0 ... Missing end tag for 'user' (got "lock-version") Line: Position: Last 80 unconsumed characters: admin <password-reset-code nil="true"></password-reset-code> Line: Position: Last 80 unconsumed characters: admin <password-reset-code nil="true"></password-reset-code>from /usr/lib/ruby/1.8/rexml/parsers/treeparser.rb:92:in `parse' from /usr/lib/ruby/1.8/rexml/document.rb:228:in `build' from /usr/lib/ruby/1.8/rexml/document.rb:43:in `initialize' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/vendor/xml-simple-1.0.11/xmlsimple.rb:952:in `new' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/vendor/xml-simple-1.0.11/xmlsimple.rb:952:in `parse' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/hash/conversions.rb:12:in `xml_in_string' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/hash/conversions.rb:23:in `xml_in_string' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/hash/conversions.rb:171:in `from_xml' from /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/serializers/xml_serializer.rb:159:in `from_xml' from (irb):128 from :0
Let's try with json.
json = u.to_json => "{"user": {"salt": "b57457ea9c805ef82ed34349eeb0dd0f8fe0f848", "activated_at": "2008-11-19T22:12:07Z", "remember_token_expires_at": null, "crypted_password": "81d8c8a916ddf51de06a3cef5a50498698183273", "password_reset_code": null, "lock_version": 4, "activation_code": "a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805", "timezone": "UTC", "id": 1, "enabled": true, "address_id": null, "remember_token": null, "company_id": 1, "login": "admin", "email": "itdepartment@panztel.com"}}"
Change the timezone again.
json = "{"user": {"salt": "b57457ea9c805ef82ed34349eeb0dd0f8fe0f848", "activated_at": "2008-11-19T22:12:07Z", "remember_token_expires_at": null, "crypted_password": "81d8c8a916ddf51de06a3cef5a50498698183273", "password_reset_code": null, "lock_version": 4, "activation_code": "a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805", "timezone": "ABC", "id": 1, "enabled": true, "address_id": null, "remember_token": null, "company_id": 1, "login": "admin", "email": "itdepartment@panzel.com"}}" => "{"user": {"salt": "b57457ea9c805ef82ed34349eeb0dd0f8fe0f848", "activated_at": "2008-11-19T22:12:07Z", "remember_token_expires_at": null, "crypted_password": "81d8c8a916ddf51de06a3cef5a50498698183273", "password_reset_code": null, "lock_version": 4, "activation_code": "a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805", "timezone": "ABC", "id": 1, "enabled": true, "address_id": null, "remember_token": null, "company_id": 1, "login": "admin", "email": "itdepartment@panzel.com"}}"
Apply to the model
u.from_json(json) => #itdepartment@panztel.com", crypted_password: "81d8c8a916ddf51de06a3cef5a50498698183273", salt: "b57457ea9c805ef82ed34349eeb0dd0f8fe0f848", timezone: "UTC", remember_token: nil, remember_token_expires_at: nil, activation_code: "a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805", activated_at: "2008-11-19 22:12:07", password_reset_code: nil, enabled: true, created_at: "2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07", lock_version: 4, address_id: nil>
Note the timezone has not changed. It's still UTC.
u.save => true u => #itdepartment@panztel.com", crypted_password: "81d8c8a916ddf51de06a3cef5a50498698183273", salt: "b57457ea9c805ef82ed34349eeb0dd0f8fe0f848", timezone: "UTC", remember_token: nil, remember_token_expires_at: nil, activation_code: "a7ec9376c35dd28ae6f6ab0d74f5a5df773b6805", activated_at: "2008-11-19 22:12:07", password_reset_code: nil, enabled: true, created_at: "2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07", lock_version: 5, address_id: nil>
Comments and changes to this ticket
-
timuckun November 27th, 2008 @ 10:14 PM
Looks like the errors due to cut and paste. Still doesn't update the record though.
u = User.find(3)
=> #tm_user@panztel.com", crypted_password: "b695db100847aa269fb477443a289d875cf2e001", salt: "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC", remember_token: nil, remember_token_expires_at: nil, activation_code: "bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19 22:12:07", password_reset_code: nil, enabled: true, created_at: "2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07", lock_version: 4, address_id: nil>
u.to_xml
=> "<?xml version="1.0" encoding="UTF-8"?>\n\n <activated-at type="datetime">2008-11-19T22:12:07Z</activated-at>\n <activation-code>bab0c2bc67d43b6871005559b114b9b62b7b70bb</activation-code>\n <address-id type="integer" nil="true"></address-id>\n <company-id type="integer">3</company-id>\n <crypted-password>b695db100847aa269fb477443a289d875cf2e001</crypted-password>\n tm_user@panztel.com\n true\n 3\n <lock-version type="integer">4</lock-version>\n tm_user\n <password-reset-code nil="true"></password-reset-code>\n <remember-token nil="true"></remember-token>\n <remember-token-expires-at type="datetime" nil="true"></remember-token-expires-at>\n 1e3a4ba1ccb233c2bbd92c3bdbb917307523671b\n UTC\n\n"
Change the XML. Change the timezone from UTC to ABC
a = "<?xml version="1.0" encoding="UTF-8"?>\n\n <activated-at type="datetime">2008-11-19T22:12:07Z</activated-at>\n <activation-code>bab0c2bc67d43b6871005559b114b9b62b7b70bb</activation-code>\n <address-id type="integer" nil="true"></address-id>\n <company-id type="integer">3</company-id>\n <crypted-password>b695db100847aa269fb477443a289d875cf2e001</crypted-password>\n tm_user@panztel.com\n true\n 3\n <lock-version type="integer">4</lock-version>\n tm_user\n <password-reset-code nil="true"></password-reset-code>\n <remember-token nil="true"></remember-token>\n <remember-token-expires-at type="datetime" nil="true"></remember-token-expires-at>\n 1e3a4ba1ccb233c2bbd92c3bdbb917307523671b\n ABC\n\n"
Apply it back to the record.
u.from_xml(a)
u.from_xml(a)
=> #tm_user@panztel.com", crypted_password: "b695db100847aa269fb477443a289d875cf2e001", salt: "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC", remember_token: nil, remember_token_expires_at: nil, activation_code: "bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19 22:12:07", password_reset_code: nil, enabled: true, created_at: "2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07", lock_version: 4, address_id: nil>
Mmmmm. timezone is still UTC.
Let's save it.
u.save => true u => #tm_user@panztel.com", crypted_password: "b695db100847aa269fb477443a289d875cf2e001", salt: "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC", remember_token: nil, remember_token_expires_at: nil, activation_code: "bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19 22:12:07", password_reset_code: nil, enabled: true, created_at: "2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07", lock_version: 5, address_id: nil>
Looks like the time zone never got changed.
Let's try with json
u.to_json => "{"user": {"salt": "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", "activated_at": "2008-11-19T22:12:07Z", "remember_token_expires_at": null, "crypted_password": "b695db100847aa269fb477443a289d875cf2e001", "password_reset_code": null, "lock_version": 5, "activation_code": "bab0c2bc67d43b6871005559b114b9b62b7b70bb", "timezone": "UTC", "id": 3, "enabled": true, "address_id": null, "remember_token": null, "company_id": 3, "login": "tm_user", "email": "tm_user@panztel.com"}}" j = "{"user": {"salt": "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", "activated_at": "2008-11-19T22:12:07Z", "remember_token_expires_at": null, "crypted_password": "b695db100847aa269fb477443a289d875cf2e001", "password_reset_code": null, "lock_version": 5, "activation_code": "bab0c2bc67d43b6871005559b114b9b62b7b70bb", "timezone": "ABC", "id": 3, "enabled": true, "address_id": null, "remember_token": null, "company_id": 3, "login": "tm_user", "email": "tm_user@panztelcom"}}" => "{"user": {"salt": "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", "activated_at": "2008-11-19T22:12:07Z", "remember_token_expires_at": null, "crypted_password": "b695db100847aa269fb477443a289d875cf2e001", "password_reset_code": null, "lock_version": 5, "activation_code": "bab0c2bc67d43b6871005559b114b9b62b7b70bb", "timezone": "ABC", "id": 3, "enabled": true, "address_id": null, "remember_token": null, "company_id": 3, "login": "tm_user", "email": "tm_user@panztelcom"}}" j => "{"user": {"salt": "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", "activated_at": "2008-11-19T22:12:07Z", "remember_token_expires_at": null, "crypted_password": "b695db100847aa269fb477443a289d875cf2e001", "password_reset_code": null, "lock_version": 5, "activation_code": "bab0c2bc67d43b6871005559b114b9b62b7b70bb", "timezone": "ABC", "id": 3, "enabled": true, "address_id": null, "remember_token": null, "company_id": 3, "login": "tm_user", "email": "tm_user@panztelcom"}}" u.from_json(j) => #tm_user@panztel.com", crypted_password: "b695db100847aa269fb477443a289d875cf2e001", salt: "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC", remember_token: nil, remember_token_expires_at: nil, activation_code: "bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19 22:12:07", password_reset_code: nil, enabled: true, created_at: "2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07", lock_version: 5, address_id: nil> u.save => true u => #tm_user@panztel.com", crypted_password: "b695db100847aa269fb477443a289d875cf2e001", salt: "1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC", remember_token: nil, remember_token_expires_at: nil, activation_code: "bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19 22:12:07", password_reset_code: nil, enabled: true, created_at: "2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07", lock_version: 6, address_id: nil>
Exact same story.
-
Frederick Cheung December 8th, 2008 @ 03:03 PM
Looks like lighthouse has somewhat mangled what you wrote.
Can you reduce this to a minimal example, where you - take a model - dump the xml - change the xml using gsub (to rule out cut & paste etc...) - load it back in
along with the simplest possible class and the simplest possible schema ?
-
Geoff Buesing February 8th, 2009 @ 06:18 PM
- State changed from new to stale
If this is still an issue, please reopen with 1. a patch, either with a fix, or at least a failing test case, or 2 if you can't generate a patch, the simplest possible example that illustrates this issue, as Frederick suggests.
Please also use Lighthouse's built-in syntax highlighting (see "formatting help" link above "add a comment" text field), it will help others read through your code.
-
CancelProfileIsBroken August 5th, 2009 @ 01:33 PM
- Tag set to bugmash
-
Rizwan Reza August 9th, 2009 @ 06:25 PM
not reproducible
-1 I followed the steps. May be because my application doesn't show UTC explicitly... I tried changing times but it's not reproducing. It is working as expected for me. May be timuckun should have a demo app at github for this.
-
Derander August 9th, 2009 @ 08:21 PM
Unable to reproduce.
-1
I followed the steps as well. I'm not ruling out copy paste error on my end, but I was unable to see the behavior described.
-
CancelProfileIsBroken August 9th, 2009 @ 11:01 PM
- Tag cleared.
- State changed from stale to invalid
No repro, no more reports of the same behavior, marking invalid.
-
Vimax February 1st, 2011 @ 04:46 PM
This is the thing I'm looking for over the net. Finally I found male enhancement products on the market today. But which of them actually work? With a lot of brands available, Vigrx Plus is the safer to use the mark which is purely natural. Other products is Vimax.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>