Forum: Ruby ara's double_x : generate xml?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Fe57662c550fb3cce44c398ddf2dd706?d=identicon&s=25 itsme213 (Guest)
on 2006-03-27 17:00
(Received via mailing list)
Does this library support generating of xml (not xhtml)? what's the top
level call? I tried

xml_ { ...} and it dies with
irb(main):021:0> doc = xml_ { p_ "a" }
NoMethodError: undefined method `create' for nil:NilClass
        from c:/ruby/lib/ruby/gems/1.8/gems/xx-0.1.0/lib/xx.rb:197:in
`method_missing'
        from (eval):10:in `xml_'
        from c:/ruby/lib/ruby/gems/1.8/gems/xx-0.1.0/lib/xx.rb:208:in
`send'
        from c:/ruby/lib/ruby/gems/1.8/gems/xx-0.1.0/lib/xx.rb:208:in
`method_missing'
        from (irb):21
        from :0
irb(main):022:0>

Thanks.
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2006-03-27 17:05
(Received via mailing list)
On Mon, 27 Mar 2006, itsme213 wrote:

>        from c:/ruby/lib/ruby/gems/1.8/gems/xx-0.1.0/lib/xx.rb:208:in
> `method_missing'
>        from (irb):21
>        from :0
> irb(main):022:0>
>
> Thanks.

you just need to mixin the method you want, in this case the xml
methods:


   harp:~ > cat a.rb
   require 'xx'
   include XX::XML

   puts xml_{ p_{ "a" } }
   harp:~ > ruby a.rb
   <?xml version='1.0'?><p>a</p>


regards.

-a
Fe57662c550fb3cce44c398ddf2dd706?d=identicon&s=25 itsme213 (Guest)
on 2006-03-27 17:14
(Received via mailing list)
thank you sir. love the library. is the '_' convention something that is
(or
should be) configurable?

i'm also looking forward to experimenting with traits. it sounds like
something that could be used for recording meta-data in lots of places,
including things like nitro/og.


<ara.t.howard@noaa.gov> wrote in message
news:Pine.LNX.4.62.0603270803500.32347@harp.ngdc.noaa.gov...
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2006-03-27 18:15
(Received via mailing list)
On Tue, 28 Mar 2006, itsme213 wrote:

> thank you sir. love the library. is the '_' convention something that is (or
> should be) configurable?

it is actually configurable.  you do something like

   xx_configure "method_missing", XX::STRICT            # tag methods
require '_'
   xx_configure "method_missing", XX::CRAZY_LIKE_A_HELL # tag methods no
not require '_'

in your class.

you example is a great example of why __not__ to do that however,
without the
'_' this

   xml{ p 'a' }

would call ruby's built-in 'p' method.  this would fail, but silently.
one of
the big differences with xx and other html/xml generation libs is that
it's
__designed__ to be mixed into other classes to give them html generation
capbilities (a la widgets).  the thing is, when you mixin to a class
like,
say, Array, you've already lost a huge part of you namespace like
'length',
'find', 'each', etc.  none of these methods will trigger method missing
and so
cannot be tag methods.  this is less a big deal for html than for xml,
which
can contain pretty much anything as tag names.  if one uses a blanket
method
missing approach, or even a receiver as the tag generator, one simply
cannot
generate xml using

   o.type{ }  # oops, all object have 'type'
   o.id{ }    # oops, all object have 'id'

you can use a BlankSlate here... but then you've also lost the ability
to
mixin rather than agregate.


> i'm also looking forward to experimenting with traits. it sounds like
> something that could be used for recording meta-data in lots of places,
> including things like nitro/og.

for sure.  it's one of the things it was designed for.  being able to
get
back list of traits is very valuable.

for instance, this line, taken from an 'initialize' method, iterates
over all
of this object's class traits and creates an instance trait for the
current
object that gets a deep copy of the class trait as the default value:

   klass = self.class
   mcp = lambda{|obj| Marshal::load(Marshal::dump(obj))}
   klass::class_traits.each{|r,w| klass::trait(r){ mcp[klass.send(r)]}}

so basically it says : "i have all the same traits as my class and i'll
bootstrap myself from the values of those traits which have been
parameterized
in my class"

this reason this is done is that this class is part of a hierarchy where
each
subclass adds more traits to parameterize the class.  with this generic
line i
can make any instance of that subclass bootstrap properly with no new
code.
so

   class Parent
     class_trait 'p' => 42
     def intialize
       ...
     end
   end
   class Child < Parent
     class_trait 'c' => 42.0
   end

   child = Child::new

and here 'child' would have the __instance__ traits 'a' and 'b' with
default
values gotten from the class method.

regards.

-a
Fe57662c550fb3cce44c398ddf2dd706?d=identicon&s=25 itsme213 (Guest)
on 2006-03-27 19:14
(Received via mailing list)
<ara.t.howard@noaa.gov> wrote in message

> it is actually configurable.  you do something like

I did not mean a blanket method_missing. My real question was:
- if I have a conflict with the '*_' convention, &
- I have another convention that I'd like to use e.g. '*_x'
would I be able to configure to use that convention?

> this reason this is done is that this class is part of a hierarchy where
> each
> subclass adds more traits to parameterize the class.

Is it possible to have different ways of combining up the class/module
chains? e.g. override? append? other?

Thanks!
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2006-03-27 19:28
(Received via mailing list)
On Tue, 28 Mar 2006, itsme213 wrote:

> <ara.t.howard@noaa.gov> wrote in message
>
>> it is actually configurable.  you do something like
>
> I did not mean a blanket method_missing. My real question was:
> - if I have a conflict with the '*_' convention, &
> - I have another convention that I'd like to use e.g. '*_x'
> would I be able to configure to use that convention?

ah.  no.  however, it would be a 3 minute exercise to add this
capability.
would you like me too?

>> this reason this is done is that this class is part of a hierarchy where
>> each subclass adds more traits to parameterize the class.
>
> Is it possible to have different ways of combining up the class/module
> chains? e.g. override? append? other?


hmm.  override is the default.  let me think about append.

regards.

-a
Fe57662c550fb3cce44c398ddf2dd706?d=identicon&s=25 itsme213 (Guest)
on 2006-03-27 22:19
(Received via mailing list)
<ara.t.howard@noaa.gov> wrote in message
> ah.  no.  however, it would be a 3 minute exercise to add this capability.
> would you like me too?

If you think it would be generally useful. For right now I'm fine with
'_'.

>> Is it possible to have different ways of combining up the class/module
>> chains? e.g. override? append? other?
>
>
> hmm.  override is the default.  let me think about append.

A trait of a trait, perhaps ;-)
This topic is locked and can not be replied to.