module PropertyAccessor::ClassMethods
Public Instance Methods
property(property_name, &block)
click to toggle source
# File lib/property_accessor/class_methods.rb, line 7 def property(property_name, &block) property = Property.new(property_name) builder = PropertyBuilder.new(property) if block.nil? raise UndefinedPropertyError, 'cannot define a property without specifying at least getter or setter' end builder.instance_exec(&block) define_method(property.initializer_method_name) do if !instance_variable_defined?(property.field_name) instance_variable_set( property.field_name, property.default_value_proc ? instance_exec(&property.default_value_proc) : property.default_value ) end end private property.initializer_method_name if property.getter_defined? define_method(property.getter_method_name) do send(property.initializer_method_name) instance_exec(&property.getter_proc) end elsif property.default_getter define_method(property.getter_method_name) do send(property.initializer_method_name) instance_variable_get(property.field_name) end end if property.setter_defined? define_method(property.setter_method_name, property.setter_proc) elsif property.default_setter define_method(property.setter_method_name) do |val| instance_variable_set(property.field_name, val) end end property.private_method_names.each do |method_name| private method_name end property.protected_method_names.each do |method_name| protected method_name end property.public_method_names.each do |method_name| public method_name end end