Class: Hash

Inherits:
Object
  • Object
show all
Defined in:
lib/hash_extend.rb

Instance Method Summary collapse

Instance Method Details

#compact!(options = Hash.new) ⇒ Object

allow to compact (like Array), default on value.nil?

Raises:

  • (ArgumentError)


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! options = Hash.new
  compare = options.delete(:compare) || :value
  raise ArgumentError, ":compare option must be in %w{key value}" unless [:key, :value].include? compare.to_sym
  
  if (with = options.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_keysObject

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