module Virtus

Base module which adds Attribute API to your classes

Constants

EXTRA_CONST_ARGS

Provides args for const_get and const_defined? to make them behave consistently across different versions of ruby

Undefined

Represents an undefined parameter used by auto-generated option methods

VERSION

Public Class Methods

coerce() click to toggle source

Returns the global coercion setting

@return [Boolean]

@api public

# File lib/virtus.rb, line 109
def self.coerce
  configuration.coerce
end
coerce=(value) click to toggle source

Sets the global coercion configuration value

@param [Boolean] value

@return [Virtus]

@api public

# File lib/virtus.rb, line 99
def self.coerce=(value)
  configuration.coerce = value
  self
end
coercer(&block) click to toggle source

Sets the global coercer configuration

@example

Virtus.coercer do |config|
  config.string.boolean_map = { true => '1', false => '0' }
end

@return [Coercible::Coercer]

@api public

# File lib/virtus.rb, line 88
def self.coercer(&block)
  configuration.coercer(&block)
end
config() { |configuration| ... } click to toggle source

Provides access to the global Virtus configuration

@example

Virtus.config do |config|
  config.coerce = false
end

@return [Configuration]

@api public

# File lib/virtus.rb, line 123
def self.config(&block)
  yield configuration if block_given?
  configuration
end
configuration() click to toggle source

Global configuration instance

@ return [Configuration]

@api private

# File lib/virtus.rb, line 206
def self.configuration
  @configuration ||= Configuration.new
end
finalize() click to toggle source

Finalize pending attributes

@example

class User
  include Virtus.model(:finalize => false)

  attribute :address, 'Address'
end

class Address
  include Virtus.model(:finalize => false)

  attribute :user, 'User'
end

Virtus.finalize # this will resolve constant names

@return [Array] array of finalized models

@api public

# File lib/virtus.rb, line 230
def self.finalize
  Builder.pending.each do |klass|
    klass.attribute_set.finalize
  end
end
model(options = {}, &block) click to toggle source

Provides access to the Virtus module builder see Virtus::ModuleBuilder

@example

 MyVirtusModule = Virtus.module { |mod|
   mod.coerce = true
   mod.string.boolean_map = { 'yup' => true, 'nope' => false }
 }

class Book
  include MyVirtusModule

  attribute :published, Boolean
end

# This could be made more succinct as well
class OtherBook
  include Virtus.module { |m| m.coerce = false }
end

@return [Module]

@api public

# File lib/virtus.rb, line 151
def self.model(options = {}, &block)
  ModelBuilder.call(options, &block)
end
module(options = {}, &block) click to toggle source

Builds a module for…modules

@example

module Common
  include Virtus.module

  attribute :name, String
  attribute :age,  Integer
end

class User
  include Common
end

class Admin
  include Common
end

@return [Module]

@api public

# File lib/virtus.rb, line 177
def self.module(options = {}, &block)
  ModuleBuilder.call(options, &block)
end
value_object(options = {}, &block) click to toggle source

Builds a module for value object models

@example

class GeoLocation
  include Virtus.value_object

  values do
    attribute :lat, Float
    attribute :lng, Float
  end
end

@return [Module]

@api public

# File lib/virtus.rb, line 197
def self.value_object(options = {}, &block)
  ValueObjectBuilder.call(options, &block)
end
warn(msg) click to toggle source

@api private

# File lib/virtus.rb, line 237
def self.warn(msg)
  Kernel.warn(msg)
end

Private Class Methods

extended(object) click to toggle source

Extends an object with virtus extensions

@param [Object] object

@return [undefined]

@deprecated

@api private

# File lib/virtus.rb, line 72
def self.extended(object)
  Virtus.warn("extending with Virtus module is deprecated. Use 'extend(Virtus.model)' instead #{caller.first}")
  object.extend(Extensions)
end
included(object) click to toggle source

Extends base class or a module with virtus methods

@param [Object] object

@return [undefined]

@deprecated

@api private

Calls superclass method
# File lib/virtus.rb, line 51
def self.included(object)
  super
  if Class === object
    Virtus.warn("including Virtus module is deprecated. Use 'include Virtus.model' instead #{caller.first}")
    object.send(:include, ClassInclusions)
  else
    Virtus.warn("including Virtus module is deprecated. Use 'include Virtus.module' instead #{caller.first}")
    object.extend(ModuleExtensions)
  end
end