summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbradleyjucsc <bradleyjaybennett@gmail.com>2010-09-23 12:12:24 -0700
committerbradleyjucsc <bradleyjaybennett@gmail.com>2010-09-23 12:12:24 -0700
commitf4519d56ebd4ca129669e212f46eab782e642483 (patch)
tree6afd6e5f9f51ad0d9ba2066e1f3b4f523b6ca74c
parentea0b4e7ae753831d9fc1673c00eb706a9fe67958 (diff)
downloadplist-f4519d56ebd4ca129669e212f46eab782e642483.tar.gz
Changed sort to sort_by in Plist::Emit.plist_node to allow mixed symbol and string hash keys.
-rw-r--r--lib/plist/generator.rb9
-rw-r--r--test/test_generator.rb21
2 files changed, 22 insertions, 8 deletions
diff --git a/lib/plist/generator.rb b/lib/plist/generator.rb
index 02958c5..89d4132 100644
--- a/lib/plist/generator.rb
+++ b/lib/plist/generator.rb
@@ -78,7 +78,7 @@ module Plist::Emit
else
inner_tags = []
- element.keys.sort.each do |k|
+ element.keys.sort_by{|k| k.to_s }.each do |k|
v = element[k]
inner_tags << tag('key', CGI::escapeHTML(k.to_s))
inner_tags << plist_node(v)
@@ -213,13 +213,6 @@ module Plist::Emit
end
end
-# we need to add this so sorting hash keys works properly
-class Symbol #:nodoc:
- def <=> (other)
- self.to_s <=> other.to_s
- end
-end
-
class Array #:nodoc:
include Plist::Emit
end
diff --git a/test/test_generator.rb b/test/test_generator.rb
index dbb1a59..b03001c 100644
--- a/test/test_generator.rb
+++ b/test/test_generator.rb
@@ -51,4 +51,25 @@ class TestGenerator < Test::Unit::TestCase
File.unlink('test.plist')
end
+
+ # The hash in this test was failing with 'hsh.keys.sort',
+ # we are making sure it works with 'hsh.keys.sort_by'.
+ def test_sorting_keys
+ hsh = {:key1 => 1, :key4 => 4, 'key2' => 2, :key3 => 3}
+ output = Plist::Emit.plist_node(hsh)
+ expected = <<-STR
+<dict>
+ <key>key1</key>
+ <integer>1</integer>
+ <key>key2</key>
+ <integer>2</integer>
+ <key>key3</key>
+ <integer>3</integer>
+ <key>key4</key>
+ <integer>4</integer>
+</dict>
+ STR
+
+ assert_equal expected, output.gsub(/[\t]/, "\s\s")
+ end
end