| Module | OHashMixIn |
| In: |
lib/o_hash.rb
|
AUTHOR
jan molic /mig/at/1984/dot/cz/ updated by: Nicolas Pouillard <ertai@lrde.epita.fr>
DESCRIPTION
Override hash to make it creation order preserved. This will be obsolete - it is better to use special OHash class than overriding. Public domain.
THANKS
Andrew Johnson for his suggestions and fixes of Hash[], merge, to_a, inspect and shift
$LastChangedBy$ $Id: /w/fey/ruby_ex/trunk/lib/o_hash.rb 24384 2006-07-09T16:59:08.734236Z ertai $
# File lib/o_hash.rb, line 31 def == ( hsh2 ) return false if !hsh2.respond_to? :order or @order != hsh2.order super hsh2 end
# File lib/o_hash.rb, line 63 def delete_if @order.clone.each do |k| delete k if yield(k, self[k]) end self end
# File lib/o_hash.rb, line 115 def inspect arr = to_a.map{ |k, v| "#{k.inspect}=>#{v.inspect}" } '{(ordered) ' + arr.join(', ') + ' }' end
# File lib/o_hash.rb, line 80 def invert hsh2 = self.class.new @order.each { |k| hsh2[self[k]] = k } hsh2 end
# File lib/o_hash.rb, line 120 def pretty_print ( q ) q.group(1, '{(ordered) ', '}') { q.seplist(self, nil, :each_pair) {|k, v| q.group { q.pp k q.text '=>' q.group(1) { q.breakable '' q.pp v } } } } end
# File lib/o_hash.rb, line 135 def pretty_print_cycle(q) q.text(empty? ? '{(ordered)}' : '{(ordered) ...}') end
# File lib/o_hash.rb, line 90 def reject! ( &block ) hsh2 = reject(&block) self == hsh2 ? nil : hsh2 end