initial import
[ruby-cruxutils.git] / lib / cruxutils / ohash.rb
1 #--
2 # PDF::Writer for Ruby.
3 #   http://rubyforge.org/projects/ruby-pdf/
4 #   Copyright 2003 - 2005 Austin Ziegler.
5 #
6 #   Licensed under a MIT-style licence. See LICENCE in the main distribution
7 #   for full licensing information.
8 #
9 # $Id: ohash.rb,v 1.2 2005/05/16 03:59:21 austin Exp $
10 #++
11   # Based on [ruby-talk:20551]. Updated to (hopefully) be 1.8 friendly.
12 class OHash < Hash
13   alias_method :store, :[]=
14   alias_method :each_pair, :each
15
16   def initialize(*args)
17     @keys = []
18     super
19   end
20
21   def []=(key, val)
22     @keys << key unless has_key?(key)
23     super
24   end
25
26   def delete(key)
27     @keys.delete(key) if has_key?(key)
28     super
29   end
30
31   def each
32     @keys.each { |k| yield k, self[k] }
33   end
34
35   def each_key
36     @keys.each { |k| yield k }
37   end
38
39   def each_value
40     @keys.each { |k| yield self[k] }
41   end
42
43   def first
44     self[@keys[0]]
45   end
46
47   def last
48     self[@keys[-1]]
49   end
50
51   def first?(item)
52     self[@keys[0]] == item
53   end
54
55   def last?(item)
56     self[@keys[-1]] == item
57   end
58
59   def replace(other)
60         other.each do |key, value|
61                 self[key] = value
62         end
63
64         self
65   end
66 end