Sha256: 713af62ddc9b1e75ec984a1517b58a7e53b57be4263841aaa4c6141bb49b6eb4

Contents?: true

Size: 1.32 KB

Versions: 6

Compression:

Stored size: 1.32 KB

Contents

module Iowa

	# This is a subclass of Ruby's Hash that implements a few convenient
	# methods used by IOWA.
	
	class Hash < Hash

		# A simple little routine to downcase any String used as a key
		# in a hash or any hash nested as value somewhere within the hash.
		# Thanks to Daniel Berger for this implementation.

		def downcase_keys!
			upper = /A-Z/
			self.each do |k,v|
				next unless k.kind_of? String
				self[k.dup.downcase] = v
				self.delete(k) if upper.match(k)
			end
		end

		# Convert any symbolic keys to strings.
		
		def stringify_keys!
			self.each do |k,v|
				next if k.kind_of? String
				self[k.to_s] = v
				self.delete k
			end
		end
		
		def step_merge!(h)
			h.each do |k,v|
				if v.kind_of?(::Hash)
					if self[k].kind_of?(::Hash)
						unless self[k].respond_to?(:step_merge!)
							if dp = self[k].default_proc
								self[k] = Iowa::Hash.new {|h,k| dp.call(h,k)}.step_merge!(self[k])
							else
								osk = self[k]
								self[k] = Iowa::Hash.new
								self[k].step_merge!(osk)
							end
						end
						self[k].step_merge!(v)
					else
						if self.default_proc
							self.delete k
							self[k]
						end
						unless self[k].kind_of?(::Hash)
							self.delete k
							self[k] = Iowa::Hash.new
						end
						self[k].step_merge!(v)
					end
				else
					self[k] = v
				end
			end
		end

	end
end

Version data entries

6 entries across 3 versions & 1 rubygems

Version Path
IOWA-1.0.3 microprojects/DiskCache/src/iowa/Hash.rb
IOWA-1.0.3 microprojects/LRUCache/src/iowa/Hash.rb
IOWA-1.0.2 microprojects/DiskCache/src/iowa/Hash.rb
IOWA-1.0.2 microprojects/LRUCache/src/iowa/Hash.rb
IOWA-1.0.0 microprojects/DiskCache/src/iowa/Hash.rb
IOWA-1.0.0 microprojects/LRUCache/src/iowa/Hash.rb