hash_extensions 1.0.1 → 1.1.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hash_extensions.rb +26 -2
  3. metadata +5 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0ae798c2db1701d37fbb158b8fcd145f111ab36
4
- data.tar.gz: dc402ed4420df4803b13f9955f2d2d9d2bb6f55b
3
+ metadata.gz: 076cb1da870e83259e4714b53a3aad6599173170
4
+ data.tar.gz: 55b8ddc7b442b0d002b78ce5da6ca82d9001d769
5
5
  SHA512:
6
- metadata.gz: 6ad3fb52fdd47d2df9d5286736cb1d802481fbd57a8601dc2854a5bb915b5f25ab5f5276c90fd9c8f328d9550b4df55890a4b9b553eb8a83c595b0749c374eaa
7
- data.tar.gz: 4f4ad5640800412c9e6c0ae4c0035b8f11256bb896d3088a23607226569f8dc6a1389531361c89e368ccaddfe1035bb73c3dd6d2aa012b2fab93ced1ecf4aeca
6
+ metadata.gz: 10b701d6490e727be55fa81f71699c68bb1c22b890f034f57f1f0ee9a92da7dbac6919a4daaa345d3180af7cfcf0368488f80cef57acf34ca8acb884162d99d2
7
+ data.tar.gz: f63341b90af97f50da472b55e2ee05aafe4e74fad949f8d9ce45c5866c651d8de29ce190d41dc41ecd26049711cca6760293ce1b584fdc32c73c59577f55d9c3
@@ -3,7 +3,7 @@ require 'active_support/all'
3
3
  class Hash
4
4
  # Search for key path in hash
5
5
  #
6
- # Examples
6
+ # == Examples
7
7
  #
8
8
  # { a: { b: :c } }.dig(:a, :b) # => :c
9
9
  # { a: { 'b' => :c } }.dig(:a, :b) # => :c
@@ -16,7 +16,7 @@ class Hash
16
16
 
17
17
  # Search the Hash deeply for all values matching the +key+.
18
18
  #
19
- # Examples
19
+ # == Examples
20
20
  #
21
21
  # { a: :b, c: { a: '1', d: :e } }.values_for('a') # => [:b, '1']
22
22
  def values_for(key)
@@ -30,4 +30,28 @@ class Hash
30
30
 
31
31
  found_values.flatten.compact
32
32
  end
33
+
34
+ # Flattens the hash keys recursively
35
+ #
36
+ # == Examples
37
+ #
38
+ # { a: :b, c: { d: :e } }.recursive_flat_map # => [ :a, :c, :d ]
39
+ def recursive_flat_map
40
+ a = flat_map do |k, v|
41
+ v = v.respond_to?(:recursive_flat_map) ? v.recursive_flat_map : nil
42
+ [k, v].compact
43
+ end
44
+ a.flatten
45
+ end
46
+
47
+ # Recursively flattens and sorts a hash into its keys and values.
48
+ #
49
+ # == Examples
50
+ #
51
+ # { c: { d: :e }, a: :b, f: ['g', 'h'] }.recursive_flatten # => [:a, :b, :c, :d, :e, :f, 'g', 'h']
52
+ def recursive_flatten
53
+ sort.flat_map do |k, v|
54
+ [k, v.respond_to?(:recursive_flatten) ? v.recursive_flatten : v].compact
55
+ end.flatten
56
+ end
33
57
  end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Kampp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-03 00:00:00.000000000 Z
11
+ date: 2014-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '4.2'
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '3.3'
34
- type: :development
35
- prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '3.3'
26
+ version: '4.2'
41
27
  description: Some common, practical hash hash_extensions
42
28
  email: emil@kampp.me
43
29
  executables: []
@@ -65,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
51
  version: '0'
66
52
  requirements: []
67
53
  rubyforge_project:
68
- rubygems_version: 2.4.5.1
54
+ rubygems_version: 2.4.5
69
55
  signing_key:
70
56
  specification_version: 4
71
57
  summary: Some common, practical hash hash_extensions