Fixed issue where a source hash key can be used in translating multiple properties
This commit is contained in:
parent
ae55d8ed75
commit
e295a0df57
|
@ -42,6 +42,7 @@ Any violations of this scheme are considered to be bugs.
|
|||
* [#531](https://github.com/hashie/hashie/pull/531): Fixed [slice doesn't work using symbols](https://github.com/hashie/hashie/issues/529) using hash with `IndifferentAccess` extension - [@gnomex](https://github.com/gnomex).
|
||||
* [#533](https://github.com/hashie/hashie/pull/533): Fixed `NoMethodError: undefined method `to_json'` at `hashie/dash_spec` - [@gnomex](https://github.com/gnomex).
|
||||
* [#537](https://github.com/hashie/hashie/pull/537): Fixed inconsistencies with handling defaults in `Dash` with and without `IgnoreUnclared` mixed in - [@michaelherold](https://github.com/michaelherold).
|
||||
* [#547](https://github.com/hashie/hashie/pull/547): Fixed issue where a source hash key can be used in translating multiple properties - [@danwa5](https://github.com/danwa5).
|
||||
* Your contribution here.
|
||||
|
||||
### Security
|
||||
|
|
|
@ -153,7 +153,12 @@ module Hashie
|
|||
def []=(property, value)
|
||||
if self.class.translation_exists? property
|
||||
send("#{property}=", value)
|
||||
super(property, value) if self.class.properties.include?(property)
|
||||
|
||||
if self.class.transformation_exists? property
|
||||
super property, self.class.transformed_property(property, value)
|
||||
elsif self.class.properties.include?(property)
|
||||
super(property, value)
|
||||
end
|
||||
elsif self.class.transformation_exists? property
|
||||
super property, self.class.transformed_property(property, value)
|
||||
elsif property_exists? property
|
||||
|
|
|
@ -157,6 +157,23 @@ describe Hashie::Trash do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'translating multiple properties from the same source hash key' do
|
||||
class AnotherDataModel < Hashie::Trash
|
||||
property :first_name, transform_with: ->(n) { n.upcase }
|
||||
property :first_name_short, from: :first_name, transform_with: ->(n) { n[0, 3] }
|
||||
end
|
||||
|
||||
subject { AnotherDataModel.new(first_name: 'Cathy') }
|
||||
|
||||
it 'translates the first key with the given lambda' do
|
||||
expect(subject.first_name).to eq('CATHY')
|
||||
end
|
||||
|
||||
it 'translates the second key with the given lambda and the initial value of the first key' do
|
||||
expect(subject.first_name_short).to eq('Cat')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'uses with or transform_with interchangeably' do
|
||||
class TrashLambdaTestTransformWith < Hashie::Trash
|
||||
property :first_name, from: :firstName, transform_with: ->(value) { value.reverse }
|
||||
|
|
Loading…
Reference in New Issue