summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Lee <danwa5@gmail.com>2021-06-17 14:05:59 -0700
committerDaniel Lee <danwa5@gmail.com>2021-06-17 14:17:43 -0700
commite295a0df579525ab1574a8ff6539a6c5a109fb2c (patch)
treec423787a0a907e03e8f7880361d851dab80942dd
parentae55d8ed7502ed677b78a4d75cb52231d4f14c23 (diff)
downloadhashie-e295a0df579525ab1574a8ff6539a6c5a109fb2c.tar.gz
Fixed issue where a source hash key can be used in translating multiple properties
-rw-r--r--CHANGELOG.md1
-rw-r--r--lib/hashie/extensions/dash/property_translation.rb7
-rw-r--r--spec/hashie/trash_spec.rb17
3 files changed, 24 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0db8b66..eb7203f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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
diff --git a/lib/hashie/extensions/dash/property_translation.rb b/lib/hashie/extensions/dash/property_translation.rb
index 8149faa..69a2d71 100644
--- a/lib/hashie/extensions/dash/property_translation.rb
+++ b/lib/hashie/extensions/dash/property_translation.rb
@@ -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
diff --git a/spec/hashie/trash_spec.rb b/spec/hashie/trash_spec.rb
index 9998c8d..aaabe70 100644
--- a/spec/hashie/trash_spec.rb
+++ b/spec/hashie/trash_spec.rb
@@ -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 }