diff options
author | Max Lincoln <max@devopsy.com> | 2014-08-14 17:00:16 -0400 |
---|---|---|
committer | Max Lincoln <max@devopsy.com> | 2014-08-14 17:00:16 -0400 |
commit | 68b83a8e283079d702fb9cf3f1bea9a6b7af2b16 (patch) | |
tree | ba12f72527347b7d1136b874b3dfc43839110ed6 /spec/hashie/extensions/coercion_spec.rb | |
parent | 555c1b9273b9af9d61fefabf185f6ae662e1a2d5 (diff) | |
download | hashie-68b83a8e283079d702fb9cf3f1bea9a6b7af2b16.tar.gz |
Error handling, test showing SystemStackError
Diffstat (limited to 'spec/hashie/extensions/coercion_spec.rb')
-rw-r--r-- | spec/hashie/extensions/coercion_spec.rb | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/spec/hashie/extensions/coercion_spec.rb b/spec/hashie/extensions/coercion_spec.rb index cae8aa8..a4e2332 100644 --- a/spec/hashie/extensions/coercion_spec.rb +++ b/spec/hashie/extensions/coercion_spec.rb @@ -36,6 +36,32 @@ describe Hashie::Extensions::Coercion do let(:instance) { subject.new } describe '#coerce_key' do + context 'nesting' do + class RootCoercableHash < Hash + include Hashie::Extensions::Coercion + include Hashie::Extensions::MergeInitializer + coerce_key :foo, Integer + end + + class NestedCoercableHash < RootCoercableHash + include Hashie::Extensions::Coercion + include Hashie::Extensions::MergeInitializer + coerce_key :foo, Integer + end + + subject { RootCoercableHash } + let(:instance) { subject.new } + + it 'coeces nested objects' do + subject.coerce_key :nested, NestedCoercableHash + + instance[:nested] = { foo: '123' } + expect(instance[:nested]).to be_a(NestedCoercableHash) + expect(instance[:nested][:foo]).to be_an(Integer) + expect(instance[:nested][:foo]).to eq('123') + end + end + it { expect(subject).to be_respond_to(:coerce_key) } it 'runs through coerce on a specified key' do @@ -153,6 +179,19 @@ describe Hashie::Extensions::Coercion do test_coercion '2/3+3/4i', Complex, :to_c end + it 'coerces collections with core types' do + subject.coerce_key :foo, Hash[String => String] + + instance[:foo] = { + abc: 123, + xyz: 987 + } + expect(instance[:foo]).to eq( + 'abc' => '123', + 'xyz' => '987' + ) + end + it 'can coerce booleans via a proc' do subject.coerce_key :foo, ->(v) do case v @@ -180,7 +219,7 @@ describe Hashie::Extensions::Coercion do it 'raises errors for non-coercable types' do subject.coerce_key :foo, NotInitializable - expect { instance[:foo] = 'true' }.to raise_error(TypeError, /NotInitializable is not a coercable type/) + expect { instance[:foo] = 'true' }.to raise_error(Hashie::Extensions::Coercion::CoercionError, /NotInitializable is not a coercable type/) end pending 'can coerce false' do @@ -382,7 +421,7 @@ describe Hashie::Extensions::Coercion do it 'raises a TypeError when coercion is not possible' do subject.coerce_value Fixnum, Symbol - expect { instance[:hi] = 1 }.to raise_error(TypeError, /Cannot coerce property :hi from Fixnum to Symbol/) + expect { instance[:hi] = 1 }.to raise_error(Hashie::Extensions::Coercion::CoercionError, /Cannot coerce property :hi from Fixnum to Symbol/) end pending 'coerces Integer to String' do |