Method: Object#attribute

Defined in:
lib/utilrb/object/attribute.rb

#attribute(attr_def, &init) ⇒ Object

call-seq:

attribute :name => default_value
attribute(:name) { default_value }

In the first form, defines a read-write attribute named ‘name’ with default_value for default value. In the second form, the block is called if the attribute is read before it has been ever written, and its return value is used as default value.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/utilrb/object/attribute.rb', line 11

def attribute(attr_def, &init) # :nodoc:
    if Hash === attr_def
        name, defval = attr_def.to_a.flatten
    else
        name = attr_def
    end

    class_eval do
        attr_writer name
        if !defval && init
            define_method("#{name}_defval", &init)
        else
            define_method("#{name}_defval") { defval }
        end
    end

    class_eval <<-EOD, __FILE__, __LINE__+1
    def #{name}
        if instance_variable_defined?(:@#{name}) then @#{name}
        else @#{name} = #{name}_defval
        end
    end
    EOD
end