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)