hash_mapper 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/hash_mapper.rb +17 -8
- data/lib/hash_mapper/version.rb +1 -1
- data/spec/hash_mapper_spec.rb +16 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e24c6fe7171260dd214d3b5b1f5250afe1038a63702b1cc0db74dece9b648cd1
|
4
|
+
data.tar.gz: b27d3e3af82035e1bd5192906b4dad65a918a9a928513c854884ed2bed500709
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fbc136b57c7e6bd5fcf435f202f6a6adf444a7f2c4982311bd9dd0ff3fd1ea99fb0b4f9cedbc71ba8a17cc08c7b0da9a4d55e9b7c22da5bb5b1d2e055914a43
|
7
|
+
data.tar.gz: 100954ccf11324b9b54ce471a3dafcb0ba7cc68e69b2cedd37e610c325ad7d12e3c2c61fdb3686721383f7a4dc0e80b765b21e3c1ba1a804ef586851e8106373
|
data/lib/hash_mapper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'hash_mapper/version'
|
2
4
|
|
3
5
|
$:.unshift(File.dirname(__FILE__)) unless
|
@@ -138,7 +140,7 @@ module HashMapper
|
|
138
140
|
def process_into(output, input, method_name: :normalize, context: nil)
|
139
141
|
path_1, path_2 = (method_name == :normalize ? [path_from, path_to] : [path_to, path_from])
|
140
142
|
value = get_value_from_input(output, input, path_1, method_name: method_name, context: context)
|
141
|
-
set_value_in_output(output, path_2, value)
|
143
|
+
set_value_in_output(output, path_2, value, context: context)
|
142
144
|
end
|
143
145
|
protected
|
144
146
|
|
@@ -155,7 +157,7 @@ module HashMapper
|
|
155
157
|
delegated_mapper ? delegate_to_nested_mapper(value, method_name, context: context) : value
|
156
158
|
end
|
157
159
|
|
158
|
-
def set_value_in_output(output, path, value)
|
160
|
+
def set_value_in_output(output, path, value, context: context)
|
159
161
|
if value == NO_VALUE
|
160
162
|
if default_value == NO_DEFAULT
|
161
163
|
return
|
@@ -163,7 +165,7 @@ module HashMapper
|
|
163
165
|
value = default_value
|
164
166
|
end
|
165
167
|
end
|
166
|
-
add_value_to_hash!(output, path, value)
|
168
|
+
add_value_to_hash!(output, path, value, context: context)
|
167
169
|
end
|
168
170
|
|
169
171
|
def delegate_to_nested_mapper(value, method_name, context:)
|
@@ -177,13 +179,13 @@ module HashMapper
|
|
177
179
|
end
|
178
180
|
end
|
179
181
|
|
180
|
-
def add_value_to_hash!(hash, path, value)
|
182
|
+
def add_value_to_hash!(hash, path, value, context: nil)
|
181
183
|
path.inject_with_index(hash) do |h,e,i|
|
182
184
|
if !h[e].nil? # it can be FALSE
|
183
185
|
h[e]
|
184
186
|
else
|
185
187
|
h[e] = if i == path.size-1
|
186
|
-
path.apply_filter(value)
|
188
|
+
path.apply_filter(value, context: context)
|
187
189
|
else
|
188
190
|
if path.segments[i+1].is_a? Integer
|
189
191
|
[]
|
@@ -204,17 +206,24 @@ module HashMapper
|
|
204
206
|
include Enumerable
|
205
207
|
|
206
208
|
attr_reader :segments
|
207
|
-
attr_writer :filter
|
208
209
|
attr_reader :path
|
209
210
|
|
210
211
|
def initialize(path)
|
211
212
|
@path = path.dup
|
212
213
|
@segments = parse(path)
|
213
214
|
@filter = lambda{|value| value}# default filter does nothing
|
215
|
+
@filter_arity = 1
|
216
|
+
end
|
217
|
+
|
218
|
+
def filter=(f)
|
219
|
+
@filter_arity = f.respond_to?(:arity) ? f.arity : 1
|
220
|
+
@filter = f
|
214
221
|
end
|
215
222
|
|
216
|
-
def apply_filter(value)
|
217
|
-
|
223
|
+
def apply_filter(value, context: nil)
|
224
|
+
args = [value]
|
225
|
+
args << context if @filter_arity > 1
|
226
|
+
@filter.call(*args)
|
218
227
|
end
|
219
228
|
|
220
229
|
def each(&blk)
|
data/lib/hash_mapper/version.rb
CHANGED
data/spec/hash_mapper_spec.rb
CHANGED
@@ -628,3 +628,19 @@ describe 'passing custom context object' do
|
|
628
628
|
expect(ctx[:names]).to eq(%w(Ismael Joe))
|
629
629
|
end
|
630
630
|
end
|
631
|
+
|
632
|
+
describe 'passing context down to filters' do
|
633
|
+
it 'yields context to filters' do
|
634
|
+
mapper = Class.new do
|
635
|
+
extend HashMapper
|
636
|
+
|
637
|
+
map from('/name'), to('/name', &(->(name, ctx) { "#{ctx[:title]} #{name}" }))
|
638
|
+
map from('/age'), to('/age') do |age, ctx|
|
639
|
+
"#{age} #{ctx[:age_suffix]}"
|
640
|
+
end
|
641
|
+
end
|
642
|
+
|
643
|
+
output = mapper.normalize({ name: 'Ismael', age: 43 }, context: { title: 'Mr.', age_suffix: 'years old' })
|
644
|
+
expect(output).to eq({ name: 'Mr. Ismael', age: '43 years old' })
|
645
|
+
end
|
646
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ismael Celis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|