Sha256: 589d43f3a830a6314ea2eb9cfda7b5ed448cc07c2a67118cc04d3fdddc164107

Contents?: true

Size: 1.36 KB

Versions: 5

Compression:

Stored size: 1.36 KB

Contents

module Virtus

  # Virtus module that can define attributes for later inclusion
  #
  module ModuleExtensions

    # Define an attribute in the module
    #
    # @see Virtus::Extensions#attribute
    #
    # @return [self]
    #
    # @api private
    def attribute(*args)
      attribute_definitions << args
      self
    end

  private

    # Extend an object with Virtus methods and define attributes
    #
    # @param [Object] object
    #
    # @return [undefined]
    #
    # @api private
    def extended(object)
      super
      object.extend(Virtus)
      define_attributes(object)
    end

    # Extend a class with Virtus methods and define attributes
    #
    # @param [Object] object
    #
    # @return [undefined]
    #
    # @api private
    def included(object)
      super
      object.module_eval { include Virtus }
      define_attributes(object)
    end

    # Return attribute definitions
    #
    # @return [Array<Hash>]
    #
    # @api private
    def attribute_definitions
      @_attribute_definitions ||= []
    end

    # Define attributes on a class or instance
    #
    # @param [Object,Class] object
    #
    # @return [undefined]
    #
    # @api private
    def define_attributes(object)
      attribute_definitions.each do |attribute_args|
        object.attribute(*attribute_args)
      end
    end

  end # module ModuleExtensions
end # module Virtus

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
virtus-0.5.5 lib/virtus/module_extensions.rb
virtus-0.5.4 lib/virtus/module_extensions.rb
virtus-0.5.3 lib/virtus/module_extensions.rb
fragrant-0.0.5 vendor/bundle/ruby/1.9.1/gems/virtus-0.5.2/lib/virtus/module_extensions.rb
virtus-0.5.2 lib/virtus/module_extensions.rb