Hey John, I think we'll need to move the to_yaml definition for String into NSString in the MacRuby case. I tried to do that as an example [1], but it seems that NSString completely breaks after opening the class, but this is probably just a bug in 0.4: "--- foo\n" "--- !str:NSString foo\n" untitled:28:in `<main>': undefined method `stringWithString' for NSString:Class (NoMethodError) So for now a workaround like the following might do: require "yaml" def String(str) NSMutableString.stringWithString(str) end p NSMutableString.stringWithString('foo').to_yaml # => "--- foo\n" p String(NSString.stringWithString('foo')).to_yaml # => "--- foo\n" Cheers, Eloy [1]: require "yaml" p NSMutableString.stringWithString('foo').to_yaml # => "--- foo\n" p NSString.stringWithString('foo').to_yaml # => "--- !str:NSString foo \n" # YAML String definition class NSString def to_yaml( opts = {} ) YAML::quick_emit( is_complex_yaml? ? object_id : nil, opts ) do | out| if is_binary_data? out.scalar( "tag:yaml.org,2002:binary", [self].pack("m"), :literal ) elsif to_yaml_properties.empty? out.scalar( taguri, self, self =~ /^:/ ? :quote2 : to_yaml_style ) else out.map( taguri, to_yaml_style ) do |map| map.add( 'str', "#{self}" ) to_yaml_properties.each do |m| map.add( m, instance_variable_get( m ) ) end end end end end end p NSString.stringWithString('foo').to_yaml # => "--- !str:NSString foo \n" On Apr 17, 2009, at 3:05 PM, John Shea wrote:
Hello everyone,
I notice that NSMutableString nicely turns into a plain string when you #to_yaml it.
Thats great since plays nicely with other ruby code.
NSString however becomes "!str:NSString" - is that by design?
It would not matter to me except that #stringValue from NSTextFields returns NSString - which i must first copy to a NSMutableString before I #to_yaml it.
Just wondering if there is a more elegant way.
Cheers, John _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel