def attr(*args)
if TrueClass === args.last or FalseClass === args.last or NilClass === args.last
if args.pop
args.concat( args.collect{ |a|
a = a.to_s.strip
case a.slice(-1,1)
when '='
a[0..-2]
when '?'
"#{a[0..-2]}="
else
"#{a}="
end
} )
end
end
made = []
args.flatten.each { |a|
a = a.to_s
m = a.chomp('?').chomp('=')
case a.slice(-1,1)
when '?'
class_eval %{ def #{m}? ; @#{m} ? true : @#{m} ; end }
when '='
class_eval %{ def #{m}=(x) ; @#{m} = x ; end }
else
class_eval %{ def #{m} ; @#{m} ; end }
end
made << a
}
return *made
end