Hi -- On 3/18/07, Clifford Heath <no.spam / please.net> wrote: > David A. Black wrote: > > Wouldn't it be better to call that checked_attr? I'm just thinking > > that it's mostly checking the class, rather than the type > > You have the choice of using class checking or block-based checking, > which can perform whatever type checks are relevant, including respond_to? > and related checks. The parameter list consists of a list of any of four > kinds of things: > * a Class (which is used for subsequent class checks), > * nil (indicating that nil values are allowed), > * a Symbol, which creates an attribute having the defined checks, > * any other value, which is used as a default value. > The block, if any, is applied to all created attributes. > > Class checking is just a shorthand limited form of type checking. I'm > fully aware if the distinction, but this method encourages type checking, > not just class checking, so I think it's correctly named. It does indeed sound quite versatile. That, too, puts me in mind of "checked_attr", but maybe I'm just basking in your having liked my 'chattr' name idea :-) > The gem also contains "array_attr", which creates a subclass of Array that > overrides every mutating method of Array to provide the same checking for > array attributes as well (with the exception of nil and default values). I think there's a problem with array_attr; I'm getting: /opt/local/lib/ruby/gems/1.8/gems/chattr-0.9.0/lib/chattr.rb:378:in `throw': wrong number of arguments (0 for 1) (ArgumentError) when I try to violate the constraint on an array. It looks like there's a throw just kind of sitting there on its own. The business of overriding mutating methods of Array reminds me of some incomplete attempts by me, a few years ago, to add a kind of native 'tie' facility to arrays -- meaning, you'd do something like: a = [] def a.[]=(index, value) # some thing here that persists the value or whatever end and then every change to the array would be laundered through that operation. In fact, I remember originally thinking that Array would work that way, and then having it pointed out to me that it doesn't, since the mutating operations don't all converge on []= or anything else. Maybe I'll be inspired now to try it again. David -- Q. What is THE Ruby book for Rails developers? A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black) (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf) Q. Where can I get Ruby/Rails on-site training, consulting, coaching? A. Ruby Power and Light, LLC (http://www.rubypal.com)