hash_flatten 0.2.0 → 0.3.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
- SHA256:
3
- metadata.gz: bfbdea8d024a61cf392f1dd1a1abb7e45bcb416e63afd1bdcaba7c180233e4a1
4
- data.tar.gz: 035c49bfe889d938e459c99742bfec42c35dd00627a8a847af09470afca5017a
2
+ SHA1:
3
+ metadata.gz: 73bc14c6b41e2943e5c7a9e244db24681324a060
4
+ data.tar.gz: 7c89f6bc9f49d95098fa37ef0bf88e15fb54a600
5
5
  SHA512:
6
- metadata.gz: 63038064be7b3d3ccf9fc6e6e8b7404e03edfb6f3f44ebdaea677f1e5baafe73c5a653151e2aba52f73a82e28f61d2bb1f8764668d0ee8fddc22c1da0dff12fa
7
- data.tar.gz: cffa3f4cad9de08cb045b6c5ef6551f05170e88ab2018ca8b6bf088c19942da7185805ee83f261f78b32988e6068b6e90d40bb3f539ee8938de0af65d0efe7dc
6
+ metadata.gz: 1a7e487f9d2467a51c247c88f040b4099f613f55ce1df312329bb2b02a81665c283d3a3bbfc3ef2693fc0f29c3ac145518086fa5febd70d1aea5b458548cc3cb
7
+ data.tar.gz: 3c750e9ecdb551ad7e5c0a4f2981446722be93960b9b937c817bbb38cea970811babbbb875d745cd915ee3538ce8aa9dd64cdc9c1ed9b547f2f98319afca8abb
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 Premysl Donat
3
+ Copyright (c) 2018 Premysl Donat
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/hash_flatten.gemspec CHANGED
@@ -1,27 +1,26 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
2
+ lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "hash_flatten/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "hash_flatten"
8
- spec.version = HashFlatten::VERSION
9
- spec.authors = ["Premysl Donat"]
10
- spec.email = ["pdonat@seznam.cz"]
6
+ spec.name = 'hash_flatten'
7
+ spec.version = '0.3.0'
8
+ spec.authors = ['Premysl Donat']
9
+ spec.email = ['pdonat@seznam.cz']
11
10
 
12
- spec.summary = "Just one method i miss in std lib"
11
+ spec.summary = 'Two method i miss in std lib'
13
12
  spec.description = spec.summary
14
- spec.homepage = "https://github.com/Masa331/hash_flatten"
15
- spec.license = "MIT"
13
+ spec.homepage = 'https://github.com/Masa331/hash_flatten'
14
+ spec.license = 'MIT'
16
15
 
17
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
17
  f.match(%r{^(test|spec|features)/})
19
18
  end
20
- spec.bindir = "exe"
21
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
23
21
 
24
- spec.add_development_dependency "bundler", "~> 1.15"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
22
+ spec.add_development_dependency 'bundler'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'rspec'
25
+ spec.add_development_dependency 'pry'
27
26
  end
data/lib/hash_flatten.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'hash_flatten/version'
2
-
3
1
  module HashFlatten
4
2
  refine Hash do
5
3
  def destructure
@@ -21,23 +19,31 @@ module HashFlatten
21
19
  end
22
20
 
23
21
  def structure
24
- structured = each_with_object({}) do |(k, v), n|
25
- if k.include? '.'
26
- keys = k.split('.')
27
- new_key = keys.pop
22
+ new_hash = decompose_keys
28
23
 
29
- n[keys.join('.')] = n.fetch(keys.join('.'), {}).merge({ new_key.to_s => v })
30
- else
31
- n[k.to_s] = v
24
+ new_hash.each do |k, v|
25
+ if v.is_a? Hash
26
+ new_value = v.structure
27
+
28
+ new_hash[k] = new_value
32
29
  end
33
30
  end
31
+ end
34
32
 
35
- structured
33
+ def decompose_keys
34
+ each_with_object({}) do |(k, v), new_hash|
35
+ key_parts = k.split('.')
36
+ top_level_key = key_parts.shift
37
+ tail = key_parts.join('.')
36
38
 
37
- if structured.any? { |k, v| k.include? '.' }
38
- structured.structure
39
- else
40
- structured
39
+ if tail.empty?
40
+ new_hash[top_level_key] = v
41
+ else
42
+ existing_value = new_hash.fetch(top_level_key, {})
43
+ new_value = existing_value.merge({ tail => v })
44
+
45
+ new_hash[top_level_key] = new_value
46
+ end
41
47
  end
42
48
  end
43
49
  end
metadata CHANGED
@@ -1,58 +1,72 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_flatten
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Premysl Donat
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-05 00:00:00.000000000 Z
11
+ date: 2018-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.15'
19
+ version: '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.15'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '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: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '0'
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: '3.0'
55
- description: Just one method i miss in std lib
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Two method i miss in std lib
56
70
  email:
57
71
  - pdonat@seznam.cz
58
72
  executables: []
@@ -70,7 +84,6 @@ files:
70
84
  - bin/setup
71
85
  - hash_flatten.gemspec
72
86
  - lib/hash_flatten.rb
73
- - lib/hash_flatten/version.rb
74
87
  homepage: https://github.com/Masa331/hash_flatten
75
88
  licenses:
76
89
  - MIT
@@ -91,8 +104,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
104
  version: '0'
92
105
  requirements: []
93
106
  rubyforge_project:
94
- rubygems_version: 2.7.3
107
+ rubygems_version: 2.6.14
95
108
  signing_key:
96
109
  specification_version: 4
97
- summary: Just one method i miss in std lib
110
+ summary: Two method i miss in std lib
98
111
  test_files: []
@@ -1,3 +0,0 @@
1
- module HashFlatten
2
- VERSION = '0.2.0'
3
- end