hash_remapper 0.1.0 → 0.4.3

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: 849f5ac471d049fc5ed4dccb35a3dc583cc326b94196378db5444a6ce6d7c7e5
4
+ data.tar.gz: caebef5d5546e43484ace97d07e9b8a3c719a11d033b6936d9c2e67be0534a41
5
5
  SHA512:
6
- metadata.gz: c80302b1468b4b300c99bd281022b282863d059d0d4fdc4e758213c42fc00473022768d1358743dbb78cdd32ac81c36c17dda1995115b6577294f7e0dde83838
7
- data.tar.gz: 76d4c1d617e18f89240ff75b3e107aaaab466e5082a00362eaf4fd8d05244dfa8069019b7c3ae68748bec6923b31b955962d214431b858a546e77a9df3c9bac9
6
+ metadata.gz: 467c6ab818803bf1ac8f7c252ed60bf0ce9b02926cae155aa21cd1689aa5c05e6926716293ad45ba8c74190c6aa7b8221a7ad6658ac47394f41faefcd1369e62
7
+ data.tar.gz: 90897ecf9b5bdc3bb6ee6b60c09721a9f0a5236fd2e5f5bc4d03580beb83a337a8e36f94e0294ea8005fe0eee26a20dfc5521f43502d10a8f8ebeef73a8f58ee
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
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.4.1
5
- before_install: gem install bundler -v 1.16
4
+ - 2.6.0
5
+ before_install: gem install bundler -v 2.0.1
data/README.md CHANGED
@@ -5,6 +5,8 @@
5
5
  </p>
6
6
 
7
7
  > A little lib which maps original keys to the new ones <sup>[*](#features)</sup>
8
+ >
9
+ > [![Build Status](https://travis-ci.org/smileart/hash_remapper.svg?branch=master)](https://travis-ci.org/smileart/hash_remapper) ![Gem](https://img.shields.io/gem/v/hash_remapper.svg)
8
10
 
9
11
  ## Installation
10
12
 
@@ -26,36 +28,41 @@ Or install it yourself as:
26
28
 
27
29
  * maps original keys to the new ones [1](#map)
28
30
  * 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)
31
+ * preprocess a value with a lambda [3](#lambda)
32
+ * allows to remap the keys within preprocessing [4](#preprocessing)
31
33
  * allows to keep data subsets only [5](#subset)
32
- * allows to include data with the original keynames [6](#originals)
34
+ * allows to include data with the original key names [6](#originals)
33
35
  * allows to use global context to create composite fields [7](#composite)
34
36
  * merges values if the key already exists and supports #merge [8](#merge)
35
37
  * replaces values if the key already exists and doesn't support #merge [9](#replace)
36
38
  * allows to assign static defaults through lambdas [10](#defaults)
37
39
  * allows to remap to the deep values within the context [11](#deep)
38
- * allows to create completely new keys [12](#new_keys)
40
+ * allows to create completely new keys (including nested ones) [12](#new_keys)
39
41
 
40
42
  ## Usage
41
43
 
42
44
  ```rb
43
45
  # Having such a Hash
44
46
  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
- }
47
+ test: 42,
48
+ 'data' => [
49
+ 1,
50
+ 2,
51
+ 'string!'
52
+ ],
53
+ ignore: :me,
54
+ nested: {
55
+ hash: :data,
56
+ really: {
57
+ deep: true
58
+ }
59
+ },
60
+ recursive: [
61
+ { number: 21 },
62
+ { number: 42 },
63
+ { test: 13 }
64
+ ]
57
65
  }
58
- }
59
66
  ```
60
67
 
61
68
  ## 0: Basic Idea
@@ -87,6 +94,7 @@ HashRemapper.remap(
87
94
  # data: [1, 2, 'string!'],
88
95
  # dont_ignore: :me,
89
96
  # internal: { hash: :data, really: { deep: true } },
97
+ # recursive: [ { number: 21 }, { number: 42 }, { test: 13 } ]
90
98
  # }
91
99
  ```
92
100
 
@@ -115,6 +123,7 @@ HashRemapper.remap(
115
123
  # :ignore => :me,
116
124
  # :magic_number => 42,
117
125
  # :nested => {:hash=>:data, :really=>{:deep=>true}}
126
+ # :recursive => [ { number: 21 }, { number: 42 }, { test: 13 } ]
118
127
  # }
119
128
  ```
120
129
 
@@ -160,7 +169,7 @@ HashRemapper.remap(
160
169
  # }
161
170
  ```
162
171
 
163
- ## <a name="originals">6</a>: Include data with the original keyname
172
+ ## <a name="originals">6</a>: Include data with the original key name
164
173
 
165
174
  ```rb
166
175
  HashRemapper.remap(
@@ -237,18 +246,29 @@ HashRemapper.remap(
237
246
  ## <a name="deep">11</a>: Remap to the deep values
238
247
 
239
248
  ```rb
249
+ # INFO: For advanced usage see the specs!
240
250
  HashRemapper.remap(
241
251
  original_hash,
242
- test: [:magic_bool, %i[nested really deep]]
252
+ test: [:magic_bool, { path: 'nested.really.deep' }]]
243
253
  )
244
254
 
245
255
  # =>
246
256
  # {
247
257
  # magic_bool: true
248
258
  # }
259
+
260
+ HashRemapper.remap(
261
+ original_hash,
262
+ test: [:magic_numbers, {path: 'recursive.*.number', strict: false}]]
263
+ )
264
+
265
+ # =>
266
+ # {
267
+ # magic_numbers: [21, 42, nil]
268
+ # }
249
269
  ```
250
270
 
251
- ## <a name="new_keys">12</a>: Create completely new keys
271
+ ## <a name="new_keys">12</a>: Create completely new keys (including nested ones)
252
272
 
253
273
  ```rb
254
274
  HashRemapper.remap(
@@ -262,8 +282,60 @@ HashRemapper.remap(
262
282
  # magic_number: 42,
263
283
  # absolutely_new_key: 'shiny new value'
264
284
  # }
285
+
286
+ HashRemapper.remap(
287
+ original_hash,
288
+ _: [[:nested, :new, :key], :test]
289
+ )
290
+
291
+ # =>
292
+ # {
293
+ # nested: {
294
+ # new: {
295
+ # key: 42
296
+ # }
297
+ # }
298
+ # }
299
+
300
+
301
+ # mapping a deep target from a deep source (BEWARE an old digging API <= v0.1.0)
302
+ HashRemapper.remap(
303
+ original_hash,
304
+ _: [[:nested, :new, :key], [:nested, :really, :deep]]
305
+ )
306
+
307
+ # =>
308
+ # {
309
+ # nested: {
310
+ # new: {
311
+ # key: true
312
+ # }
313
+ # }
314
+ # }
315
+
316
+
317
+ # mapping a deep target from a deep source (new digging API >= v0.2.0)
318
+ HashRemapper.remap(
319
+ original_hash,
320
+ _: [[:new, :deeply, :nested, :value], {path: 'recursive.*.number', strict: false, default: 3.14}]
321
+ )
322
+
323
+ # =>
324
+ # {
325
+ # new: {
326
+ # deeply: {
327
+ # nested: {
328
+ # value: [21, 42, 3.14]
329
+ # }
330
+ # }
331
+ # }
332
+ # }
265
333
  ```
266
334
 
335
+ ## Examples
336
+
337
+ For advanced usage and examples see [specs](./spec/hash_remapper_spec.rb) and [examples](./exmaples)
338
+
267
339
  ## Development
268
340
 
269
341
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -272,9 +344,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
272
344
 
273
345
  ## Contributing
274
346
 
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.
347
+ 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
348
 
277
- Initial version of this lib was written in pair with @bronislav, so thank him for invaluabale contribution and help.
349
+ 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
350
 
279
351
  ## License
280
352
 
@@ -282,4 +354,4 @@ The gem is available as open source under the terms of the [MIT License](http://
282
354
 
283
355
  ## Code of Conduct
284
356
 
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).
357
+ 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).
@@ -0,0 +1,100 @@
1
+ require 'hash_digger'
2
+ require 'hash_remapper'
3
+ require 'tapp'
4
+
5
+ data = {
6
+ :books => [
7
+ {
8
+ :title => "The Hitchhiker's Guide to the Galaxy",
9
+ :editions => [
10
+ {
11
+ :isbn => "978-1-9936-7490-4",
12
+ :language => "en",
13
+ :pages => 193,
14
+ :genres => [
15
+ "comic",
16
+ "science fiction"
17
+ ]
18
+ },
19
+ {
20
+ :isbn => "978-0-5762-2634-9",
21
+ :language => "en",
22
+ :pages => 208,
23
+ :genres => [
24
+ "comic",
25
+ "fiction",
26
+ "science fiction"
27
+ ]
28
+ },
29
+ {
30
+ :isbn => "978-5-4566-1998-3",
31
+ :language => "de",
32
+ :pages => 232,
33
+ :genres => [
34
+ "fiction",
35
+ "science fiction"
36
+ ]
37
+ }
38
+ ]
39
+ },
40
+ {
41
+ :title => "To Kill a Mockingbird",
42
+ :editions => [
43
+ {
44
+ :isbn => "978-4-0125-2865-3",
45
+ :language => "en",
46
+ :pages => 324,
47
+ :genres => [
48
+ "Southern Gothic",
49
+ "Bildungsroman"
50
+ ]
51
+ },
52
+ {
53
+ :isbn => "978-5-3638-3280-2",
54
+ :language => "en",
55
+ :pages => 324,
56
+ :genres => [
57
+ "magic realism"
58
+ ]
59
+ }
60
+ ]
61
+ }
62
+ ]
63
+ }
64
+
65
+ puts "Here we lose the relations between books and ISBNs:"
66
+ raw_result = HashRemapper.remap(
67
+ data,
68
+ titles: [:titles, { path: 'books.*.title' }],
69
+ isbns: [:isbns, { path: 'books.*.editions.*.*.isbn' }]
70
+ ).tapp
71
+
72
+ puts '='*50
73
+ puts
74
+
75
+ puts "Here we do a little trick splitting the path into two parts to presev relation in indexes"
76
+ isbn_result = HashRemapper.remap(
77
+ data,
78
+ titles: [:titles, { path: 'books.*.title' }],
79
+ isbns: [:isbns, { path: 'books.*.editions.*', lambda: ->(editions) { editions.collect { |edition| HashDigger::Digger.dig(data: edition, path: '*.isbn') } } }]
80
+ ).tapp
81
+
82
+ puts '='*50
83
+ puts
84
+
85
+ puts "Then we zip the data together in key => value format:"
86
+ Hash[isbn_result[:titles].zip(isbn_result[:isbns])].tapp
87
+
88
+ puts '='*50
89
+ puts ''
90
+
91
+ puts "Or create the new hashes assebling the data in any desirable structure:"
92
+ books_with_isbns = []
93
+ isbn_result[:titles].each_with_index do |t, i|
94
+ books_with_isbns << {
95
+ title: t,
96
+ isbns: isbn_result[:isbns][i].uniq
97
+ }
98
+ end
99
+
100
+ books_with_isbns.tapp
@@ -0,0 +1,42 @@
1
+ require 'json'
2
+ require_relative '../lib/hash_remapper'
3
+
4
+ # https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22
5
+ weather = JSON.parse('{"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":300,"main":"Drizzle","description":"light intensity drizzle","icon":"09d"}],"base":"stations","main":{"temp":280.32,"pressure":1012,"humidity":81,"temp_min":279.15,"temp_max":281.15},"visibility":10000,"wind":{"speed":4.1,"deg":80},"clouds":{"all":90},"dt":1485789600,"sys":{"type":1,"id":5091,"message":0.0103,"country":"GB","sunrise":1485762037,"sunset":1485794875},"id":2643743,"name":"London","cod":200}')
6
+
7
+ k_to_c = ->(kelvin) { "#{(kelvin - 273.15).floor}˚C" } # notice the difference with the next example
8
+
9
+ remapped_weather = HashRemapper.remap(
10
+ weather,
11
+ # deep keys creation instead of automerge
12
+ _conditions: [[:current_conditions, :description], {path: 'weather.0', lambda: ->(res){ "#{res[:description]}".capitalize }} ],
13
+ _temperature: [[:current_conditions, :temperature], {path: 'main.temp', lambda: k_to_c}],
14
+
15
+ _clouds: [[:clouds_coverage, :percentage], {path: 'clouds.all'}],
16
+ 'visibility' => ->(vis, _) { [:visibility, "#{vis / 1000}km"] },
17
+ ['sys', 'country'] => ->(country, _) { [[:place, :country], country] },
18
+ 'name' => ->(city, _) { [[:place, :city], city] },
19
+ 'coord' => :geo_coordinates
20
+ )
21
+
22
+ p remapped_weather
23
+
24
+ # =================================================================================================================================
25
+
26
+ k_to_c = ->(kelvin) { { temperature: "#{(kelvin - 273.15).floor}˚C" } } # notice the difference with the previous example
27
+
28
+ remapped_weather = HashRemapper.remap(
29
+ weather,
30
+ # automerge on "conflict"
31
+ _conditions: [:current_conditions, {path: 'weather.0', lambda: ->(res){ { description: "#{res[:description]}".capitalize }}} ],
32
+ _temperature: [:current_conditions, {path: 'main.temp', lambda: k_to_c}], # automerge
33
+ _clouds: [[:clouds_coverage, :percentage], {path: 'clouds.all'}],
34
+ 'visibility' => ->(vis, _) { [:visibility, "#{vis / 1000}km"] },
35
+ ['sys', 'country'] => ->(country, _) { [[:place, :country], country] },
36
+ 'name' => ->(city, _) { [[:place, :city], city] },
37
+
38
+ # notice the nested HashRemapper (alternatively https://devdocs.io/rails~5.0/hash#method-i-deep_symbolize_keys could be used on overall result)
39
+ 'coord' => ->(coord, _) { [:geo_coordinates, HashRemapper.remap(coord, 'lon' => :lon, 'lat' => :lat)] },
40
+ )
41
+
42
+ p remapped_weather
@@ -3,9 +3,10 @@
3
3
 
4
4
  lib = File.expand_path('../lib', __FILE__)
5
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
- require 'hash_remapper'
7
6
 
8
- Gem::Specification.new do |spec|
7
+ require 'hash_remapper/version'
8
+
9
+ HashRemapper::GEMSPEC = Gem::Specification.new do |spec|
9
10
  spec.name = 'hash_remapper'
10
11
  spec.version = HashRemapper::VERSION
11
12
  spec.authors = ['Serge Bedzhyk']
@@ -13,24 +14,27 @@ Gem::Specification.new do |spec|
13
14
 
14
15
  spec.summary = 'A little lib which maps original keys to the new ones'
15
16
  spec.description = 'A little lib which maps original keys to the new ones and more'
16
- spec.homepage = 'https://rubygems.org/gems/hash_remapper'
17
+ spec.homepage = 'https://github.com/smileart/hash_remapper'
17
18
  spec.license = 'MIT'
18
19
 
19
20
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
21
  f.match(%r{^(test|spec|features)/})
21
22
  end
23
+
22
24
  spec.bindir = 'exe'
23
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
26
  spec.require_paths = ['lib']
25
27
 
26
- spec.add_development_dependency 'bundler', '~> 1.16'
27
- spec.add_development_dependency 'byebug', '~> 9.1'
28
- spec.add_development_dependency 'inch', '~> 0.7'
29
- spec.add_development_dependency 'letters', '~> 0.4'
30
- spec.add_development_dependency 'rake', '~> 12.2'
31
- spec.add_development_dependency 'rspec', '~> 3.7'
32
- spec.add_development_dependency 'rubocop', '~> 0.51'
28
+ spec.add_dependency 'hash_digger', '~> 0.1'
29
+
30
+ spec.add_development_dependency 'bundler', '~> 2.1'
31
+ spec.add_development_dependency 'byebug', '~> 11.1'
32
+ spec.add_development_dependency 'inch', '>= 0.9.0.rc1'
33
+ spec.add_development_dependency 'rake', '~> 13.0'
34
+ spec.add_development_dependency 'rspec', '~> 3.9'
35
+ spec.add_development_dependency 'rubocop', '~> 0.91'
33
36
  spec.add_development_dependency 'rubygems-tasks', '~> 0.2'
34
- spec.add_development_dependency 'simplecov', '~> 0.15'
35
- spec.add_development_dependency 'yard', '~> 0.8'
37
+ spec.add_development_dependency 'simplecov', '~> 0.19'
38
+ spec.add_development_dependency 'tapp', '~> 1.5'
39
+ spec.add_development_dependency 'yard', '~> 0.9'
36
40
  end
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'set'
4
+ require 'hash_digger'
5
+
6
+ require 'tapp' if ENV['DEBUG']
7
+ require 'byebug' if ENV['DEBUG']
4
8
 
5
9
  # Utility class to map original Hash keys to the new ones
6
10
  class HashRemapper
7
- # Current Library Version
8
- VERSION = '0.1.0'
9
-
10
11
  class << self
11
12
  # Remaps `data` Hash by renaming keys, creating new ones and
12
13
  # optionally aggregating values
@@ -21,19 +22,20 @@ class HashRemapper
21
22
  #
22
23
  # @param [Hash] data the original Hash to remap
23
24
  # @param [Boolean] pass_trough the flag to pass the original key/value pairs (default: false)
24
- # @param [Hash] mapping the Hash which in the simplest case tells how to rename keys
25
+ # @param [Hash] mapping the Hash which in the simplest case tells how to rename keys (source: :target)
25
26
  #
26
27
  # @return [Hash] remapped version of the original Hash
27
28
  # (selected keys only or all the keys if we passed originals)
28
29
  def remap(data, pass_trough = false, mapping)
29
30
  mapping = pass_trough_mapping(data, mapping) if pass_trough
30
31
 
31
- mapping.each_with_object({}) do |(from, to), acc|
32
+ mapping.each_with_object(Hash.new { |hash, key| hash[key] = Hash.new(&hash.default_proc) }) do |(from, to), acc|
32
33
  key, value = try_callable(from, to, data, acc) ||
33
- try_digging(to, data) ||
34
+ try_digging(from, to, data, acc) ||
35
+ try_nesting(from, to, data, acc) ||
34
36
  [to, data[from]]
35
37
 
36
- acc[key] = value
38
+ set_value(acc, key, value)
37
39
  acc
38
40
  end
39
41
  end
@@ -52,26 +54,56 @@ class HashRemapper
52
54
  def try_callable(from, to, data, acc)
53
55
  return unless to.respond_to?(:call)
54
56
 
55
- target_name, target_data = to.call(data[from], data)
57
+ target_name, target_data = to.call(data.dig(*from), data)
56
58
 
57
- if acc.key?(target_name) && acc[target_name].respond_to?(:merge)
58
- target_data = acc[target_name].merge(target_data)
59
- end
59
+ target_data = acc.dig(*target_name).respond_to?(:merge) && target_data.respond_to?(:merge) ?
60
+ acc.dig(*target_name).merge(target_data) :
61
+ target_data
60
62
 
61
63
  [target_name, target_data]
62
64
  end
63
65
 
64
66
  # Method to try to handle data digging
65
67
  # (if the mapping value is enumerable)
68
+ # @see https://github.com/smileart/hash_digger
66
69
  #
67
- # @param [Object] to the target key to map to
70
+ # @param [Array] to the target key to map to ([new_key, {path: 'a.*.b', strict: false, lambda: ->(res){ … }}])
68
71
  # @param [Hash] data the whole original Hash to use as the digging target
69
72
  #
70
73
  # @return [Array(Object,Object)] key and its value to put to the resulting Hash
71
- def try_digging(to, data)
74
+ def try_digging(_from, to, data, acc)
72
75
  return unless to.respond_to?(:each)
73
76
 
74
- [to.first, data.dig(*to.last)]
77
+ digger_args = to.fetch(1)
78
+
79
+ # v0.1.0 backward compartability layer ([new_key, [:digg, :path, :keys]])
80
+ return [to.first, data.dig(*to.last)] if digger_args.kind_of?(Array)
81
+ return unless digger_args.respond_to?(:fetch)
82
+
83
+ lambda = digger_args.fetch(:lambda) { nil }
84
+
85
+ # @see https://github.com/DamirSvrtan/fasterer — fetch_with_argument_vs_block
86
+ # @see https://github.com/smileart/hash_digger — digger args
87
+ target_name = to.fetch(0)
88
+
89
+ source_data = HashDigger::Digger.dig(
90
+ data: data,
91
+ path: digger_args.fetch(:path) { '*' },
92
+ strict: digger_args.fetch(:strict) { true },
93
+ default: digger_args.fetch(:default) { nil },
94
+ &lambda
95
+ )
96
+
97
+ return [
98
+ target_name,
99
+ acc.dig(*target_name).respond_to?(:merge) && source_data.respond_to?(:merge) ?
100
+ acc.dig(*target_name).merge(source_data) :
101
+ source_data
102
+ ]
103
+ end
104
+
105
+ def try_nesting(_from, to, data, _acc)
106
+ [to.fetch(0), data[to.fetch(1)]] if to.respond_to?(:fetch)
75
107
  end
76
108
 
77
109
  # Method which automatically prepares direct mapping (e.g. { :a => :a })
@@ -90,5 +122,16 @@ class HashRemapper
90
122
 
91
123
  mapping.merge(pass_trough_mapping)
92
124
  end
125
+
126
+ def set_value(data, key, value)
127
+ unless key.respond_to?(:each)
128
+ data[key] = value
129
+ return data
130
+ end
131
+
132
+ last_key = key.pop
133
+
134
+ data.dig(*key)[last_key] = value
135
+ end
93
136
  end
94
137
  end
@@ -0,0 +1,4 @@
1
+ class HashRemapper
2
+ # Current Library Version
3
+ VERSION = '0.4.3'
4
+ end
metadata CHANGED
@@ -1,113 +1,113 @@
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.4.3
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: 2020-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: hash_digger
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
20
- type: :development
19
+ version: '0.1'
20
+ type: :runtime
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: '0.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: byebug
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '9.1'
33
+ version: '2.1'
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: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: inch
42
+ name: byebug
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.7'
47
+ version: '11.1'
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: '11.1'
55
55
  - !ruby/object:Gem::Dependency
56
- name: letters
56
+ name: inch
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0.4'
61
+ version: 0.9.0.rc1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '0.4'
68
+ version: 0.9.0.rc1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '12.2'
75
+ version: '13.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '12.2'
82
+ version: '13.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.7'
89
+ version: '3.9'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '3.7'
96
+ version: '3.9'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rubocop
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.51'
103
+ version: '0.91'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.51'
110
+ version: '0.91'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubygems-tasks
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -128,28 +128,42 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0.15'
131
+ version: '0.19'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.19'
139
+ - !ruby/object:Gem::Dependency
140
+ name: tapp
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.5'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: '0.15'
152
+ version: '1.5'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: yard
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: '0.8'
159
+ version: '0.9'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: '0.8'
166
+ version: '0.9'
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: []
@@ -168,10 +182,13 @@ files:
168
182
  - Rakefile
169
183
  - bin/console
170
184
  - bin/setup
185
+ - exmaples/relations.rb
186
+ - exmaples/weather.rb
171
187
  - hash_remapper.gemspec
172
188
  - img/hash_remapper.png
173
189
  - lib/hash_remapper.rb
174
- homepage: https://rubygems.org/gems/hash_remapper
190
+ - lib/hash_remapper/version.rb
191
+ homepage: https://github.com/smileart/hash_remapper
175
192
  licenses:
176
193
  - MIT
177
194
  metadata: {}
@@ -190,8 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
207
  - !ruby/object:Gem::Version
191
208
  version: '0'
192
209
  requirements: []
193
- rubyforge_project:
194
- rubygems_version: 2.6.14
210
+ rubygems_version: 3.1.2
195
211
  signing_key:
196
212
  specification_version: 4
197
213
  summary: A little lib which maps original keys to the new ones