From 07d5043671a7c96d3113a27fd14ff1fcd3961f19 Mon Sep 17 00:00:00 2001 From: Ismael Celis Date: Thu, 22 Jul 2021 14:59:54 +0100 Subject: [PATCH 1/2] callable filters --- lib/hash_mapper.rb | 10 ++++++---- spec/hash_mapper_spec.rb | 13 +++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/hash_mapper.rb b/lib/hash_mapper.rb index c60197c..0f624bf 100644 --- a/lib/hash_mapper.rb +++ b/lib/hash_mapper.rb @@ -59,15 +59,17 @@ def self.extended(base) end end - def map(from, to, options={}, &filter) + def map(from, to, options={}, &block_filter) + filter = options.delete(:filter) || block_filter self.maps = self.maps.dup self.maps << Map.new(from, to, options) - to.filter = filter if block_given? # Useful if just one block given + to.filter = filter if filter # Useful if just one block given end - def from(path, &filter) + def from(path, filter: nil, &block_filter) path_map = PathMap.new(path) - path_map.filter = filter if block_given? # Useful if two blocks given + filter ||= block_filter if block_given? + path_map.filter = filter if filter # Useful if two blocks given path_map end diff --git a/spec/hash_mapper_spec.rb b/spec/hash_mapper_spec.rb index 9ffc0e1..be539bd 100644 --- a/spec/hash_mapper_spec.rb +++ b/spec/hash_mapper_spec.rb @@ -187,7 +187,20 @@ class PersonWithBlockOneWay it "should accept a block for just one direction" do expect(PersonWithBlockOneWay.normalize(@from)).to eq(@to) end +end + +describe ':filter' do + let(:mapper) do + Class.new do + extend HashMapper + map from('/names/first'), to('/first_name', filter: ->(s) { s.strip }) + end + end + it 'registers filters as callables, too' do + output = mapper.normalize({ names: { first: ' Joe Bloggs ' }}) + expect(output[:first_name]).to eq('Joe Bloggs') + end end class ProjectMapper From 24694c63b1dafe7e67cc484ae4aaf86ca63be8a5 Mon Sep 17 00:00:00 2001 From: Ismael Celis Date: Fri, 23 Jul 2021 12:54:26 +0100 Subject: [PATCH 2/2] callable filter --- spec/hash_mapper_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/hash_mapper_spec.rb b/spec/hash_mapper_spec.rb index be539bd..6462503 100644 --- a/spec/hash_mapper_spec.rb +++ b/spec/hash_mapper_spec.rb @@ -647,7 +647,7 @@ def normalize(input, context: , **kargs) mapper = Class.new do extend HashMapper - map from('/name'), to('/name', &(->(name, ctx) { "#{ctx[:title]} #{name}" })) + map from('/name'), to('/name', filter: ->(name, ctx) { "#{ctx[:title]} #{name}" }) map from('/age'), to('/age') do |age, ctx| "#{age} #{ctx[:age_suffix]}" end