Class: Hash
- Inherits:
-
Object
- Object
- Hash
- Defined in:
- lib/dm_ruby_extensions/extend_hash.rb
Overview
Instance Method Summary collapse
-
#convert_date(date_symbol_or_string) ⇒ Object
takes a Hash (like the params hash), and converts the Rails date attributes to a real Date object.
-
#convert_datetime(date_symbol_or_string) ⇒ Object
takes a Hash (like the params hash), and converts the Rails datetime attributes to a real Date object.
-
#rekey(key_map = nil, &block) ⇒ Object
Borrowed from github.com/rubyworks/facets —————————————————————————— Rekey a hash:.
-
#rekey!(key_map = nil, &block) ⇒ Object
Synonym for Hash#rekey, but modifies the receiver in place (and returns it).
-
#url_query_string(leading_slash = true) ⇒ Object
Convert hash of parameters to a query string ——————————————————————————.
Instance Method Details
#convert_date(date_symbol_or_string) ⇒ Object
takes a Hash (like the params hash), and converts the Rails date attributes to a real Date object. => 2012, ‘start_date(2i)’ => 11, ‘start_date(3i)’ => 23.convert_date(:start_date)
8 9 10 11 12 |
# File 'lib/dm_ruby_extensions/extend_hash.rb', line 8 def convert_date(date_symbol_or_string) attribute = date_symbol_or_string.to_s return nil if self[attribute + '(1i)'].nil? || self[attribute + '(2i)'].nil? || self[attribute + '(3i)'].nil? return Date.new(self[attribute + '(1i)'].to_i, self[attribute + '(2i)'].to_i, self[attribute + '(3i)'].to_i) end |
#convert_datetime(date_symbol_or_string) ⇒ Object
takes a Hash (like the params hash), and converts the Rails datetime attributes to a real Date object.
17 18 19 20 21 |
# File 'lib/dm_ruby_extensions/extend_hash.rb', line 17 def convert_datetime(date_symbol_or_string) attribute = date_symbol_or_string.to_s return nil if self[attribute + '(1i)'].nil? || self[attribute + '(2i)'].nil? || self[attribute + '(3i)'].nil? || self[attribute + '(4i)'].nil? || self[attribute + '(5i)'].nil? return Time.local(self[attribute + '(1i)'].to_i, self[attribute + '(2i)'].to_i, self[attribute + '(3i)'].to_i, self[attribute + '(4i)'].to_i, self[attribute + '(5i)'].to_i) end |
#rekey(key_map = nil, &block) ⇒ Object
Borrowed from github.com/rubyworks/facets
Rekey a hash:
rekey()
rekey(from_key => to_key, ...)
rekey{|from_key| to_key}
rekey{|from_key, value| to_key}
If a key map is given, then the first key is changed to the second key.
foo = { :a=>1, :b=>2 }
foo.rekey(:a=>'a') #=> { 'a'=>1, :b=>2 }
foo.rekey(:b=>:x) #=> { :a =>1, :x=>2 }
foo.rekey('foo'=>'bar') #=> { :a =>1, :b=>2 }
If a block is given, converts all keys in the Hash accroding to the given block procedure.
foo = { :name=>'Gavin', :wife=>:Lisa }
foo.rekey{ |k| k.to_s } #=> { "name"=>"Gavin", "wife"=>:Lisa }
foo #=> { :name =>"Gavin", :wife=>:Lisa }
If no key map or block is given, then all keys are converted to Symbols.
Raises an ArgumentError if both a key_map and a block are given. If both are needed just call #rekey twice.
TODO: If ‘nil` is returned by block should the key be set to `nil` or the orignal key?
CREDIT: Trans, Gavin Kistner
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/dm_ruby_extensions/extend_hash.rb', line 62 def rekey(key_map=nil, &block) raise ArgumentError, "argument or block" if key_map && block if !(key_map or block) block = lambda{|k| k.to_sym} end if block hash = dup.clear if block.arity.abs == 1 each_pair do |k, v| hash[block[k]] = v #hash[block[k] || k] = v end else each_pair do |k, v| hash[block[k,v]] = v #hash[block[k,v] || k] = v end end else #hash = dup.clear # to keep default_proc #(keys - key_map.keys).each do |key| # hash[key] = self[key] #end #key_map.each do |from, to| # hash[to] = self[from] if key?(from) #end hash = dup # to keep default_proc key_map.each_pair do |from, to| hash[to] = hash.delete(from) if hash.key?(from) end end hash end |
#rekey!(key_map = nil, &block) ⇒ Object
Synonym for Hash#rekey, but modifies the receiver in place (and returns it).
foo = { :name=>'Gavin', :wife=>:Lisa }
foo.rekey!{ |k| k.to_s } #=> { "name"=>"Gavin", "wife"=>:Lisa }
foo #=> { "name"=>"Gavin", "wife"=>:Lisa }
CREDIT: Trans, Gavin Kistner
105 106 107 |
# File 'lib/dm_ruby_extensions/extend_hash.rb', line 105 def rekey!(key_map=nil, &block) replace(rekey(key_map, &block)) end |
#url_query_string(leading_slash = true) ⇒ Object
Convert hash of parameters to a query string
25 26 27 |
# File 'lib/dm_ruby_extensions/extend_hash.rb', line 25 def url_query_string(leading_slash = true) (leading_slash ? "/?" : "?") << URI.escape(self.collect{|k,v| "#{k}=#{v}"}.join('&')) end |