Module: SimpleModel::Attributes::ClassMethods
- Defined in:
- lib/simple_model/attributes.rb
Instance Attribute Summary collapse
-
#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.
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.
-
#after_initialize ⇒ Object
A hook to perform actions after all attributes have been initialized Expects an lambda that accept the object and the pending attributes hash EX: lambda {|obj| puts “initialized”}.
-
#after_initialize=(after_initialize) ⇒ Object
Expects an lambda that accept the object and the pending attributes hash EX: lambda {|obj| puts “initialized”}.
-
#alias_attribute(new_alias, attr) ⇒ Object
Creates alias setter and getter for the supplied attribute using the supplied alias See spec for example.
- #alias_attributes ⇒ Object
- #alias_attributes=(alias_attributes) ⇒ Object
- #attribute_defined?(attr) ⇒ Boolean
-
#before_initialize ⇒ Object
A hook to perform actions on the pending attributes or the object before the pending attributes have been initialized.
-
#before_initialize=(before_initialize) ⇒ Object
Expects an lambda that accept the object, the pending attributes hash and should return a hash to be set EX: lambda {|obj,attrs| attrs.select{|k,v| !v.blank?}}.
-
#create_attribute_methods(attrs, options) ⇒ Object
builds the setter and getter methods.
-
#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.
- #default_attribute_settings=(default_attribute_settings) ⇒ Object
- #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 ⇒ Object
- #defined_attributes=(defined_attributes) ⇒ Object
-
#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
#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
286 287 288 |
# File 'lib/simple_model/attributes.rb', line 286 def config @config 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.
310 311 312 313 314 |
# File 'lib/simple_model/attributes.rb', line 310 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 |
#after_initialize ⇒ Object
A hook to perform actions after all attributes have been initialized Expects an lambda that accept the object and the pending attributes hash EX: lambda {|obj| puts “initialized”}
396 397 398 |
# File 'lib/simple_model/attributes.rb', line 396 def after_initialize @after_initialize end |
#after_initialize=(after_initialize) ⇒ Object
Expects an lambda that accept the object and the pending attributes hash EX: lambda {|obj| puts “initialized”}
402 403 404 405 |
# File 'lib/simple_model/attributes.rb', line 402 def after_initialize=after_initialize raise TypeError "after_initalize must be a Proc" unless after_initialize.is_a?(Proc) @after_initialize = after_initialize end |
#alias_attribute(new_alias, attr) ⇒ Object
Creates alias setter and getter for the supplied attribute using the supplied alias See spec for example.
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 |
# File 'lib/simple_model/attributes.rb', line 354 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 |
#alias_attributes ⇒ Object
262 263 264 |
# File 'lib/simple_model/attributes.rb', line 262 def alias_attributes @alias_attributes ||= Hash.new end |
#alias_attributes=(alias_attributes) ⇒ Object
266 267 268 |
# File 'lib/simple_model/attributes.rb', line 266 def alias_attributes=alias_attributes @alias_attributes = alias_attributes end |
#attribute_defined?(attr) ⇒ Boolean
278 279 280 |
# File 'lib/simple_model/attributes.rb', line 278 def attribute_defined?(attr) defined_attributes.has_key?(attr.to_sym) end |
#before_initialize ⇒ Object
A hook to perform actions on the pending attributes or the object before the pending attributes have been initialized. Expects an lambda that accept the object, the pending attributes hash and should return a hash to be set EX: lambda {|obj,attrs| attrs.select{|k,v| !v.blank?}}
381 382 383 |
# File 'lib/simple_model/attributes.rb', line 381 def before_initialize @before_initialize end |
#before_initialize=(before_initialize) ⇒ Object
Expects an lambda that accept the object, the pending attributes hash and should return a hash to be set EX: lambda {|obj,attrs| attrs.select{|k,v| !v.blank?}}
388 389 390 391 |
# File 'lib/simple_model/attributes.rb', line 388 def before_initialize=before_initialize raise TypeError "before_initialize must be a lambda that accepts the attributes to be initialize" unless before_initialize.is_a?(Proc) @before_initialize = before_initialize end |
#create_attribute_methods(attrs, options) ⇒ Object
builds the setter and getter methods
324 325 326 327 328 329 330 331 332 |
# File 'lib/simple_model/attributes.rb', line 324 def create_attribute_methods(attrs,) unless attrs.blank? attrs.each do |attr| (attr,) (attr,) add_defined_attribute(attr,) end end 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
299 300 301 |
# File 'lib/simple_model/attributes.rb', line 299 def default_attribute_settings @default_attribute_settings ||= DEFAULT_ATTRIBUTE_SETTINGS end |
#default_attribute_settings=(default_attribute_settings) ⇒ Object
303 304 305 |
# File 'lib/simple_model/attributes.rb', line 303 def default_attribute_settings=default_attribute_settings @default_attribute_settings = default_attribute_settings end |
#define_reader_with_options(attr, options) ⇒ Object
334 335 336 337 338 339 340 341 |
# File 'lib/simple_model/attributes.rb', line 334 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.
346 347 348 349 350 |
# File 'lib/simple_model/attributes.rb', line 346 def (attr,) define_method("#{attr}=") do |val| set_attribute(attr,val,) end end |
#defined_attributes ⇒ Object
270 271 272 |
# File 'lib/simple_model/attributes.rb', line 270 def defined_attributes @defined_attributes ||= Hash.new end |
#defined_attributes=(defined_attributes) ⇒ Object
274 275 276 |
# File 'lib/simple_model/attributes.rb', line 274 def defined_attributes=defined_attributes @defined_attributes = defined_attributes end |
#defined_attributes_keys ⇒ Object
We don’t want to call define_attribute_methods on methods defined in the parent class
317 318 319 320 321 |
# File 'lib/simple_model/attributes.rb', line 317 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
408 409 410 411 412 |
# File 'lib/simple_model/attributes.rb', line 408 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
258 259 260 |
# File 'lib/simple_model/attributes.rb', line 258 def new_with_store(session_hash) self.new(:attributes => session_hash) end |