def process
read, write = true, false
params = statement.parameters(false).dup
case statement.method_name(true)
when :attr
if params.size == 2
write = true if params.pop == s(:var_ref, s(:kw, "true"))
end
when :attr_accessor
write = true
when :attr_reader
when :attr_writer
read, write = false, true
end
validated_attribute_names(params).each do |name|
namespace.attributes[scope][name] = SymbolHash[:read => nil, :write => nil]
{:read => name, :write => "#{name}="}.each do |type, meth|
next unless (type == :read ? read : write)
namespace.attributes[scope][name][type] = MethodObject.new(namespace, meth, scope) do |o|
if type == :write
src = "def #{meth}(value)"
full_src = "#{src}\n @#{name} = value\nend"
doc = "Sets the attribute +#{name}+\n@param value the value to set the attribute +#{name}+ to."
else
src = "def #{meth}"
full_src = "#{src}\n @#{name}\nend"
doc = "Returns the value of attribute +#{name}+"
end
o.source ||= full_src
o.signature ||= src
o.docstring = statement.comments.to_s.empty? ? doc : statement.comments
end
register namespace.attributes[scope][name][type]
end
end
end