class Virtus::Builder
Class to build a Virtus module with it's own config
This allows for individual Virtus modules to be included in classes and not impacted by the global Virtus config, which is implemented using Virtus.config.
@private
Attributes
config[R]
Return config
@return [config]
@api private
mod[R]
Return module
@return [Module]
@api private
Public Class Methods
call(options, &block)
click to toggle source
@api private
# File lib/virtus/builder.rb, line 27 def self.call(options, &block) new(Configuration.new(options, &block)).mod end
new(conf, mod = Module.new)
click to toggle source
Initializes a new Builder
@param [Configuration] config @param [Module] mod
@return [undefined]
@api private
# File lib/virtus/builder.rb, line 44 def initialize(conf, mod = Module.new) @config, @mod = conf, mod add_included_hook add_extended_hook end
pending()
click to toggle source
@api private
# File lib/virtus/builder.rb, line 32 def self.pending @pending ||= [] end
Public Instance Methods
extensions()
click to toggle source
@api private
# File lib/virtus/builder.rb, line 51 def extensions [Model::Core] end
options()
click to toggle source
@api private
# File lib/virtus/builder.rb, line 56 def options config.to_h end
Private Instance Methods
add_extended_hook()
click to toggle source
@api private
# File lib/virtus/builder.rb, line 79 def add_extended_hook with_hook_context do |context| mod.define_singleton_method :extended do |object| context.modules.each { |mod| object.extend(mod) } object.define_singleton_method(:attribute, context.attribute_method) end end end
add_included_hook()
click to toggle source
Adds the .included hook to the anonymous module which then defines the .attribute method to override the default.
@return [Module]
@api private
# File lib/virtus/builder.rb, line 68 def add_included_hook with_hook_context do |context| mod.define_singleton_method :included do |object| Builder.pending << object unless context.finalize? context.modules.each { |mod| object.send(:include, mod) } object.define_singleton_method(:attribute, context.attribute_method) end end end
with_hook_context() { |hook_context| ... }
click to toggle source
@api private
# File lib/virtus/builder.rb, line 89 def with_hook_context yield(HookContext.new(self, config)) end