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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: fbfe47cb8ee736cddb808ede7db0b136fcf8f07d
4
- data.tar.gz: bbf5f08842c8d821332f2085dbef2c7f6560d396
2
+ SHA256:
3
+ metadata.gz: b3df1390bdddd42097d20ead6972923562b998a24eaae5a71e8aec24108ea46e
4
+ data.tar.gz: 3b9c99c04b2abb57a61500eaa059d50a6fcf553bf7ef012a6e2719383396fe30
5
5
  SHA512:
6
- metadata.gz: c80302b1468b4b300c99bd281022b282863d059d0d4fdc4e758213c42fc00473022768d1358743dbb78cdd32ac81c36c17dda1995115b6577294f7e0dde83838
7
- data.tar.gz: 76d4c1d617e18f89240ff75b3e107aaaab466e5082a00362eaf4fd8d05244dfa8069019b7c3ae68748bec6923b31b955962d214431b858a546e77a9df3c9bac9
6
+ metadata.gz: 8064586fb92f187d248772eb684ab5a7779a95f2569a8fd65e65b3328654c39a4189601c82d426722a1c3e9e39a695c2b1dd8e81e04fc18fe92c0fbf0ada9905
7
+ data.tar.gz: 6398eac1cd8df647da31b5477e827272a929e73d25097ed19b63e5de0574cd8b97c416ec1e6413301f53c632e4df037c05ca48924becd766c39497e640fa7c2a
data/.gitignore CHANGED
@@ -86,3 +86,6 @@ Session.vim
86
86
  *~
87
87
  # auto-generated tag files
88
88
  tags
89
+
90
+ ### vscode ###
91
+ .vscode
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
- * preprocesses the value with a lambda [3](#lambda)
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
- 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
- }
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, %i[nested really deep]]
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
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/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.
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
- Initial version of this lib was written in pair with @bronislav, so thank him for invaluabale contribution and help.
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 codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/hash_remapper/blob/master/CODE_OF_CONDUCT.md).
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).
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
  # coding: utf-8
3
3
 
4
- lib = File.expand_path('../lib', __FILE__)
4
+ lib = File.expand_path('./lib', __FILE__)
5
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
- require 'hash_remapper'
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://rubygems.org/gems/hash_remapper'
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', '~> 1.16'
27
- spec.add_development_dependency 'byebug', '~> 9.1'
28
- spec.add_development_dependency 'inch', '~> 0.7'
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.8'
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.1.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
- [to.first, data.dig(*to.last)]
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.1.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: 2017-12-05 00:00:00.000000000 Z
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: '1.16'
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: '1.16'
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: '9.1'
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: '9.1'
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: '0.7'
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: '0.7'
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.8'
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.8'
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://rubygems.org/gems/hash_remapper
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.6.14
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