Module: SimpleModel::Attributes::ClassMethods
- Defined in:
- lib/simple_model/attributes.rb
Instance Attribute Summary collapse
-
#after_initialize ⇒ Object
Returns the value of attribute after_initialize.
- #alias_attributes ⇒ Object
-
#before_initialize ⇒ Object
Returns the value of attribute before_initialize.
-
#config ⇒ Object
The current intent of the config is allow the managing of features at the global level and overrides options set at attribute definition, which may not be the most flexible and may require re-thinking for future options Options: * config.initialize_defaults default is true, if false prevents attributes with default values from auto-initializing.
-
#default_attribute_settings ⇒ Object
The default settings for a SimpeModel class Options: * :on_set - accepts a lambda that is run when an attribute is set * :on_get - accepts a lambda that is run when you get/read an attribute * :default - the default value for the attribute, can be a symbol that is sent for a method * :initialize - informations the object whether or not it should initialize the attribute with :default value, defaults to true, and is overridden by config.initialzie_defaults ** If :initialize is set to false you must set :allow_blank to false or it will never set the default value * :allow_blank - when set to false, if an attributes value is blank attempts to set the default value, defaults to true.
- #defined_attributes ⇒ Object
Instance Method Summary collapse
-
#add_defined_attribute(attr, options) ⇒ Object
We want to re-run define_attribute_methods since attributes are not all defined at once, so we must set @attribute_methods_generated to nil to allow the re-run to occur ONLY IN RAILS 3.0.
-
#alias_attribute(new_alias, attr) ⇒ Object
Creates alias setter and getter for the supplied attribute using the supplied alias See spec for example.
- #attribute_defined?(attr) ⇒ Boolean
-
#create_attribute_methods(attrs, options) ⇒ Object
builds the setter and getter methods.
- #define_reader_with_options(attr, options) ⇒ Object
-
#define_setter_with_options(attr, options) ⇒ Object
Creates setter methods for the provided attributes On set, it will mark the attribute as changed if the attributes has been initialized.
-
#defined_attributes_keys ⇒ Object
We don’t want to call define_attribute_methods on methods defined in the parent class.
-
#inherited(base) ⇒ Object
Must inherit super’s defined_attributes and alias_attributes.
-
#new_with_store(session_hash) ⇒ Object
Creates a new instance where the attributes store is set to object provided, which allows one to pass a session store hash or any other hash-like object to be used for persistence.
Instance Attribute Details
#after_initialize ⇒ Object
Returns the value of attribute after_initialize.
237 238 239 |
# File 'lib/simple_model/attributes.rb', line 237 def after_initialize @after_initialize end |
#alias_attributes ⇒ Object
268 269 270 |
# File 'lib/simple_model/attributes.rb', line 268 def alias_attributes @alias_attributes ||= Hash.new end |
#before_initialize ⇒ Object
Returns the value of attribute before_initialize.
237 238 239 |
# File 'lib/simple_model/attributes.rb', line 237 def before_initialize @before_initialize end |
#config ⇒ Object
The current intent of the config is allow the managing of features at the global level and overrides options set at attribute definition, which may not be the most flexible and may require re-thinking for future options Options:
-
config.initialize_defaults default is true, if false prevents attributes with default values from auto-initializing
284 285 286 |
# File 'lib/simple_model/attributes.rb', line 284 def config @config ||= (superclass.respond_to?(:config) ? superclass.config.dup : SimpleModel.config.dup) end |
#default_attribute_settings ⇒ Object
The default settings for a SimpeModel class Options:
-
:on_set - accepts a lambda that is run when an attribute is set
-
:on_get - accepts a lambda that is run when you get/read an attribute
-
:default - the default value for the attribute, can be a symbol that is sent for a method
-
:initialize - informations the object whether or not it should initialize the attribute with :default value, defaults to true,
and is overridden by config.initialzie_defaults
** If :initialize is set to false you must set :allow_blank to false or it will never set the default value
-
:allow_blank - when set to false, if an attributes value is blank attempts to set the default value, defaults to true
297 298 299 |
# File 'lib/simple_model/attributes.rb', line 297 def default_attribute_settings @default_attribute_settings ||= DEFAULT_ATTRIBUTE_SETTINGS end |
#defined_attributes ⇒ Object
272 273 274 |
# File 'lib/simple_model/attributes.rb', line 272 def defined_attributes @defined_attributes ||= Hash.new end |
Instance Method Details
#add_defined_attribute(attr, options) ⇒ Object
We want to re-run define_attribute_methods since attributes are not all defined at once, so we must set @attribute_methods_generated to nil to allow the re-run to occur ONLY IN RAILS 3.0.
304 305 306 307 308 |
# File 'lib/simple_model/attributes.rb', line 304 def add_defined_attribute(attr,) defined_attributes[attr] = @attribute_methods_generated = nil #if (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR == 0) define_attribute_methods(defined_attributes_keys) end |
#alias_attribute(new_alias, attr) ⇒ Object
Creates alias setter and getter for the supplied attribute using the supplied alias See spec for example.
349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 |
# File 'lib/simple_model/attributes.rb', line 349 def alias_attribute(new_alias,attr) # get to the base attribute while alias_attributes[attr] attr = alias_attributes[attr] end raise UndefinedAttribute, "#{attr} is not a defined attribute so it cannot be aliased" unless defined_attributes[attr] alias_attributes[new_alias] = attr define_method(new_alias) do send(attr) end define_method("#{new_alias}?") do send("#{attr}?") end define_method("#{new_alias}=") do |*args, &block| send("#{attr}=",*args, &block) end end |
#attribute_defined?(attr) ⇒ Boolean
276 277 278 |
# File 'lib/simple_model/attributes.rb', line 276 def attribute_defined?(attr) defined_attributes.has_key?(attr.to_sym) end |
#create_attribute_methods(attrs, options) ⇒ Object
builds the setter and getter methods
318 319 320 321 322 323 324 325 326 |
# File 'lib/simple_model/attributes.rb', line 318 def create_attribute_methods(attrs,) unless attrs.blank? attrs.each do |attr| (attr,) (attr,) add_defined_attribute(attr,) end end end |
#define_reader_with_options(attr, options) ⇒ Object
328 329 330 331 332 333 334 335 336 |
# File 'lib/simple_model/attributes.rb', line 328 def (attr,) define_method(attr) do get_attribute(attr,) end define_method("#{attr}?") do get_attribute?(attr) end end |
#define_setter_with_options(attr, options) ⇒ Object
Creates setter methods for the provided attributes On set, it will mark the attribute as changed if the attributes has been initialized.
341 342 343 344 345 |
# File 'lib/simple_model/attributes.rb', line 341 def (attr,) define_method("#{attr}=") do |val| set_attribute(attr,val,) end end |
#defined_attributes_keys ⇒ Object
We don’t want to call define_attribute_methods on methods defined in the parent class
311 312 313 314 315 |
# File 'lib/simple_model/attributes.rb', line 311 def defined_attributes_keys dak = defined_attributes.keys dak = dak - superclass.defined_attributes.keys if superclass.respond_to?(:defined_attributes) dak end |
#inherited(base) ⇒ Object
Must inherit super’s defined_attributes and alias_attributes
390 391 392 393 394 |
# File 'lib/simple_model/attributes.rb', line 390 def inherited(base) base.defined_attributes = defined_attributes.merge(base.defined_attributes) base.alias_attributes = alias_attributes.merge(base.alias_attributes) super end |
#new_with_store(session_hash) ⇒ Object
Creates a new instance where the attributes store is set to object provided, which allows one to pass a session store hash or any other hash-like object to be used for persistence. Typically used for modeling session stores for authorization or shopping carts EX:
class ApplicationController < ActionController::Base
def session_user
session[:user] ||= {}
@session_user ||= SessionUser.new_with_store(session[:user])
end
helper_method :session_user
end
264 265 266 |
# File 'lib/simple_model/attributes.rb', line 264 def new_with_store(session_hash) self.new(:attributes => session_hash) end |