[MacRuby-devel] strings to yaml

John Shea johnmacshea at gmail.com
Fri Apr 17 07:10:41 PDT 2009


Hi Eloy,

I was doing:

"#{field.stringValue}".to_yaml

which in 6 months time i will be scratching my head wondering why - so  
your suggestions are very helpful - thanks!

Cheers,
J

On Apr 17, 2009, at 15:31 , Eloy Duran wrote:

> 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 at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel



More information about the MacRuby-devel mailing list