diff --git a/lib/her/model/parse.rb b/lib/her/model/parse.rb index 64554277..e8744e05 100644 --- a/lib/her/model/parse.rb +++ b/lib/her/model/parse.rb @@ -145,7 +145,8 @@ def root_element(value = nil) # @private def root_element_included?(data) - data.keys.to_s.include? @_her_root_element.to_s + element = data[root_element] + element.is_a?(Hash) || element.is_a?(Array) end # @private diff --git a/spec/model/parse_spec.rb b/spec/model/parse_spec.rb index 8495f23c..ccb95fcc 100644 --- a/spec/model/parse_spec.rb +++ b/spec/model/parse_spec.rb @@ -493,4 +493,25 @@ def name expect(user.to_params).to eq(model: { name: 'foo' }) end end + + context "when attribute uses the same name as root element" do + before do + Her::API.setup url: "https://api.example.com" do |builder| + builder.use Her::Middleware::FirstLevelParseJSON + builder.use Faraday::Request::UrlEncoded + end + + Her::API.default_api.connection.adapter :test do |stub| + stub.post("/users") { |env| [200, {}, { user: "foobar", id: 1, fullname: params(env)[:fullname] }.to_json] } + end + + spawn_model "Foo::User" + end + + it "parses as attribute instead of root element" do + user = Foo::User.create(fullname: "barfoo") + expect(user.fullname).to eq "barfoo" + expect(user.user).to eq "foobar" + end + end end