Skip to content

Commit

Permalink
Fixed issue where a source hash key can be used in translating multip…
Browse files Browse the repository at this point in the history
…le properties
  • Loading branch information
danwa5 committed Jun 17, 2021
1 parent ae55d8e commit e295a0d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -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
Expand Down
7 changes: 6 additions & 1 deletion lib/hashie/extensions/dash/property_translation.rb
Expand Up @@ -153,7 +153,12 @@ module InstanceMethods
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
Expand Down
17 changes: 17 additions & 0 deletions spec/hashie/trash_spec.rb
Expand Up @@ -157,6 +157,23 @@ class SomeDataModel < Hashie::Trash
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 }
Expand Down

0 comments on commit e295a0d

Please sign in to comment.