hash_remapper 0.1.0 → 0.2.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 +5 -5
- data/.gitignore +3 -0
- data/README.md +33 -19
- data/hash_remapper.gemspec +10 -7
- data/lib/hash_remapper.rb +12 -2
- metadata +28 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b3df1390bdddd42097d20ead6972923562b998a24eaae5a71e8aec24108ea46e
|
4
|
+
data.tar.gz: 3b9c99c04b2abb57a61500eaa059d50a6fcf553bf7ef012a6e2719383396fe30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8064586fb92f187d248772eb684ab5a7779a95f2569a8fd65e65b3328654c39a4189601c82d426722a1c3e9e39a695c2b1dd8e81e04fc18fe92c0fbf0ada9905
|
7
|
+
data.tar.gz: 6398eac1cd8df647da31b5477e827272a929e73d25097ed19b63e5de0574cd8b97c416ec1e6413301f53c632e4df037c05ca48924becd766c39497e640fa7c2a
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -26,8 +26,8 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
* maps original keys to the new ones [1](#map)
|
28
28
|
* auto-ignores all the skipped keys [2](#ignore)
|
29
|
-
*
|
30
|
-
* allows remap keys within preprocessing [4](#preprocessing)
|
29
|
+
* preprocess a value with a lambda [3](#lambda)
|
30
|
+
* allows to remap the keys within preprocessing [4](#preprocessing)
|
31
31
|
* allows to keep data subsets only [5](#subset)
|
32
32
|
* allows to include data with the original keynames [6](#originals)
|
33
33
|
* allows to use global context to create composite fields [7](#composite)
|
@@ -42,20 +42,24 @@ Or install it yourself as:
|
|
42
42
|
```rb
|
43
43
|
# Having such a Hash
|
44
44
|
original_hash = {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
45
|
+
test: 42,
|
46
|
+
'data' => [
|
47
|
+
1,
|
48
|
+
2,
|
49
|
+
'string!'
|
50
|
+
],
|
51
|
+
ignore: :me,
|
52
|
+
nested: {
|
53
|
+
hash: :data,
|
54
|
+
really: {
|
55
|
+
deep: true
|
56
|
+
}
|
57
|
+
},
|
58
|
+
recursive: [
|
59
|
+
{number: 21},
|
60
|
+
{number: 42}
|
61
|
+
]
|
57
62
|
}
|
58
|
-
}
|
59
63
|
```
|
60
64
|
|
61
65
|
## 0: Basic Idea
|
@@ -239,13 +243,23 @@ HashRemapper.remap(
|
|
239
243
|
```rb
|
240
244
|
HashRemapper.remap(
|
241
245
|
original_hash,
|
242
|
-
test: [:magic_bool,
|
246
|
+
test: [:magic_bool, 'nested.really.deep']]
|
243
247
|
)
|
244
248
|
|
245
249
|
# =>
|
246
250
|
# {
|
247
251
|
# magic_bool: true
|
248
252
|
# }
|
253
|
+
|
254
|
+
HashRemapper.remap(
|
255
|
+
original_hash,
|
256
|
+
test: [:magic_numbers, 'recursive.*.number']]
|
257
|
+
)
|
258
|
+
|
259
|
+
# =>
|
260
|
+
# {
|
261
|
+
# magic_numbers: [21, 42]
|
262
|
+
# }
|
249
263
|
```
|
250
264
|
|
251
265
|
## <a name="new_keys">12</a>: Create completely new keys
|
@@ -272,9 +286,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
272
286
|
|
273
287
|
## Contributing
|
274
288
|
|
275
|
-
|
289
|
+
Initial version of this lib was written in pair with [@bronislav](https://github.com/bronislav), so thank him for the invaluable contribution and help.
|
276
290
|
|
277
|
-
|
291
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/smileart/hash_remapper. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
278
292
|
|
279
293
|
## License
|
280
294
|
|
@@ -282,4 +296,4 @@ The gem is available as open source under the terms of the [MIT License](http://
|
|
282
296
|
|
283
297
|
## Code of Conduct
|
284
298
|
|
285
|
-
Everyone interacting in the HashRemapper project’s
|
299
|
+
Everyone interacting in the HashRemapper project’s codebase, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/smileart/hash_remapper/blob/master/CODE_OF_CONDUCT.md).
|
data/hash_remapper.gemspec
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
# coding: utf-8
|
3
3
|
|
4
|
-
lib = File.expand_path('
|
4
|
+
lib = File.expand_path('./lib', __FILE__)
|
5
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
-
|
6
|
+
require_relative './lib/hash_remapper'
|
7
7
|
|
8
8
|
Gem::Specification.new do |spec|
|
9
9
|
spec.name = 'hash_remapper'
|
@@ -13,24 +13,27 @@ Gem::Specification.new do |spec|
|
|
13
13
|
|
14
14
|
spec.summary = 'A little lib which maps original keys to the new ones'
|
15
15
|
spec.description = 'A little lib which maps original keys to the new ones and more'
|
16
|
-
spec.homepage = 'https://
|
16
|
+
spec.homepage = 'https://github.com/smileart/hash_remapper'
|
17
17
|
spec.license = 'MIT'
|
18
18
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
20
20
|
f.match(%r{^(test|spec|features)/})
|
21
21
|
end
|
22
|
+
|
22
23
|
spec.bindir = 'exe'
|
23
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
25
|
spec.require_paths = ['lib']
|
25
26
|
|
26
|
-
spec.add_development_dependency 'bundler', '~>
|
27
|
-
spec.add_development_dependency 'byebug', '~>
|
28
|
-
spec.add_development_dependency 'inch', '
|
27
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
28
|
+
spec.add_development_dependency 'byebug', '~> 11.0'
|
29
|
+
spec.add_development_dependency 'inch', '>= 0.9.0.rc1'
|
29
30
|
spec.add_development_dependency 'letters', '~> 0.4'
|
30
31
|
spec.add_development_dependency 'rake', '~> 12.2'
|
31
32
|
spec.add_development_dependency 'rspec', '~> 3.7'
|
32
33
|
spec.add_development_dependency 'rubocop', '~> 0.51'
|
33
34
|
spec.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
34
35
|
spec.add_development_dependency 'simplecov', '~> 0.15'
|
35
|
-
spec.add_development_dependency 'yard', '~> 0.
|
36
|
+
spec.add_development_dependency 'yard', '~> 0.9'
|
37
|
+
|
38
|
+
spec.add_runtime_dependency 'hash_digger', '~> 0.0'
|
36
39
|
end
|
data/lib/hash_remapper.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'set'
|
4
|
+
require 'hash_digger'
|
4
5
|
|
5
6
|
# Utility class to map original Hash keys to the new ones
|
6
7
|
class HashRemapper
|
7
8
|
# Current Library Version
|
8
|
-
VERSION = '0.
|
9
|
+
VERSION = '0.2.0'
|
9
10
|
|
10
11
|
class << self
|
11
12
|
# Remaps `data` Hash by renaming keys, creating new ones and
|
@@ -63,6 +64,7 @@ class HashRemapper
|
|
63
64
|
|
64
65
|
# Method to try to handle data digging
|
65
66
|
# (if the mapping value is enumerable)
|
67
|
+
# @see https://github.com/smileart/hash_digger
|
66
68
|
#
|
67
69
|
# @param [Object] to the target key to map to
|
68
70
|
# @param [Hash] data the whole original Hash to use as the digging target
|
@@ -71,7 +73,15 @@ class HashRemapper
|
|
71
73
|
def try_digging(to, data)
|
72
74
|
return unless to.respond_to?(:each)
|
73
75
|
|
74
|
-
|
76
|
+
# @see https://github.com/DamirSvrtan/fasterer — fetch_with_argument_vs_block
|
77
|
+
[
|
78
|
+
to.fetch(0),
|
79
|
+
HashDigger::Digger.dig(
|
80
|
+
data: data,
|
81
|
+
path: to.fetch(1) { '*' },
|
82
|
+
strict: to.fetch(2) { true }
|
83
|
+
)
|
84
|
+
]
|
75
85
|
end
|
76
86
|
|
77
87
|
# Method which automatically prepares direct mapping (e.g. { :a => :a })
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_remapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Serge Bedzhyk
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: byebug
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '11.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '11.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: inch
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.9.0.rc1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.9.0.rc1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: letters
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +142,28 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0.
|
145
|
+
version: '0.9'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0.
|
152
|
+
version: '0.9'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: hash_digger
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0.0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0.0'
|
153
167
|
description: A little lib which maps original keys to the new ones and more
|
154
168
|
email: smileart21@gmail.com
|
155
169
|
executables: []
|
@@ -171,7 +185,7 @@ files:
|
|
171
185
|
- hash_remapper.gemspec
|
172
186
|
- img/hash_remapper.png
|
173
187
|
- lib/hash_remapper.rb
|
174
|
-
homepage: https://
|
188
|
+
homepage: https://github.com/smileart/hash_remapper
|
175
189
|
licenses:
|
176
190
|
- MIT
|
177
191
|
metadata: {}
|
@@ -191,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
205
|
version: '0'
|
192
206
|
requirements: []
|
193
207
|
rubyforge_project:
|
194
|
-
rubygems_version: 2.
|
208
|
+
rubygems_version: 2.7.8
|
195
209
|
signing_key:
|
196
210
|
specification_version: 4
|
197
211
|
summary: A little lib which maps original keys to the new ones
|