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