Revision: 637 http://trac.macosforge.org/projects/ruby/changeset/637 Author: lsansonetti@apple.com Date: 2008-09-28 19:29:34 -0700 (Sun, 28 Sep 2008) Log Message: ----------- adding Object#to_plist, HotCocoa#read_plist Modified Paths: -------------- MacRuby/trunk/lib/hotcocoa.rb Added Paths: ----------- MacRuby/trunk/lib/hotcocoa/plist.rb MacRuby/trunk/test/hotcocoa/ MacRuby/trunk/test/hotcocoa/test_plist.rb Added: MacRuby/trunk/lib/hotcocoa/plist.rb =================================================================== --- MacRuby/trunk/lib/hotcocoa/plist.rb (rev 0) +++ MacRuby/trunk/lib/hotcocoa/plist.rb 2008-09-29 02:29:34 UTC (rev 637) @@ -0,0 +1,45 @@ +module HotCocoa + def read_plist(data, mutability=:all) + mutability = case mutability + when :none + NSPropertyListImmutable + when :containers_only + NSPropertyListMutableContainers + when :all + NSPropertyListMutableContainersAndLeaves + else + raise ArgumentError, "invalid mutability `#{mutability}'" + end + if data.is_a?(String) + data = data.dataUsingEncoding(NSASCIIStringEncoding) + if data.nil? + raise ArgumentError, "cannot convert string `#{data}' to data" + end + end + # TODO retrieve error description and raise it if there is an error. + NSPropertyListSerialization.propertyListFromData(data, + mutabilityOption:mutability, + format:nil, + errorDescription:nil) + end +end + +class Object + def to_plist(format=:xml) + format = case format + when :xml + NSPropertyListXMLFormat_v1_0 + when :binary + NSPropertyListBinaryFormat_v1_0 + when :open_step + NSPropertyListOpenStepFormat + else + raise ArgumentError, "invalid format `#{format}'" + end + # TODO retrieve error description and raise it if there is an error. + data = NSPropertyListSerialization.dataFromPropertyList(self, + format:format, + errorDescription:nil) + NSMutableString.alloc.initWithData(data, encoding:NSASCIIStringEncoding) + end +end Modified: MacRuby/trunk/lib/hotcocoa.rb =================================================================== --- MacRuby/trunk/lib/hotcocoa.rb 2008-09-29 01:51:41 UTC (rev 636) +++ MacRuby/trunk/lib/hotcocoa.rb 2008-09-29 02:29:34 UTC (rev 637) @@ -16,5 +16,6 @@ require 'hotcocoa/data_sources/table_data_source' require 'hotcocoa/data_sources/combo_box_data_source' require 'hotcocoa/kernel_ext' +require 'hotcocoa/plist' HotCocoa::Mappings.reload Added: MacRuby/trunk/test/hotcocoa/test_plist.rb =================================================================== --- MacRuby/trunk/test/hotcocoa/test_plist.rb (rev 0) +++ MacRuby/trunk/test/hotcocoa/test_plist.rb 2008-09-29 02:29:34 UTC (rev 637) @@ -0,0 +1,28 @@ +require 'test/unit' +require 'hotcocoa' + +class TestPlist < Test::Unit::TestCase + include HotCocoa + + def test_to_plist + assert_plist(123) + assert_plist(true) + assert_plist(false) + assert_plist('foo') + assert_plist(:foo, 'foo') + assert_plist([1,2,3]) + assert_plist({'un' => 1, 'deux' => 2}) + end + + def test_to_plist_with_invalid_objects + assert_plist(nil, nil) + assert_plist(Object.new, nil) + assert_plist(/foo/, nil) + end + + private + + def assert_plist(val, expected=val) + assert_equal(expected, read_plist(val.to_plist)) + end +end
participants (1)
-
source_changes@macosforge.org