Class: Hash
- Inherits:
-
Object
- Object
- Hash
- Defined in:
- lib/hash_extend.rb
Instance Method Summary collapse
-
#compact!(options = Hash.new) ⇒ Object
allow to compact (like Array), default on value.nil?.
-
#delete_many(*keys) ⇒ Object
delete severals keys in one time.
- #extract!(*keys) ⇒ Object
-
#insert(value, *keys) ⇒ Object
insert a value trough severals “levels” of hashs.
-
#map_keys ⇒ Object
modify keys from hash through block.
- #map_keys!(&block) ⇒ Object
-
#map_values! ⇒ Object
modify values from hash through block.
- #select_by(*keys) ⇒ Object
-
#select_by!(*keys) ⇒ Object
something like #keep_if, but instead of block, pass collection of keys to select.
- #stealth_delete(*keys) ⇒ Object
-
#stealth_delete!(*keys) ⇒ Object
delete key(s) but return self instead of deleted value.
Instance Method Details
#compact!(options = Hash.new) ⇒ Object
allow to compact (like Array), default on value.nil?
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/hash_extend.rb', line 59 def compact! = Hash.new compare = .delete(:compare) || :value raise ArgumentError, ":compare option must be in %w{key value}" unless [:key, :value].include? compare.to_sym if (with = .delete :with) self.each do |key, value| self.delete(key) if eval "#{ compare }.#{ with }" end else self.each do |key, value| self.delete(key) if eval "#{ compare }.nil?" end end self end |
#delete_many(*keys) ⇒ Object
delete severals keys in one time
38 39 40 |
# File 'lib/hash_extend.rb', line 38 def delete_many *keys keys.map{ |key| delete(key) } end |
#extract!(*keys) ⇒ Object
89 90 91 92 93 |
# File 'lib/hash_extend.rb', line 89 def extract! *keys hash = {} keys.each {|key| hash[key] = delete(key) } hash end |
#insert(value, *keys) ⇒ Object
insert a value trough severals “levels” of hashs
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/hash_extend.rb', line 44 def insert value, *keys if keys.size > 1 shifted = keys.shift self[shifted] ||= Hash.new self[shifted] = self[shifted].insert value, *keys else self[keys.first] = value end self end |
#map_keys ⇒ Object
modify keys from hash through block
25 26 27 28 29 |
# File 'lib/hash_extend.rb', line 25 def map_keys self.inject({}) do |hash, (key, value)| hash[yield key] = value; hash end end |
#map_keys!(&block) ⇒ Object
31 32 33 34 |
# File 'lib/hash_extend.rb', line 31 def map_keys! &block to_map = self.dup self.clear.merge! to_map.map_keys &block end |
#map_values! ⇒ Object
modify values from hash through block
18 19 20 21 22 |
# File 'lib/hash_extend.rb', line 18 def map_values! self.each do |key, value| self[key] = yield value end end |
#select_by(*keys) ⇒ Object
83 84 85 86 |
# File 'lib/hash_extend.rb', line 83 def select_by *keys warn "WARNING : method 'select_by' is deprecated and will be deleted in version 1.3 - Use 'slice' to fit Rails's ActiveSupport" slice *keys end |
#select_by!(*keys) ⇒ Object
something like #keep_if, but instead of block, pass collection of keys to select
78 79 80 81 |
# File 'lib/hash_extend.rb', line 78 def select_by! *keys warn "WARNING : method 'select_by!' is deprecated and will be deleted in version 1.3 - Use 'extract!' to fit Rails's ActiveSupport" self.delete_if{ |field, _| !keys.include? field.to_sym } end |
#stealth_delete(*keys) ⇒ Object
10 11 12 13 |
# File 'lib/hash_extend.rb', line 10 def stealth_delete *keys warn "WARNING : method 'stealth_delete' is deprecated and will be deleted in version X.Y - Use 'except' to fit Rails' ActiveSupport" except keys end |
#stealth_delete!(*keys) ⇒ Object
delete key(s) but return self instead of deleted value
5 6 7 8 |
# File 'lib/hash_extend.rb', line 5 def stealth_delete! *keys warn "WARNING : method 'stealth_delete!' is deprecated and will be deleted in version X.Y - Use 'except!' to fit Rails' ActiveSupport" except! keys end |