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)


89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/hash_extend.rb', line 89

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



68
69
70
# File 'lib/hash_extend.rb', line 68

def delete_many *keys
  keys.map{ |key| delete(key) }
end

#except!(*keys) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/hash_extend.rb', line 8

def except! *keys
  
  p "is personnal methods"
  
  keys.each do |key|
    delete key
  end
  return self
end

#insert(value, *keys) ⇒ Object

insert a value trough severals “levels” of hashs



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/hash_extend.rb', line 74

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



55
56
57
58
59
# File 'lib/hash_extend.rb', line 55

def map_keys
  self.inject({}) do |hash, (key, value)|
    hash[yield key] = value; hash
  end
end

#map_keys!(&block) ⇒ Object



61
62
63
64
# File 'lib/hash_extend.rb', line 61

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



48
49
50
51
52
# File 'lib/hash_extend.rb', line 48

def map_values!
  self.each do |key, value|
    self[key] = yield value
  end
end

#select_by!(*collection) ⇒ Object

something like #keep_if, but instead of block, pass collection of keys to select



108
109
110
# File 'lib/hash_extend.rb', line 108

def select_by! *collection
  self.delete_if{ |field, _| !collection.include? field.to_sym }
end

#stealth_delete(*keys) ⇒ Object



41
42
43
44
45
# File 'lib/hash_extend.rb', line 41

def stealth_delete *keys
  
  except! keys
  warn "WARNING : method 'stealth_delete' is deprecated and will be deleted in version X.Y - Use 'extract' to fit Rails 3's ActiveSupport"
end

#stealth_delete!(*keys) ⇒ Object

delete key(s) but return self instead of deleted value



35
36
37
38
39
# File 'lib/hash_extend.rb', line 35

def stealth_delete! *keys
  
  except! keys
  warn "WARNING : 'stealth_delete!' is deprecated and will be deleted in version X.Y - Use 'extract!' to fit Rails 3's ActiveSupport"
end

#youpiObject



22
23
24
25
26
# File 'lib/hash_extend.rb', line 22

def youpi
  
  p "youpi"

end