Re: Extend an object with module stored



Andrea Reginato wrote:
> I would like extend dynamically an object with one or more Module that I
> save into an Hash (I now only this way).
>
> -----------------------------
> categorie << Categoria.new('Definizioni Testuali', {:name_module =>
> ListaDefinizioni, })
> categorie << Categoria.new('Definizioni Testuali', {:name_module =>
> ListaDefinizioni, :name_module => ListaDefinizioniEditor})
> -----------------------------
>
> Then I have store this information in a YAML file, but when I dump the
> hash I lost the info about the module.
>
> -----------------------------
> --- !ruby/array:Categorie
> - !ruby/object:Categoria
> descrizione: Definizioni Testuali
> estensioni: # MY HASH
> :name_module: !ruby/object:Module {}
> - !ruby/object:Categoria
> descrizione: Definizioni Testuali
> estensioni: # MY HASH
> :name_module: !ruby/object:Module {}
> -----------------------------
>
> So when I try to extend, nothing to do.
> This code do not give me errors, but it do not extend my object.
>
> -----------------------------
> # @categoria.extension is the hash with the module
> @categoria.estensioni.each_value { |estensione| @denotato.send('extend',
> estensione) }
> -----------------------------
>
> Do you know some tecnique to extend an Object with module stored in YAML
> file?
> Thanks so much to all for the help.
>
> --Reis
>

I had some code to serialize module and class identities (without any of
their instance variables or class variables, though) with 1.8.2 (see
below) but it seems not to work with 1.8.4. I will take a look at it
later today.


class Module
def is_complex_yaml?
false
end
def to_yaml( opts = {} )
YAML::quick_emit( nil, opts ) { |out|
out << "!ruby/module "
self.name.to_yaml( :Emitter => out )
}
end
end
YAML.add_ruby_type(/^module/) do |type, val|
subtype, subclass = YAML.read_type_class(type, Module)
val.split(/::/).inject(Object) { |p, n| p.const_get(n)}
end

class Class
def to_yaml( opts = {} )
YAML::quick_emit( nil, opts ) { |out|
out << "!ruby/class "
self.name.to_yaml( :Emitter => out )
}
end
end
YAML.add_ruby_type(/^class/) do |type, val|
subtype, subclass = YAML.read_type_class(type, Class)
val.split(/::/).inject(Object) { |p, n| p.const_get(n)}
end

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407


.



Relevant Pages

  • Re: Extend an object with module stored
    ... > I would like extend dynamically an object with one or more Module that I ... > save into an Hash. ... > Then I have store this information in a YAML file, ... > Do you know some tecnique to extend an Object with module stored in YAML ...
    (comp.lang.ruby)
  • Re: Question on M1917 American Enfield
    ... Hash: SHA1 ... When I extend it out a bit the discomfort lessens. ...
    (rec.guns)
  • Extend an object with module stored
    ... I would like extend dynamically an object with one or more Module that I ... save into an Hash. ... descrizione: Definizioni Testuali ... estensioni: # MY HASH ...
    (comp.lang.ruby)
  • Re: How is .net generating extra bits in MD5?
    ... > that the length of the derived key is bounded by the length of the hash ... > that the hash algorithm generates, but GetBytes will extend the result ... > extending the result past what PBKDF1 says. ...
    (microsoft.public.dotnet.security)
  • Re: a short article about equality in Lisp (for beginners)
    ... equality predicate + hash function. ... The standard specifies only four types of hash tables possible, ... for hash and eqv. ... This class is a subclass of builtin-key-situation. ...
    (comp.lang.lisp)