Daniel Schierbeck wrote:
> I couldn't find a Facets mailing list, and I know the developers use 
> this list, so therefore I send my proposal here.
> 
> I'd like to see the addition of an attribute validator, i.e. a setter 
> that checks to see if a block returns true when called with the new 
> value as its only argument. Without further ado, I hereby present 
> Module#attr_validator:
> 
>   class Module
>     def attr_validator(*symbols, &validator)
>       symbols.each do |symbol|
>         define_method "#{symbol}=" do |val|
>           unless validator.call(val)
>             raise ArgumentError, "Invalid value provided for #{symbol}"
>           end
>           instance_variable_set("@#{symbol}", val)
>         end
>       end
>     end
>   end
> 
> Use it, change it, polish it - it's yours.
> 
> 
> Cheers,
> Daniel Schierbeck

Note that this of course only works when you actually *use* the setter 
method, i.e. `@attr = val' will not validate `val'. Nor do I think it 
should.


Cheers,
Daniel Schierbeck