Skip to content

Commit

Permalink
Spec for issue hashie#149.
Browse files Browse the repository at this point in the history
  • Loading branch information
dblock committed May 1, 2014
1 parent 953edec commit 6b1192b
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 14 deletions.
2 changes: 1 addition & 1 deletion lib/hashie/extensions/ignore_undeclared.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module Extensions
# raising an error. This is useful when using a Trash to
# capture a subset of a larger hash.
#
# Note that attempting to retrieve an undeclared property
# Note that attempting to retrieve or set an undeclared property
# will still raise a NoMethodError, even if a value for
# that property was provided at initialization.
#
Expand Down
49 changes: 36 additions & 13 deletions spec/hashie/extensions/ignore_undeclared_spec.rb
Original file line number Diff line number Diff line change
@@ -1,23 +1,46 @@
require 'spec_helper'

describe Hashie::Extensions::IgnoreUndeclared do
class ForgivingTrash < Hashie::Trash
include Hashie::Extensions::IgnoreUndeclared
property :city
property :state, from: :provence
end
context 'included in Trash' do
class ForgivingTrash < Hashie::Trash
include Hashie::Extensions::IgnoreUndeclared
property :city
property :state, from: :provence
end

subject { ForgivingTrash }
subject { ForgivingTrash }

it 'silently ignores undeclared properties on initialization' do
expect { subject.new(city: 'Toronto', provence: 'ON', country: 'Canada') }.to_not raise_error
end
it 'silently ignores undeclared properties on initialization' do
expect { subject.new(city: 'Toronto', provence: 'ON', country: 'Canada') }.to_not raise_error
end

it 'works with translated properties (with symbol keys)' do
expect(subject.new(provence: 'Ontario').state).to eq('Ontario')
end

it 'works with translated properties (with symbol keys)' do
expect(subject.new(provence: 'Ontario').state).to eq('Ontario')
it 'works with translated properties (with string keys)' do
expect(subject.new(provence: 'Ontario').state).to eq('Ontario')
end
end

it 'works with translated properties (with string keys)' do
expect(subject.new(provence: 'Ontario').state).to eq('Ontario')
context 'combined with DeepMerge' do
class ForgivingTrashWithMerge < Hashie::Trash
include Hashie::Extensions::DeepMerge
include Hashie::Extensions::IgnoreUndeclared
property :some_key
end

it 'requires properties to be declared on assignment' do
hash = ForgivingTrashWithMerge.new(some_ignored_key: 17, some_key: 12)
expect { hash.deep_merge(some_other_key: 55) }.to raise_error(NoMethodError)
end

it 'deep merges' do
class ForgivingTrashWithMergeAndProperty < ForgivingTrashWithMerge
property :some_other_key
end
hash = ForgivingTrashWithMergeAndProperty.new(some_ignored_key: 17, some_key: 12)
expect(hash.deep_merge(some_other_key: 55)).to eq("some_key" => 12, "some_other_key" => 55)
end
end
end

0 comments on commit 6b1192b

Please sign in to comment.