Module: Virtus

Defined in:
lib/virtus.rb,
lib/virtus/model.rb,
lib/virtus/builder.rb,
lib/virtus/coercer.rb,
lib/virtus/version.rb,
lib/virtus/attribute.rb,
lib/virtus/extensions.rb,
lib/virtus/value_object.rb,
lib/virtus/attribute_set.rb,
lib/virtus/class_methods.rb,
lib/virtus/configuration.rb,
lib/virtus/attribute/hash.rb,
lib/virtus/support/options.rb,
lib/virtus/attribute/strict.rb,
lib/virtus/class_inclusions.rb,
lib/virtus/instance_methods.rb,
lib/virtus/attribute/boolean.rb,
lib/virtus/attribute/builder.rb,
lib/virtus/attribute/coercer.rb,
lib/virtus/module_extensions.rb,
lib/virtus/support/equalizer.rb,
lib/virtus/attribute/accessor.rb,
lib/virtus/attribute/coercible.rb,
lib/virtus/support/type_lookup.rb,
lib/virtus/attribute/collection.rb,
lib/virtus/builder/hook_context.rb,
lib/virtus/attribute/lazy_default.rb,
lib/virtus/attribute/default_value.rb,
lib/virtus/attribute/nullify_blank.rb,
lib/virtus/attribute/embedded_value.rb,
lib/virtus/const_missing_extensions.rb,
lib/virtus/attribute/default_value/from_symbol.rb,
lib/virtus/attribute/default_value/from_callable.rb,
lib/virtus/attribute/default_value/from_clonable.rb

Overview

Builds a module for…modules

Examples:


module Common
  include Virtus.module

  attribute :name, String
  attribute :age,  Integer
end

class User
  include Common
end

class Admin
  include Common
end

Returns:

  • (Module)

Defined Under Namespace

Modules: ClassInclusions, ClassMethods, ConstMissingExtensions, Extensions, InstanceMethods, Model, ModuleExtensions, Options, TypeLookup, ValueObject Classes: Attribute, AttributeSet, Builder, Coercer, CoercionError, Configuration, Equalizer, ModelBuilder, ModuleBuilder, PendingAttribute, TypeDefinition, ValueObjectBuilder

Constant Summary collapse

EXTRA_CONST_ARGS =
(RUBY_VERSION < '1.9' ? [] : [ false ]).freeze
Undefined =
Object.new.freeze
VERSION =
'2.0.0'.freeze

Class Method Summary collapse

Class Method Details

.coerceObject



109
110
111
# File 'lib/virtus.rb', line 109

def self.coerce
  configuration.coerce
end

.coerce=(value) ⇒ Object



99
100
101
102
# File 'lib/virtus.rb', line 99

def self.coerce=(value)
  configuration.coerce = value
  self
end

.coercer(&block) ⇒ Object



88
89
90
# File 'lib/virtus.rb', line 88

def self.coercer(&block)
  configuration.coercer(&block)
end

.config {|configuration| ... } ⇒ Object

Yields:



123
124
125
126
# File 'lib/virtus.rb', line 123

def self.config(&block)
  yield configuration if block_given?
  configuration
end

.configurationObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Global configuration instance

@ return [Configuration]



206
207
208
# File 'lib/virtus.rb', line 206

def self.configuration
  @configuration ||= Configuration.new
end

.constantize(type) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



211
212
213
# File 'lib/virtus.rb', line 211

def self.constantize(type)
  inflector.constantize(type)
end

.finalizeArray

Finalize pending attributes

Examples:

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

Returns:

  • (Array)

    array of finalized models



249
250
251
252
253
# File 'lib/virtus.rb', line 249

def self.finalize
  Builder.pending.each do |klass|
    klass.attribute_set.finalize
  end
end

.inflectorObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



216
217
218
219
220
221
222
223
224
225
226
227
# File 'lib/virtus.rb', line 216

def self.inflector
  @inflector ||=
    begin
      require 'dry/inflector'
      Dry::Inflector.new
    rescue LoadError
      raise(
        NotImplementedError,
        'Virtus needs dry-inflector gem to constantize namespaced constant names'
      )
    end
end

.model(options = {}, &block) ⇒ Object



151
152
153
# File 'lib/virtus.rb', line 151

def self.model(options = {}, &block)
  ModelBuilder.call(options, &block)
end

.module(options = {}, &block) ⇒ Object



177
178
179
# File 'lib/virtus.rb', line 177

def self.module(options = {}, &block)
  ModuleBuilder.call(options, &block)
end

.value_object(options = {}, &block) ⇒ Module

Builds a module for value object models

Examples:


class GeoLocation
  include Virtus.value_object

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

Returns:

  • (Module)


197
198
199
# File 'lib/virtus.rb', line 197

def self.value_object(options = {}, &block)
  ValueObjectBuilder.call(options, &block)
end

.warn(msg) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



256
257
258
# File 'lib/virtus.rb', line 256

def self.warn(msg)
  Kernel.warn(msg)
end