hash_remapper 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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