class Hash
Public Class Methods
map(obj, &block)
click to toggle source
map any Enumerable into a Hash
, like Hash[obj.map … ]
# File lib/theusual/hash.rb, line 6 def map(obj, &block) Hash[ obj.map do |*args| block.call *args end.compact ] end
Public Instance Methods
-(other)
click to toggle source
set like operator
# File lib/theusual/hash.rb, line 145 def -(other) raise TypeError unless other.class <= Hash select {|k,v| !other.has_key? k} end
compact(modifier = nil)
click to toggle source
# File lib/theusual/hash.rb, line 56 def compact(modifier = nil) falsy = modifier == :falsy blanks = falsy || modifier == :blanks reject do |k, v| isblank = blanks && v.respond_to?(:empty?) && v.empty? isfalsy = falsy && (v == 0) !v || isblank || isfalsy end end
compact!(modifier = nil)
click to toggle source
# File lib/theusual/hash.rb, line 68 def compact!(modifier = nil) replace compact(modifier) end
except(*keys)
click to toggle source
# File lib/theusual/hash.rb, line 31 def except(*keys) clone.except! *keys end
except!(*keys)
click to toggle source
# File lib/theusual/hash.rb, line 35 def except!(*keys) keys.each { |key| delete(key) } self end
hmap(&block)
click to toggle source
map the block's results back to a hash
# File lib/theusual/hash.rb, line 74 def hmap(&block) Hash[ map {|k, v| block.call(k, v) }.compact ] end
hmap!(&block)
click to toggle source
# File lib/theusual/hash.rb, line 78 def hmap!(&block) replace hmap &block end
kmap(&block)
click to toggle source
map keys, but preserve associated values ie. apidock.com/rails/v4.2.7/Hash/transform_keys
# File lib/theusual/hash.rb, line 85 def kmap(&block) Hash[map do |k, v| [ block.arity == 1 ? block.call(k) : block.call(k, v), v ] end] end
kmap!(&block)
click to toggle source
# File lib/theusual/hash.rb, line 91 def kmap!(&block) replace kmap &block end
ksort(&block)
click to toggle source
sort by key values, for pretty printing
# File lib/theusual/hash.rb, line 110 def ksort(&block) Hash[ sort_by do |k, v| if block yield k else k end end ] end
ksort!(&block)
click to toggle source
# File lib/theusual/hash.rb, line 122 def ksort!(&block) replace ksort &block end
select_keys(*keys)
click to toggle source
# File lib/theusual/hash.rb, line 41 def select_keys(*keys) if keys.length == 1 and keys.first.class < Enumerable keys = keys.first end Hash.map keys do |k| [ k, self[k] ] end end
select_keys!(*keys)
click to toggle source
# File lib/theusual/hash.rb, line 51 def select_keys!(*keys) replace select_keys *keys end
symbolize_keys()
click to toggle source
# File lib/theusual/hash.rb, line 151 def symbolize_keys clone.symbolize_keys! end
symbolize_keys!()
click to toggle source
# File lib/theusual/hash.rb, line 155 def symbolize_keys! kmap! { |key| key.to_sym rescue key } end
update(*hashes)
click to toggle source
expand update() to accept multiple arguments eg. {}.update({a: 1}, {b: 2})
# File lib/theusual/hash.rb, line 19 def update(*hashes) clone.update! *hashes end
update!(*hashes)
click to toggle source
# File lib/theusual/hash.rb, line 23 def update!(*hashes) hashes.each do |h| h.each {|k,v| self[k] = v} end self end
vmap(&block)
click to toggle source
map values, but preserve associated keys ie. apidock.com/rails/v4.2.7/Hash/transform_values
# File lib/theusual/hash.rb, line 98 def vmap(&block) clone.vmap! &block end
vmap!(&block)
click to toggle source
# File lib/theusual/hash.rb, line 102 def vmap!(&block) each do |k, v| self[k] = block.arity == 1 ? block.call(v) : block.call(k, v) end end
vsort(&block)
click to toggle source
# File lib/theusual/hash.rb, line 127 def vsort(&block) Hash[ sort_by do |k, v| if block yield v else v end end ] end
vsort!(&block)
click to toggle source
# File lib/theusual/hash.rb, line 139 def vsort!(&block) replace vsort &block end
Private Instance Methods
replace(hash)
click to toggle source
replace contents of hash with new stuff
# File lib/theusual/hash.rb, line 163 def replace(hash) clear merge! hash end