From 7b8c6472ffb6df4d341b0657f82e63c19e9a429c Mon Sep 17 00:00:00 2001 From: Gregor Schmidt Date: Tue, 26 Jan 2010 12:02:31 +0100 Subject: Adding custom yaml (de-)serialization for OrderedHash [#3608 state:committed] Signed-off-by: Jeremy Kemper --- activesupport/lib/active_support/ordered_hash.rb | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (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 index b492648610..6723805d32 100644 --- a/activesupport/lib/active_support/ordered_hash.rb +++ b/activesupport/lib/active_support/ordered_hash.rb @@ -2,7 +2,8 @@ module ActiveSupport # Hash is ordered in Ruby 1.9! if RUBY_VERSION >= '1.9' - OrderedHash = ::Hash + class OrderedHash < ::Hash #:nodoc: + end else class OrderedHash < Hash #:nodoc: def initialize(*args, &block) @@ -138,4 +139,24 @@ module ActiveSupport end end end + + class OrderedHash #:nodoc: + def to_yaml_type + "!tag:yaml.org,2002:omap" + end + + def to_yaml(opts = {}) + YAML.quick_emit(self, opts) do |out| + out.seq(taguri, to_yaml_style) do |seq| + each do |k, v| + seq.add(k => v) + end + end + end + end + end + + YAML.add_builtin_type("omap") do |type, val| + ActiveSupport::OrderedHash[val.map(&:to_a).map(&:first)] + end end -- cgit v1.2.3