hash_map 0.3.7 → 0.4.0
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/README.md +93 -0
- data/lib/hash_map.rb +1 -1
- data/lib/hash_map/base.rb +22 -2
- data/lib/hash_map/dsl.rb +15 -0
- data/lib/hash_map/mapper.rb +16 -2
- data/lib/hash_map/plugins.rb +15 -0
- data/lib/hash_map/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8087bb03fb5521f63c3fc63689b7047610996f04
|
4
|
+
data.tar.gz: 139b3dbac032b2799a5bc825c0473a1c6f2b6954
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a1713d1a9e4c18474b7f86626b0c8c51a0b12c92619ac4bc1fbae3e75403cc0780de1732c473f230aed2799e9ed70f09f27ee39d0274822c404beb54b28bc39
|
7
|
+
data.tar.gz: 50292c55159b07a14421df7dfc4720d447f4b2e25b16e5d4b847195ebb32dd9f9da75a244966cbdb6124974245224d3d3578223a76695ad9b931485c31f847cf
|
data/README.md
CHANGED
@@ -232,6 +232,99 @@ Blocks.map(hash)
|
|
232
232
|
|
233
233
|
```
|
234
234
|
|
235
|
+
### Middlewares
|
236
|
+
|
237
|
+
#### transforms_output
|
238
|
+
```ruby
|
239
|
+
original = {
|
240
|
+
"StatusCode" => 200,
|
241
|
+
"ErrorDescription" => nil,
|
242
|
+
"Messages" => nil,
|
243
|
+
"CompanySettings" => {
|
244
|
+
"CompanyIdentity" => {
|
245
|
+
"CompanyGuid" => "0A6005FA-161D-4290-BB7D-B21B14313807",
|
246
|
+
"PseudoCity" => {
|
247
|
+
"Code" => "PARTQ2447"
|
248
|
+
}
|
249
|
+
},
|
250
|
+
"IsCertifyEnabled" => false,
|
251
|
+
"IsProfileEnabled" => true,
|
252
|
+
"PathMobileConfig" => nil
|
253
|
+
}
|
254
|
+
}
|
255
|
+
|
256
|
+
class TransformsOutput < HashMap::Base
|
257
|
+
transforms_output HashMap::UnderscoreKeys
|
258
|
+
from_child 'CompanySettings' do
|
259
|
+
from_child 'CompanyIdentity' do
|
260
|
+
property 'CompanyGuid'
|
261
|
+
end
|
262
|
+
properties 'IsCertifyEnabled', 'IsProfileEnabled', 'PathMobileConfig'
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
TransformsOutput.call(original)
|
267
|
+
# => {:company_guid=>"0A6005FA-161D-4290-BB7D-B21B14313807", :is_certify_enabled=>false, :is_profile_enabled=>true, :path_mobile_config=>nil}
|
268
|
+
```
|
269
|
+
|
270
|
+
#### Transforms input
|
271
|
+
|
272
|
+
```ruby
|
273
|
+
original = {
|
274
|
+
"StatusCode" => 200,
|
275
|
+
"ErrorDescription" => nil,
|
276
|
+
"Messages" => nil,
|
277
|
+
"CompanySettings" => {
|
278
|
+
"CompanyIdentity" => {
|
279
|
+
"CompanyGuid" => "0A6005FA-161D-4290-BB7D-B21B14313807",
|
280
|
+
"PseudoCity" => {
|
281
|
+
"Code" => "PARTQ2447"
|
282
|
+
}
|
283
|
+
},
|
284
|
+
"IsCertifyEnabled" => false,
|
285
|
+
"IsProfileEnabled" => true,
|
286
|
+
"PathMobileConfig" => nil
|
287
|
+
}
|
288
|
+
}
|
289
|
+
|
290
|
+
class TransformsInput < HashMap::Base
|
291
|
+
transforms_input HashMap::UnderscoreKeys
|
292
|
+
from_child :company_settings do
|
293
|
+
from_child :company_identity do
|
294
|
+
property :company_guid
|
295
|
+
end
|
296
|
+
properties :is_certify_enabled, :is_profile_enabled, :path_mobile_config
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
TransformsInput.call(original)
|
301
|
+
# => {:company_guid=>"0A6005FA-161D-4290-BB7D-B21B14313807", :is_certify_enabled=>false, :is_profile_enabled=>true, :path_mobile_config=>nil}
|
302
|
+
```
|
303
|
+
|
304
|
+
|
305
|
+
#### After each
|
306
|
+
|
307
|
+
```ruby
|
308
|
+
class AfterEach < HashMap::Base
|
309
|
+
properties :name, :age
|
310
|
+
after_each HashMap::BlankToNil, HashMap::StringToBoolean
|
311
|
+
end
|
312
|
+
|
313
|
+
blanks = {
|
314
|
+
name: '',
|
315
|
+
age: ''
|
316
|
+
}
|
317
|
+
booleans = {
|
318
|
+
name: 'true',
|
319
|
+
age: 'false'
|
320
|
+
}
|
321
|
+
AfterEach.call(blanks)
|
322
|
+
#=> {"name"=>nil, "age"=>nil}
|
323
|
+
|
324
|
+
AfterEach.call(booleans)
|
325
|
+
#=> {"name"=>true, "age"=>false}
|
326
|
+
```
|
327
|
+
|
235
328
|
### JSON Adapter
|
236
329
|
```ruby
|
237
330
|
class UserMapper < HashMap::Base
|
data/lib/hash_map.rb
CHANGED
data/lib/hash_map/base.rb
CHANGED
@@ -17,7 +17,7 @@ module HashMap
|
|
17
17
|
|
18
18
|
attr_reader :original
|
19
19
|
def initialize(original)
|
20
|
-
@original = prepare_input(original)
|
20
|
+
@original = _transforms_input(prepare_input(original))
|
21
21
|
end
|
22
22
|
|
23
23
|
def mapper
|
@@ -25,13 +25,33 @@ module HashMap
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def output
|
28
|
-
@output ||= mapper.output
|
28
|
+
@output ||= _transforms_output(mapper.output)
|
29
29
|
end
|
30
30
|
alias_method :to_h, :output
|
31
31
|
alias_method :to_hash, :output
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
+
def _transforms_output(output)
|
36
|
+
if middlewares = self.class.dsl.instance_variable_get(:@transform_output)
|
37
|
+
middlewares.inject(output) do |out, proccess|
|
38
|
+
proccess.call(out)
|
39
|
+
end
|
40
|
+
else
|
41
|
+
output
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def _transforms_input(input)
|
46
|
+
if middlewares = self.class.dsl.instance_variable_get(:@transform_input)
|
47
|
+
middlewares.inject(input) do |out, proccess|
|
48
|
+
proccess.call(out)
|
49
|
+
end
|
50
|
+
else
|
51
|
+
input
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
35
55
|
def prepare_input(input)
|
36
56
|
case input
|
37
57
|
when ->(str) { str.class <= String }
|
data/lib/hash_map/dsl.rb
CHANGED
@@ -30,6 +30,21 @@ module HashMap
|
|
30
30
|
@attributes = []
|
31
31
|
end
|
32
32
|
|
33
|
+
def after_each(*middlewares)
|
34
|
+
@after_each ||= []
|
35
|
+
@after_each += middlewares
|
36
|
+
end
|
37
|
+
|
38
|
+
def transforms_output(*middlewares)
|
39
|
+
@transform_output ||= []
|
40
|
+
@transform_output += middlewares
|
41
|
+
end
|
42
|
+
|
43
|
+
def transforms_input(*middlewares)
|
44
|
+
@transform_input ||= []
|
45
|
+
@transform_input += middlewares
|
46
|
+
end
|
47
|
+
|
33
48
|
def _set_attributes(attrs)
|
34
49
|
@attributes = attrs
|
35
50
|
end
|
data/lib/hash_map/mapper.rb
CHANGED
@@ -28,6 +28,18 @@ module HashMap
|
|
28
28
|
nil_to_default(value, struct)
|
29
29
|
end
|
30
30
|
|
31
|
+
def after_each_middleware(value, key)
|
32
|
+
after_each_callbacks.inject(value) do |output, middle|
|
33
|
+
middle.call(output)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def after_each_callbacks
|
38
|
+
hash_map.class.dsl.after_each
|
39
|
+
rescue
|
40
|
+
[]
|
41
|
+
end
|
42
|
+
|
31
43
|
def map_collection(struct)
|
32
44
|
value = get_value_from_key(struct)
|
33
45
|
value = Array.wrap(value)
|
@@ -35,20 +47,22 @@ module HashMap
|
|
35
47
|
end
|
36
48
|
|
37
49
|
def get_value_from_key(struct, from = :from)
|
38
|
-
struct[from].inject(original) do |output, k|
|
50
|
+
value = struct[from].inject(original) do |output, k|
|
39
51
|
break unless output.respond_to?(:[])
|
40
52
|
output.send(:[], k)
|
41
53
|
end
|
54
|
+
after_each_middleware(value, struct[:key].last)
|
42
55
|
end
|
43
56
|
|
44
57
|
def execute_block(struct)
|
45
58
|
block = struct[:proc]
|
46
|
-
if struct[:from_child]
|
59
|
+
value = if struct[:from_child]
|
47
60
|
nested = get_value_from_key(struct, :from_child)
|
48
61
|
hash_map.instance_exec nested, original, &block
|
49
62
|
else
|
50
63
|
hash_map.instance_exec original, original, &block
|
51
64
|
end
|
65
|
+
after_each_middleware(value, struct[:key].last)
|
52
66
|
end
|
53
67
|
|
54
68
|
def build_keys(ary, value)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module HashMap
|
2
|
+
BlankToNil = lambda do |v|
|
3
|
+
v.blank? ? nil : v
|
4
|
+
end
|
5
|
+
|
6
|
+
StringToBoolean = lambda do |v|
|
7
|
+
return false if v == 'false'
|
8
|
+
return true if v == 'true'
|
9
|
+
v
|
10
|
+
end
|
11
|
+
|
12
|
+
UnderscoreKeys = lambda do |output|
|
13
|
+
output.deep_transform_keys{ |k| k.underscore.to_sym }
|
14
|
+
end
|
15
|
+
end
|
data/lib/hash_map/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artur Pañach
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- lib/hash_map/dsl.rb
|
95
95
|
- lib/hash_map/json_adapter.rb
|
96
96
|
- lib/hash_map/mapper.rb
|
97
|
+
- lib/hash_map/plugins.rb
|
97
98
|
- lib/hash_map/version.rb
|
98
99
|
homepage: https://github.com/arturictus/hash_map
|
99
100
|
licenses:
|
@@ -115,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
116
|
version: '0'
|
116
117
|
requirements: []
|
117
118
|
rubyforge_project:
|
118
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.6.3
|
119
120
|
signing_key:
|
120
121
|
specification_version: 4
|
121
122
|
summary: Library to map easily hashes.
|