From: trans. (T. Onoma) <tra...@ru...> - 2004-09-11 23:11:07
|
_why, class RCloth < String def to_yaml_type; '!!redcloth'; end def to_yaml( opts = {} ) YAML::quick_emit( nil, opts ) do |out| out << to_yaml_type + " " out << self.to_s.to_yaml( :Emitter => out ) end end end YAML.add_private_type( "redcloth" ) { |type, val| RCloth.new(val) } This causes infinite loopage on folded and literal styles. One liners seem okay. Yes, its a cherry-rig off your example. Thing is I'm doing a load -> emit -> load. So I'm trying to preserve the !!redcloth tag and raw text through the 1st load and emit, before it actually gets run through RedCloth proper on the second load. Any ideas? -- ( o _ // trans. / \ tra...@ru... I don't give a damn for a man that can only spell a word one way. -Mark Twain |
From: why t. l. s. <yam...@wh...> - 2004-09-12 18:50:57
|
trans. (T. Onoma) (tra...@ru...) wrote: > out << self.to_s.to_yaml( :Emitter => out ) Try: out << "#{ self }".to_yaml( :Emitter => out ) Still, yes, I'd like to prevent this kind of recursion. I'm gonna work on the Emitter class today. I'll get back to ya. _why |
From: trans. (T. Onoma) <tra...@ru...> - 2004-09-12 18:57:12
|
On Sunday 12 September 2004 03:09 pm, why the lucky stiff wrote: > trans. (T. Onoma) (tra...@ru...) wrote: > > out << self.to_s.to_yaml( :Emitter => out ) > > Try: > > out << "#{ self }".to_yaml( :Emitter => out ) > > Still, yes, I'd like to prevent this kind of recursion. I'm gonna work > on the Emitter class today. I'll get back to ya. Good to hear from you. I been working on it some more. I realized you original sample was already closer to what I needed then I realized . How is you know what I need better than I? ;) Nonetheless, it's gotton uglier. The emitter seems to be double emitting one of my classes --sort of. In other words myclass.to_yaml is producing two docs back to back, but the 2nd one has a root map key that the 1st lacks. Very strange. I'll keep playing with it and let you know what I figure it out. -- ( o _ // trans. / \ tra...@ru... I don't give a damn for a man that can only spell a word one way. -Mark Twain |
From: trans. (T. Onoma) <tra...@ru...> - 2004-09-12 19:07:33
|
Oh, one other thing. It seems very strangeindeed that I can't seem to override to_yaml in some of my classes --makes for problem with proxy-ish objects. -- ( o _ // trans. / \ tra...@ru... I don't give a damn for a man that can only spell a word one way. -Mark Twain |
From: trans. (T. Onoma) <tra...@ru...> - 2004-09-12 23:56:04
|
On Sunday 12 September 2004 03:09 pm, why the lucky stiff wrote: > trans. (T. Onoma) (tra...@ru...) wrote: > > out << self.to_s.to_yaml( :Emitter => out ) > > Try: > > out << "#{ self }".to_yaml( :Emitter => out ) > > Still, yes, I'd like to prevent this kind of recursion. I'm gonna work > on the Emitter class today. I'll get back to ya. So I've fiddled with it some more. The dual doc was also do to the RedCloth code. What I'm trying to do is a bit trickier then I thought it seems. Perhaps you can suggest a better course of action. Essentially it is like I said. - register tags/types - load doc(s) - do a few transformations - emit new doc - register new tags/types - reload doc I think what might be nice is to be able to specify a tag to class mapping, as an option to YAML load, perhaps. tagschema = { '!hobix.com,2004/redcloth' => RedCloth, '!!this' => MyClass } doc = YAML.load( f, :types=>tagschema } Then maybe the class would be expected to have a method called initialize_yaml(val, tag, path, kind). Or something to that effect. Kind of like initialize_copy. Hmm... did I suggest something like that before? Can I already use initialize_copy? Anyway, that way one's not locked into a particular tag per class. (Of course you can change still change it, but it's not as convenient). Anyway something to think about. T. -- ( o _ // trans. / \ tra...@ru... I don't give a damn for a man that can only spell a word one way. -Mark Twain |