public Method

Module.attr_accessor_with_default(sym, default = nil, &block)

Declare an attribute accessor with an initial default return value.

To give attribute :age the initial value 25:

class Person
  attr_accessor_with_default :age, 25
end

some_person.age
=> 25
some_person.age = 26
some_person.age
=> 26

To give attribute :element_name a dynamic default value, evaluated in scope of self:

attr_accessor_with_default(:element_name) { name.underscore }

Source Code

# File active_support/core_ext/module/attr_accessor_with_default.rb, line 21
def attr_accessor_with_default(sym, default = nil, &block)
  raise 'Default value or block required' unless !default.nil? || block
  define_method(sym, block_given? ? block : Proc.new { default })
  module_eval("def \#{sym}=(value)\nclass << self; attr_reader :\#{sym} end\n@\#{sym} = value\nend\n", __FILE__, __LINE__)
end
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.