Class: Hash
- Inherits:
-
Object
show all
- Defined in:
- lib/hash.rb
Defined Under Namespace
Classes: DeepHashConstructor, KeyChanger, ValueChanger
Instance Method Summary
collapse
-
#append_to_keys(str, options = {}) ⇒ Object
append a string to all keys options { recursive: true, type: :keep [keep, string, symbol] (key type to be returned) } ex: { :a => 1, “b”=> 2 }.append_to_keys(“_bar”) == { :a_bar => 1, “b_bar”=> 2 }.
-
#camelize_keys(options = {}) ⇒ Object
-
#camelize_keys!(options = {}) ⇒ Object
-
#chain_fetch(*keys) ⇒ Object
-
#change_keys(options = {}, &block) ⇒ Object
change all keys returning the new map options: { recursive: true } ex: { “a”:1 }.change_keys{ |key| key.upcase } == { “A”:1 }.
-
#change_keys!(options = {}, &block) ⇒ Object
change all keys returning the new map options: { recursive: true } ex: { “a”:1 }.change_keys{ |key| key.upcase } == { “A”:1 }.
-
#change_values(options = {}, &block) ⇒ Object
creates a new hash with changes in its values options: { recursive: true, skip_hash:true } ex: { a:1, b:2 }.change_values{ |v| v+1 } == { a:2, b:3 } ex: { a:1, b:{ c:1 } }.change_values(skip_hash:false) { |v| v.to_s } == { a:“1”, b:“{ c=>1 } ex: { a:1, b:{ c:1 } }.change_values(skip_hash:true) { |v| v.to_s } == { a:”1“, b:{ c=>”1“ } }.
-
#change_values!(options = {}, &block) ⇒ Object
-
#exclusive_merge(hash) ⇒ Object
-
#exclusive_merge!(hash) ⇒ Object
-
#lower_camelize_keys(options = {}) ⇒ Object
-
#lower_camelize_keys!(options = {}) ⇒ Object
-
#prepend_to_keys(str, options = {}) ⇒ Object
prepend a string to all keys options { recursive: true, type: :keep [keep, string, symbol] (key type to be returned) } ex: { :a => 1, “b”=> 2 }.prepend_to_keys(“foo_”) == { :foo_a => 1, “foo_b”=> 2 }.
-
#remap_keys(remap) ⇒ Object
-
#remap_keys!(remap) ⇒ Object
-
#sort_keys(options = {}) ⇒ Object
sorts keys for hash options: { recursive: true } ex: { b:1, a:2 }.sort_keys == { a:2, b:1 }.
-
#squash ⇒ Object
-
#to_deep_hash(separator = '.') ⇒ Object
-
#underscore_keys(options = {}) ⇒ Object
-
#underscore_keys!(options = {}) ⇒ Object
Instance Method Details
#append_to_keys(str, options = {}) ⇒ Object
append a string to all keys options
recursive: true,
type: :keep [keep, string, symbol] (key type to be returned)
ex: { :a => 1, “b”=> 2 }.append_to_keys(“_bar”) == { :a_bar => 1, “b_bar”=> 2 }
115
116
117
118
119
|
# File 'lib/hash.rb', line 115
def append_to_keys(str, options = {})
change_key_text(options) do |key|
"#{key}#{str}"
end
end
|
#camelize_keys(options = {}) ⇒ Object
59
60
61
|
# File 'lib/hash.rb', line 59
def camelize_keys(options = {})
dup.camelize_keys!(options)
end
|
#camelize_keys!(options = {}) ⇒ Object
63
64
65
|
# File 'lib/hash.rb', line 63
def camelize_keys!(options = {})
Hash::KeyChanger.new(self).camelize_keys(options)
end
|
#chain_fetch(*keys) ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/hash.rb', line 6
def chain_fetch(*keys)
value = self
if block_given?
value = value.fetch(keys.shift) do |*args|
missed_keys = keys
keys = []
yield(*(args + [missed_keys]))
end until keys.empty?
else
value = value.fetch(keys.shift) until keys.empty?
end
value
end
|
#change_keys(options = {}, &block) ⇒ Object
change all keys returning the new map options: { recursive: true } ex: { “a”:1 }.change_keys{ |key| key.upcase } == { “A”:1 }
86
87
88
|
# File 'lib/hash.rb', line 86
def change_keys(options = {}, &block)
deep_dup.change_keys!(options, &block)
end
|
#change_keys!(options = {}, &block) ⇒ Object
change all keys returning the new map options: { recursive: true } ex: { “a”:1 }.change_keys{ |key| key.upcase } == { “A”:1 }
93
94
95
|
# File 'lib/hash.rb', line 93
def change_keys!(options = {}, &block)
Hash::KeyChanger.new(self).change_keys(options, &block)
end
|
#change_values(options = {}, &block) ⇒ Object
creates a new hash with changes in its values options:
recursive: true,
skip_hash:true
ex: { a:1, b:2 }.change_values{ |v| v+1 } == { a:2, b:3 } ex: { a:1, b:{ c:1 } }.change_values(skip_hash:false) { |v| v.to_s } == { a:“1”, b:“{ c=>1 } ex: { a:1, b:{ c:1 } }.change_values(skip_hash:true) { |v| v.to_s } == { a:”1“, b:{ c=>”1“ } }
146
147
148
|
# File 'lib/hash.rb', line 146
def change_values(options = {}, &block)
deep_dup.change_values!(options, &block)
end
|
#change_values!(options = {}, &block) ⇒ Object
150
151
152
|
# File 'lib/hash.rb', line 150
def change_values!(options = {}, &block)
Hash::ValueChanger.new(options, &block).change(self)
end
|
#exclusive_merge(hash) ⇒ Object
75
76
77
|
# File 'lib/hash.rb', line 75
def exclusive_merge(hash)
dup.exclusive_merge!(hash)
end
|
#exclusive_merge!(hash) ⇒ Object
79
80
81
|
# File 'lib/hash.rb', line 79
def exclusive_merge!(hash)
merge!(hash.slice(*keys))
end
|
#lower_camelize_keys(options = {}) ⇒ Object
49
50
51
|
# File 'lib/hash.rb', line 49
def lower_camelize_keys(options = {})
dup.lower_camelize_keys!(options)
end
|
#lower_camelize_keys!(options = {}) ⇒ Object
53
54
55
56
57
|
# File 'lib/hash.rb', line 53
def lower_camelize_keys!(options = {})
options = options.merge({ uppercase_first_letter: false })
camelize_keys!(options)
end
|
#prepend_to_keys(str, options = {}) ⇒ Object
prepend a string to all keys options
recursive: true,
type: :keep [keep, string, symbol] (key type to be returned)
ex: { :a => 1, “b”=> 2 }.prepend_to_keys(“foo_”) == { :foo_a => 1, “foo_b”=> 2 }
103
104
105
106
107
|
# File 'lib/hash.rb', line 103
def prepend_to_keys(str, options = {})
change_key_text(options) do |key|
"#{str}#{key}"
end
end
|
#remap_keys(remap) ⇒ Object
37
38
39
|
# File 'lib/hash.rb', line 37
def remap_keys(remap)
dup.remap_keys!(remap)
end
|
#remap_keys!(remap) ⇒ Object
41
42
43
44
45
46
47
|
# File 'lib/hash.rb', line 41
def remap_keys!(remap)
new_hash = {}
remap.each do |o, n|
new_hash[n] = delete o
end
merge! new_hash
end
|
#sort_keys(options = {}) ⇒ Object
sorts keys for hash options: { recursive: true } ex: { b:1, a:2 }.sort_keys == { a:2, b:1 }
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# File 'lib/hash.rb', line 124
def sort_keys(options = {})
options = {
recursive: true
}.merge(options)
{}.tap do |hash|
keys.sort.each do |key|
value = self[key]
hash[key] = value unless value.is_a?(Hash) && options[:recursive]
hash[key] = value.sort_keys(options) if value.is_a?(Hash) && options[:recursive]
end
end
end
|
#squash ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/hash.rb', line 22
def squash
{}.tap do |hash|
each do |key, value|
if value.is_a? Hash
value.squash.each do |k, v|
new_key = [key, k].join('.')
hash[new_key] = v
end
else
hash[key] = value
end
end
end
end
|
#to_deep_hash(separator = '.') ⇒ Object
154
155
156
|
# File 'lib/hash.rb', line 154
def to_deep_hash(separator = '.')
Hash::DeepHashConstructor.new(separator).deep_hash(self)
end
|
#underscore_keys(options = {}) ⇒ Object
67
68
69
|
# File 'lib/hash.rb', line 67
def underscore_keys(options = {})
dup.underscore_keys!(options)
end
|
#underscore_keys!(options = {}) ⇒ Object
71
72
73
|
# File 'lib/hash.rb', line 71
def underscore_keys!(options = {})
Hash::KeyChanger.new(self).underscore_keys(options)
end
|