Created
February 24, 2010 23:15
-
-
Save jdunphy/314005 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Module | |
| %23 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 | |
| %20# some_person.age | |
| # => 26 | |
| # | |
| # To give attribute <tt>:element_name</tt> a dynamic default value, evaluated | |
| # in scope of self: | |
| # | |
| %20 # 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 %23{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% |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment