From: Tom Sawyer Date: 2003-01-07T15:16:40+09:00 Subject: Re: attr_cast, one a small step for interface techniques All fixed. new code. (ever so slight changes): alias attr_reader_basic attr_reader alias attr_writer_basic attr_writer alias attr_accessor_basic attr_accessor def attr_reader(*args) if args.last.kind_of?(Hash) or args.last.kind_of?(Array) attr_reader_with_cast(args.pop) end attr_reader_basic(*args) end def attr_reader_with_cast(harg) harg.each { |name, cast| class_eval <<-EOS def #{name}() @#{name}.#{cast} end EOS } end def attr_writer(*args) if args.last.kind_of?(Hash) or args.last.kind_of?(Array) attr_writer_with_cast(args.pop) end attr_writer_basic(*args) end def attr_writer_with_cast(harg) harg.each { |name, cast| class_eval <<-EOS def #{name}=(arg) @#{name} = arg.#{cast} end EOS } end def attr_accessor(*args) attr_reader(*args) attr_writer(*args) end def attr_accessor_with_cast(harg) attr_reader_with_cast(harg) attr_writer_with_cast(harg) end