Froze rails gems
[depot.git] / vendor / rails / activesupport / lib / active_support / ordered_hash.rb
1 # OrderedHash is namespaced to prevent conflicts with other implementations
2 module ActiveSupport
3 # Hash is ordered in Ruby 1.9!
4 if RUBY_VERSION >= '1.9'
5 OrderedHash = ::Hash
6 else
7 class OrderedHash < Array #:nodoc:
8 def []=(key, value)
9 if pair = assoc(key)
10 pair.pop
11 pair << value
12 else
13 self << [key, value]
14 end
15 value
16 end
17
18 def [](key)
19 pair = assoc(key)
20 pair ? pair.last : nil
21 end
22
23 def delete(key)
24 pair = assoc(key)
25 pair ? array_index = index(pair) : nil
26 array_index ? delete_at(array_index).last : nil
27 end
28
29 def keys
30 collect { |key, value| key }
31 end
32
33 def values
34 collect { |key, value| value }
35 end
36
37 def to_hash
38 returning({}) do |hash|
39 each { |array| hash[array[0]] = array[1] }
40 end
41 end
42
43 def has_key?(k)
44 !assoc(k).nil?
45 end
46
47 alias_method :key?, :has_key?
48 alias_method :include?, :has_key?
49 alias_method :member?, :has_key?
50
51 def has_value?(v)
52 any? { |key, value| value == v }
53 end
54
55 alias_method :value?, :has_value?
56 end
57 end
58 end