Module: Hippo::Concerns::AttrAccessorWithDefault::ClassMethods
- Defined in:
- lib/hippo/concerns/attr_accessor_with_default.rb
Instance Method Summary collapse
-
#attr_accessor_with_default(name, default = nil) ⇒ Object
defines a attr_accessor with a default value.
- #attr_add_default_setting_method(name) ⇒ Object
- #attr_reader_with_default(name, default) ⇒ Object
Instance Method Details
#attr_accessor_with_default(name, default = nil) ⇒ Object
defines a attr_accessor with a default value
31 32 33 34 35 |
# File 'lib/hippo/concerns/attr_accessor_with_default.rb', line 31 def attr_accessor_with_default( name, default=nil ) attr_writer name attr_add_default_setting_method(name) attr_reader_with_default(name, default) end |
#attr_add_default_setting_method(name) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/hippo/concerns/attr_accessor_with_default.rb', line 37 def attr_add_default_setting_method(name) module_eval do define_singleton_method(name) do |value = nil| attr_reader_with_default(name, value) if value instance_variable_get("@#{name}".to_sym) end end end |
#attr_reader_with_default(name, default) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/hippo/concerns/attr_accessor_with_default.rb', line 46 def attr_reader_with_default( name, default ) instance_var = "@#{name.to_s}".to_sym instance_variable_set(instance_var, default) module_eval do define_method(name) do class << self; self; end.class_eval do attr_reader(name) end if instance_variable_defined?(instance_var) instance_variable_get(instance_var) else instance_variable_set(instance_var, default.is_a?(Proc) ? instance_exec(&default) : default ) end end end end |