class Fabrication::Schematic::Definition
Constants
- GENERATORS
Attributes
attributes[W]
block[RW]
callbacks[W]
name[RW]
options[RW]
Public Class Methods
new(name, options = {}, &block)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 14 def initialize(name, options = {}, &block) self.name = name self.options = options self.block = block end
Public Instance Methods
append_or_update_attribute(attribute_name, value, params = {}, &block)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 28 def append_or_update_attribute(attribute_name, value, params = {}, &block) attribute = Fabrication::Schematic::Attribute.new(klass, attribute_name, value, params, &block) index = attributes.index { |a| a.name == attribute.name } if index attribute.transient! if attributes[index].transient? attributes[index] = attribute else attributes << attribute end end
attribute(name)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 24 def attribute(name) attributes.detect { |a| a.name == name } end
attributes()
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 42 def attributes load_body @attributes ||= [] end
build(overrides = {}, &block)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 60 def build(overrides = {}, &block) Fabrication.manager.prevent_recursion! if Fabrication.manager.to_params_stack.any? to_params(overrides, &block) else begin Fabrication.manager.build_stack << name merge(overrides, &block).instance_eval do generator.new(klass).build(sorted_attributes, callbacks) end ensure Fabrication.manager.build_stack.pop end end end
callbacks()
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 47 def callbacks load_body @callbacks ||= {} end
fabricate(overrides = {}, &block)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 76 def fabricate(overrides = {}, &block) Fabrication.manager.prevent_recursion! if Fabrication.manager.build_stack.any? build(overrides, &block) elsif Fabrication.manager.to_params_stack.any? to_params(overrides, &block) else begin Fabrication.manager.create_stack << name merge(overrides, &block).instance_eval do generator.new(klass).create(sorted_attributes, callbacks) end ensure Fabrication.manager.create_stack.pop end end end
generate_value(name, params)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 119 def generate_value(name, params) if params[:count] || params[:rand] name = Fabrication::Support.singularize(name.to_s) proc { Fabricate.build(params[:fabricator] || name) } else proc { Fabricate(params[:fabricator] || name) } end end
generator()
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 52 def generator @generator ||= Fabrication::Config.generator_for(GENERATORS, klass) end
initialize_copy(original)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 110 def initialize_copy(original) self.callbacks = {} original.callbacks.each do |type, callbacks| self.callbacks[type] = callbacks.clone end self.attributes = original.attributes.clone end
klass()
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 137 def klass @klass ||= Fabrication::Support.class_for( options[:class_name] || parent&.klass || options[:from] || name ) end
merge(overrides = {}, &block)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 128 def merge(overrides = {}, &block) clone.tap do |definition| definition.process_block(&block) overrides.each do |name, value| definition.append_or_update_attribute(name.to_sym, value) end end end
process_block(&block)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 20 def process_block(&block) Fabrication::Schematic::Evaluator.new.process(self, &block) if block end
sorted_attributes()
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 56 def sorted_attributes attributes.select(&:value_static?) + attributes.select(&:value_proc?) end
to_attributes(overrides = {}, &block)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 104 def to_attributes(overrides = {}, &block) merge(overrides, &block).instance_eval do generator.new(klass).to_hash(sorted_attributes, callbacks) end end
to_params(overrides = {}, &block)
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 94 def to_params(overrides = {}, &block) Fabrication.manager.prevent_recursion! Fabrication.manager.to_params_stack << name merge(overrides, &block).instance_eval do generator.new(klass).to_params(sorted_attributes) end ensure Fabrication.manager.to_params_stack.pop end
Protected Instance Methods
load_body()
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 152 def load_body return if loaded? @loaded = true if parent merge_result = parent.merge(&block) @attributes = merge_result.attributes @callbacks = merge_result.callbacks else process_block(&block) end end
loaded?()
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 148 def loaded? !!(@loaded ||= nil) end
parent()
click to toggle source
# File lib/fabrication/schematic/definition.rb, line 166 def parent @parent ||= Fabrication.manager[options[:from].to_s] if options[:from] end