Sha256: ee36d116fdc9e6c1bb79ee289ebc6abafa37ceda4a0d26aa5e8528fee566a3cc

Contents?: true

Size: 1.03 KB

Versions: 41

Compression:

Stored size: 1.03 KB

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__ + 1)
      def #{sym}=(value)                        # def age=(value)
        class << self; attr_reader :#{sym} end  #   class << self; attr_reader :age end
        @#{sym} = value                         #   @age = value
      end                                       # end
    EVAL
  end
end

Version data entries

41 entries across 41 versions & 3 rubygems

Version Path
social_url_stats-0.0.1 vendor/ruby/1.9.1/gems/activesupport-3.0.0/lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.20 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.19 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.18 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.17 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.16 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.15 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.14 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.13 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.13.rc1 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.12 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.12.rc1 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.11 lib/active_support/core_ext/module/attr_accessor_with_default.rb
messagebus_ruby_api-0.4.7 spec/ruby/1.9.1/gems/activesupport-3.0.9/lib/active_support/core_ext/module/attr_accessor_with_default.rb
messagebus_ruby_api-0.4.4 spec/ruby/1.9.1/gems/activesupport-3.0.9/lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.10 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.10.rc1 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.9 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.9.rc5 lib/active_support/core_ext/module/attr_accessor_with_default.rb
activesupport-3.0.9.rc4 lib/active_support/core_ext/module/attr_accessor_with_default.rb