Class: Hash

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

Instance Method Summary collapse

Instance Method Details

#camelize_keys(first_letter = :lower) ⇒ Object

Return a new hash with all keys camelized.

{ :first_name => 'Rob', :years_old => '28' }.camelize_keys
#=> { :firstName => "Rob", :yearsOld => "28" }


8
9
10
# File 'lib/lemon_way/hash.rb', line 8

def camelize_keys(first_letter = :lower)
  dup.camelize_keys!(first_letter)
end

#camelize_keys!(first_letter = :lower) ⇒ Object

Destructively camelize all keys. Same as camelize_keys, but modifies self.



14
15
16
17
18
19
20
# File 'lib/lemon_way/hash.rb', line 14

def camelize_keys!(first_letter = :lower)
  keys.each do |key|
    new_key = key.to_s.camelize(first_letter)
    self[key.is_a?(Symbol) ? new_key.to_sym : new_key] = delete(key)
  end
  self
end

#ensure_keys(required_keys = [], optional_keys = []) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/lemon_way/hash.rb', line 43

def ensure_keys(required_keys=[], optional_keys=[])
  assert_valid_keys(required_keys + optional_keys)
  required_keys.each  do |k|
    raise(ArgumentError, "Required key not found: #{k}") unless has_key?(k)
  end
  self
end

#underscore_keys(recursive = false) ⇒ Object

Return a new hash with all keys underscored.

{ :firstName => "Rob", :yearsOld => "28" }.underscore_keys
#=> { :first_name => 'Rob', :years_old => '28' }


26
27
28
# File 'lib/lemon_way/hash.rb', line 26

def underscore_keys(recursive=false)
  dup.underscore_keys!(recursive)
end

#underscore_keys!(recursive = false) ⇒ Object

Destructively underscore all keys. Same as underscore_keys, but modifies self.



32
33
34
35
36
37
38
39
40
41
# File 'lib/lemon_way/hash.rb', line 32

def underscore_keys!(recursive=false)
  keys.each do |key|
    new_key = key.to_s.underscore
    new_value = delete(key)
    new_value.underscore_keys!(recursive) if recursive and new_value.is_a? Hash
    new_value.map{|v| v.underscore_keys!(recursive) if v.is_a? Hash } if recursive and new_value.is_a? Array
    self[key.is_a?(Symbol) ? new_key.to_sym : new_key] = new_value
  end
  self
end