summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Fawcett <mail@matthewfawcett.co.uk>2011-11-22 17:06:36 +0000
committerMatt Fawcett <mail@matthewfawcett.co.uk>2011-11-22 17:08:03 +0000
commit68ed0a367c460fdd59d699d8a6cac8ca9e0cb042 (patch)
tree928d138b7da74c45777680f05e901cd4e791cf7c
parent1bf6cae21842f632d88105806925b2d260116d29 (diff)
downloadhashie-68ed0a367c460fdd59d699d8a6cac8ca9e0cb042.tar.gz
Handle coercion correctly when MergeInitializer is used
-rw-r--r--lib/hashie/extensions/merge_initializer.rb4
-rw-r--r--spec/hashie/extensions/coercion_spec.rb12
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