module Virtus::ModuleExtensions
Virtus module that can define attributes for later inclusion
@private
Public Class Methods
extended(mod)
click to toggle source
@api private
Calls superclass method
# File lib/virtus/module_extensions.rb, line 10 def self.extended(mod) super setup(mod) end
setup(mod, inclusions = [Model], attribute_definitions = [])
click to toggle source
@api private
# File lib/virtus/module_extensions.rb, line 16 def self.setup(mod, inclusions = [Model], attribute_definitions = []) mod.instance_variable_set('@inclusions', inclusions) existing_attributes = mod.instance_variable_get('@attribute_definitions') new_attributes = (existing_attributes || []) + attribute_definitions mod.instance_variable_set('@attribute_definitions', new_attributes) end
Public Instance Methods
attribute(name, type = nil, options = {})
click to toggle source
Define an attribute in the module
@see Virtus::Extensions#attribute
@return [self]
@api private
# File lib/virtus/module_extensions.rb, line 30 def attribute(name, type = nil, options = {}) @attribute_definitions << [name, type, options] self end
Private Instance Methods
define_attributes(object)
click to toggle source
Define attributes on a class or instance
@param [Object,Class] object
@return [undefined]
@api private
# File lib/virtus/module_extensions.rb, line 81 def define_attributes(object) @attribute_definitions.each do |attribute_args| object.attribute(*attribute_args) end end
extended(object)
click to toggle source
Extend an object with Virtus methods and define attributes
@param [Object] object
@return [undefined]
@api private
Calls superclass method
# File lib/virtus/module_extensions.rb, line 44 def extended(object) super @inclusions.each { |mod| object.extend(mod) } define_attributes(object) object.set_default_attributes end
included(object)
click to toggle source
Extend a class with Virtus methods and define attributes
@param [Object] object
@return [undefined]
@api private
Calls superclass method
# File lib/virtus/module_extensions.rb, line 58 def included(object) super if Class === object @inclusions.reject do |mod| object.ancestors.include?(mod) end.each do |mod| object.send(:include, mod) end define_attributes(object) else object.extend(ModuleExtensions) ModuleExtensions.setup(object, @inclusions, @attribute_definitions) end end