From 0596d0a46cc92df66d0ace9dc5318a8c4dd57cd5 Mon Sep 17 00:00:00 2001 From: Tom Dunlap Date: Wed, 13 Aug 2014 13:31:46 -0400 Subject: [PATCH 1/2] Remove apparently useless next clause in #embedded_params causing method to return nil --- lib/her/model/parse.rb | 1 - spec/model/parse_spec.rb | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/her/model/parse.rb b/lib/her/model/parse.rb index db43d98f..2199c74a 100644 --- a/lib/her/model/parse.rb +++ b/lib/her/model/parse.rb @@ -58,7 +58,6 @@ def to_params(attributes, changes={}) def embeded_params(attributes) associations[:has_many].select { |a| attributes.include?(a[:data_key])}.compact.inject({}) do |hash, association| params = attributes[association[:data_key]].map(&:to_params) - next if params.empty? if association[:class_name].constantize.include_root_in_json? root = association[:class_name].constantize.root_element hash[association[:data_key]] = params.map { |n| n[root] } diff --git a/spec/model/parse_spec.rb b/spec/model/parse_spec.rb index 4ef1bc32..de771bd6 100644 --- a/spec/model/parse_spec.rb +++ b/spec/model/parse_spec.rb @@ -342,4 +342,26 @@ def to_params expect(user.to_params).to eql(:user => {:first_name => 'Someone'}) end end + + context 'objects or attributes empty for an association' do + before do + Her::API.setup :url => "https://api.example.com", :send_only_modified_attributes => true do |builder| + builder.use Her::Middleware::FirstLevelParseJSON + builder.use Faraday::Request::UrlEncoded + end + + spawn_model "User" do + has_many :pets + end + spawn_model "Pet" + + end + + subject { User.build(fullname: "Tobias Fünke", pets: []) } + + it 'should not raise an error while trying to parse to params' do + expect{ subject.to_params }.to_not raise_error + end + end + end From 9d80c0bbcc41ff7e07e72dac99f73895bb025938 Mon Sep 17 00:00:00 2001 From: Tom Dunlap Date: Wed, 13 Aug 2014 14:21:02 -0400 Subject: [PATCH 2/2] Use `#her_nearby_class` in `#embedded_params` --- lib/her/model/parse.rb | 2 +- spec/model/parse_spec.rb | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/her/model/parse.rb b/lib/her/model/parse.rb index 2199c74a..93ebfccb 100644 --- a/lib/her/model/parse.rb +++ b/lib/her/model/parse.rb @@ -58,7 +58,7 @@ def to_params(attributes, changes={}) def embeded_params(attributes) associations[:has_many].select { |a| attributes.include?(a[:data_key])}.compact.inject({}) do |hash, association| params = attributes[association[:data_key]].map(&:to_params) - if association[:class_name].constantize.include_root_in_json? + if her_nearby_class(association[:class_name]).include_root_in_json? root = association[:class_name].constantize.root_element hash[association[:data_key]] = params.map { |n| n[root] } else diff --git a/spec/model/parse_spec.rb b/spec/model/parse_spec.rb index de771bd6..9d03c748 100644 --- a/spec/model/parse_spec.rb +++ b/spec/model/parse_spec.rb @@ -364,4 +364,22 @@ def to_params end end + context 'parsing an association of a class in a module' + before do + Her::API.setup :url => "https://api.example.com", :send_only_modified_attributes => true do |builder| + builder.use Her::Middleware::FirstLevelParseJSON + builder.use Faraday::Request::UrlEncoded + end + + spawn_model "Foo::User" do + has_many :pets + end + spawn_model "Foo::Pet" + end + + subject { Foo::User.build(fullname: "Tobias Fünke", pets: []) } + + it 'should not raise an error while trying to parse to params' do + expect{ subject.to_params }.to_not raise_error + end end