Sha256: cd4329814a59d9d72bff2c8c401d61e7c1cf824235cff4ea4159e64a0de1ac28

Contents?: true

Size: 890 Bytes

Versions: 119

Compression:

Stored size: 890 Bytes

Contents

class Module
  # Declare an attribute accessor with an initial default return value.
  #
  # To give attribute <tt>:age</tt> the initial value <tt>25</tt>:
  #  
  #   class Person
  #     attr_accessor_with_default :age, 25
  #   end
  #
  #   some_person.age
  #   => 25
  #   some_person.age = 26
  #   some_person.age
  #   => 26
  #
  # To give attribute <tt>:element_name</tt> a dynamic default value, evaluated
  # in scope of self:
  #
  #   attr_accessor_with_default(:element_name) { name.underscore } 
  #
  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(<<-EVAL, __FILE__, __LINE__)
      def #{sym}=(value)
        class << self; attr_reader :#{sym} end
        @#{sym} = value
      end
    EVAL
  end
end

Version data entries

119 entries across 118 versions & 18 rubygems

Version Path
3mix-castronaut-0.5.0.2 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
masover-castronaut-0.4.4.4 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
masover-castronaut-0.4.4.5 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
masover-castronaut-0.5.0.1 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
p8-castronaut-0.6.1.1 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.4.1 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.4.2 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.4.3 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.4.4 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.4.5 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.4.6 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.5.0 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.5.1 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.5.2 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.5.3 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.5.4 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.6.0 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.6.1 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.7.4 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb
relevance-castronaut-0.7.5 vendor/activesupport/lib/active_support/core_ext/module/attr_accessor_with_default.rb