key_flatten 0.1.0 → 1.0.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
2
  SHA1:
3
- metadata.gz: 72053c4679412907d86129bfaa3076669a4b9a21
4
- data.tar.gz: 7e5b5fe0613c87f08363ec432ca828236a390e9e
3
+ metadata.gz: 3b05cb3c2f7f68155ec66fe5335f32a8fd41a9c1
4
+ data.tar.gz: 634b3d5e73c7253ecb31d929be58cb7d0504a4f5
5
5
  SHA512:
6
- metadata.gz: 60bc829d85a4aa4ed02c84d3a9d7f8e7f8ecaff2ca0ea1e2e37f29d27520b068d0812cfe51e0bca68a3131b258a728e6635a1b1f172cfb5c5659d3ec85e1def7
7
- data.tar.gz: e162e2b316a137fd7e555d489936240cd0243d5db41aef820de194285a39d1ccef7cf9d343adb117d3849d9e6def8470f49ccef1fe778a3ca931e8e1d034d50d
6
+ metadata.gz: ef0ce0c974d9ea6ac34919f502519f53b80d21166c12d1b8370227e5b73b6df7bec6d9c6cfc5fcc94c475d935629ab231b1b03d8b97f8e2df3f02bd555dfddb3
7
+ data.tar.gz: 3c8b79f7ed8cde43883a46a028810cf4d86b4751a171b5f307b1d7f9d3e44daeb87d0b9aaa3c9bcf418b53c50a30046ece3907bd3e5edc9bf36a9147ffefabb0
data/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # Change Log
2
+
3
+ ## [1.0.0] - 2017-03-06
4
+
5
+ ### Added
6
+
7
+ - `KeyFlatten.key_unflatten` method
8
+ - `Hash#key_flatten` method for core extension
9
+
10
+ ### Changed
11
+
12
+ - The option `symbolize` is now `symbolize_keys`
13
+
14
+ ## [0.1.0] - 2016-11-06
15
+
16
+ ### Added
17
+
18
+ - Initial release
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # key_flatten
2
2
 
3
- Flatten keys of `Hash`.
3
+ Flatten/unflatten keys of `Hash`.
4
4
 
5
5
  ## Installation
6
6
 
@@ -27,6 +27,9 @@ require 'key_flatten'
27
27
 
28
28
  KeyFlatten.key_flatten({"foo" => {"bar" => "baz"}})
29
29
  # => {"foo.bar" => "baz"}
30
+
31
+ KeyFlatten.key_unflatten({"foo.bar" => "baz"})
32
+ # => {"foo" => {"bar" => "baz"}}
30
33
  ```
31
34
 
32
35
  ### Monkey patching
@@ -36,6 +39,9 @@ require 'key_flatten/core_ext'
36
39
 
37
40
  {"foo" => {"bar" => "baz"}}.key_flatten
38
41
  # => {"foo.bar" => "baz"}
42
+
43
+ {"foo.bar" => "baz"}.key_unflatten
44
+ # => {"foo" => {"bar" => "baz"}}
39
45
  ```
40
46
 
41
47
  ### Specify delimiter
@@ -43,13 +49,19 @@ require 'key_flatten/core_ext'
43
49
  ```rb
44
50
  {"foo" => {"bar" => "baz"}}.key_flatten(delimiter: "_")
45
51
  # => {"foo_bar" => "baz"}
52
+
53
+ {"foo_bar" => "baz"}.key_unflatten(delimiter: "_")
54
+ # => {"foo" => {"bar" => "baz"}}
46
55
  ```
47
56
 
48
57
  ### Symbolize keys
49
58
 
50
59
  ```rb
51
- {"foo" => {"bar" => "baz"}}.key_flatten(symbolize: "_")
60
+ {"foo" => {"bar" => "baz"}}.key_flatten(symbolize_keys: true)
52
61
  # => {:"foo.bar" => "baz"}
62
+
63
+ {"foo.bar" => "baz"}.key_unflatten(symbolize_keys: true)
64
+ # => {foo: {bar: "baz"}}
53
65
  ```
54
66
 
55
67
  ## Development
data/lib/key_flatten.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  require "key_flatten/version"
2
2
 
3
3
  module KeyFlatten
4
- def self.key_flatten(hash, symbolize: false, delimiter: '.', prefix: nil, result: {})
4
+ def self.key_flatten(hash, symbolize_keys: false, delimiter: '.', prefix: nil, result: {})
5
5
  hash.each do |k, v|
6
6
  flat_key = prefix.nil? ? k.to_s : "#{prefix}#{delimiter}#{k}"
7
- flat_key = symbolize ? flat_key.to_sym : flat_key.to_s
7
+ flat_key = symbolize_keys ? flat_key.to_sym : flat_key.to_s
8
8
 
9
9
  if v.is_a?(Hash)
10
- self.key_flatten(v, symbolize: symbolize, delimiter: delimiter, prefix: flat_key, result: result)
10
+ self.key_flatten(v, symbolize_keys: symbolize_keys, delimiter: delimiter, prefix: flat_key, result: result)
11
11
  else
12
12
  result[flat_key] = v
13
13
  end
@@ -16,7 +16,28 @@ module KeyFlatten
16
16
  result
17
17
  end
18
18
 
19
- def key_flatten(symbolize: false, delimiter: '.', prefix: nil)
20
- ::KeyFlatten.key_flatten(self, symbolize: symbolize, delimiter: delimiter, prefix: prefix)
19
+ def self.key_unflatten(hash, symbolize_keys: false, delimiter: '.', result: {})
20
+ hash.each do |k, v|
21
+ keys = k.to_s.split(delimiter)
22
+ last_key = symbolize_keys ? keys.pop.to_sym : keys.pop
23
+
24
+ h = keys.reduce(result) do |h, k|
25
+ k = k.to_sym if symbolize_keys
26
+ h[k] = {} unless h.key? k
27
+ h[k]
28
+ end
29
+
30
+ h[last_key] = v
31
+ end
32
+
33
+ result
34
+ end
35
+
36
+ def key_flatten(symbolize_keys: false, delimiter: '.', prefix: nil)
37
+ ::KeyFlatten.key_flatten(self, symbolize_keys: symbolize_keys, delimiter: delimiter, prefix: prefix)
38
+ end
39
+
40
+ def key_unflatten(symbolize_keys: false, delimiter: '.')
41
+ ::KeyFlatten.key_unflatten(self, symbolize_keys: symbolize_keys, delimiter: delimiter)
21
42
  end
22
43
  end
@@ -1,3 +1,3 @@
1
1
  module KeyFlatten
2
- VERSION = "0.1.0"
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: key_flatten
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuya Takeyama
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-11 00:00:00.000000000 Z
11
+ date: 2017-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -62,6 +62,7 @@ files:
62
62
  - ".gitignore"
63
63
  - ".rspec"
64
64
  - ".travis.yml"
65
+ - CHANGELOG.md
65
66
  - Gemfile
66
67
  - LICENSE.txt
67
68
  - README.md
@@ -92,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
93
  version: '0'
93
94
  requirements: []
94
95
  rubyforge_project:
95
- rubygems_version: 2.5.1
96
+ rubygems_version: 2.6.8
96
97
  signing_key:
97
98
  specification_version: 4
98
99
  summary: Flatten keys of Hash