[Nitro] [ANN] Facets 1.8 (RC)
transfire at gmail.com
transfire at gmail.com
Sat Jan 27 20:55:00 EST 2007
On Jan 27, 6:35 pm, "George Moschovitis"
<george.moschovi... at gmail.com> wrote:
> Tom,
>
> here is a pattern that emerges often in Nitro/Og source code:
>
> klass.ann(:self, :table => []) unless klass.ann(:self, :table)
> klass.ann!(:self, :table) << info
>
> can you propose a shortcut or idiom for this common pattern?
maybe. something like this might work:
require 'facets/core/hash/insert'
klass.ann(:self).insert(:table, [])
klass.ann!(:self, :table) << info
Its a little shorter at least. there may be other ways, i'd have to
play with it. also, #insert is new brand new method in Facets. on ruby-
talk I asked about what best to call it. i'm still not 100% that's the
best name, but in anycase it will only store a value if the key
doesn't alrady exist and it returns true or false whterh the value was
stored by the command or not.
Of course, if all else fails, at the very least nitro could define a
special method:
class Module
def ann_insert_array(ref, key, info=nil)
klass.ann(ref, key => []) unless klass.ann(ref, key)
klass.ann!(ref, key) << info if info
end
end
or something like that.
BTW. i'm thinking allowing the notation 'klass.ann(:self).table'. this
can be done in a light-weight manner by returning a subclass of
OpenObject instead of a Hash when only the annotation reference is
given, eg. 'klass.ann(:self)' but i'm not 100% sure this a good idea.
What we can't do for sure is 'klass.ann.self' notation. That we have
to give up b/c it makes things too complicated.
T.
More information about the Nitro-general
mailing list