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
Returns the global coercion setting
@return [Boolean]
@api public
# File lib/virtus.rb, line 109 def self.coerce configuration.coerce end
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
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
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
Global configuration instance
@ return [Configuration]
@api private
# File lib/virtus.rb, line 206 def self.configuration @configuration ||= Configuration.new end
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
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
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
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
@api private
# File lib/virtus.rb, line 237 def self.warn(msg) Kernel.warn(msg) end
Private Class Methods
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
Extends base class or a module with virtus methods
@param [Object] object
@return [undefined]
@deprecated
@api private
# 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