From 49846f85864f4b59d5593c30ee3c59b584d2975d Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Wed, 14 May 2008 12:48:37 -0500 Subject: Create a seperate file for ActiveSupport::OrderedHash. --- activesupport/lib/active_support/ordered_hash.rb | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 activesupport/lib/active_support/ordered_hash.rb (limited to 'activesupport/lib/active_support/ordered_hash.rb') diff --git a/activesupport/lib/active_support/ordered_hash.rb b/activesupport/lib/active_support/ordered_hash.rb new file mode 100644 index 0000000000..6993621ef9 --- /dev/null +++ b/activesupport/lib/active_support/ordered_hash.rb @@ -0,0 +1,43 @@ +# OrderedHash is namespaced to prevent conflicts with other implementations +module ActiveSupport + # Hash is ordered in Ruby 1.9! + if RUBY_VERSION >= '1.9' + OrderedHash = ::Hash + else + class OrderedHash < Array #:nodoc: + def []=(key, value) + if pair = assoc(key) + pair.pop + pair << value + else + self << [key, value] + end + end + + def [](key) + pair = assoc(key) + pair ? pair.last : nil + end + + def delete(key) + pair = assoc(key) + pair ? array_index = index(pair) : nil + array_index ? delete_at(array_index).last : nil + end + + def keys + collect { |key, value| key } + end + + def values + collect { |key, value| value } + end + + def to_hash + returning({}) do |hash| + each { |array| hash[array[0]] = array[1] } + end + end + end + end +end -- cgit v1.2.3