diff options
author | Matt Fawcett <mail@matthewfawcett.co.uk> | 2011-11-22 17:06:36 +0000 |
---|---|---|
committer | Matt Fawcett <mail@matthewfawcett.co.uk> | 2011-11-22 17:08:03 +0000 |
commit | 68ed0a367c460fdd59d699d8a6cac8ca9e0cb042 (patch) | |
tree | 928d138b7da74c45777680f05e901cd4e791cf7c | |
parent | 1bf6cae21842f632d88105806925b2d260116d29 (diff) | |
download | hashie-68ed0a367c460fdd59d699d8a6cac8ca9e0cb042.tar.gz |
Handle coercion correctly when MergeInitializer is used
-rw-r--r-- | lib/hashie/extensions/merge_initializer.rb | 4 | ||||
-rw-r--r-- | spec/hashie/extensions/coercion_spec.rb | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/hashie/extensions/merge_initializer.rb b/lib/hashie/extensions/merge_initializer.rb index f9ccc2e..19a9d28 100644 --- a/lib/hashie/extensions/merge_initializer.rb +++ b/lib/hashie/extensions/merge_initializer.rb @@ -17,7 +17,9 @@ module Hashie module MergeInitializer def initialize(hash = {}, default = nil, &block) default ? super(default) : super(&block) - update(hash) + hash.each do |key, value| + self[key] = value + end end end end diff --git a/spec/hashie/extensions/coercion_spec.rb b/spec/hashie/extensions/coercion_spec.rb index c5d932a..84a662d 100644 --- a/spec/hashie/extensions/coercion_spec.rb +++ b/spec/hashie/extensions/coercion_spec.rb @@ -17,7 +17,10 @@ describe Hashie::Extensions::Coercion do end before(:each) do - class ExampleCoercableHash < Hash; include Hashie::Extensions::Coercion end + class ExampleCoercableHash < Hash + include Hashie::Extensions::Coercion + include Hashie::Extensions::MergeInitializer + end end subject { ExampleCoercableHash } let(:instance){ subject.new } @@ -39,6 +42,13 @@ describe Hashie::Extensions::Coercion do instance[:foo].value.should == "String" instance[:foo].should_not be_coerced end + + it "should coerce when the merge initializer is used" do + subject.coerce_key :foo, Coercable + instance = subject.new(:foo => "bar") + + instance[:foo].should be_coerced + end end describe '.coerce_value' do |