class Tengine::Job::Template::Generator
Constants
- BASE_IGNORED_FIELD_NAMES
- CLASS_MAP
- EXPANSION_IGNORED_FIELD_NAMES
Public Instance Methods
execute(template, options = {})
click to toggle source
# File lib/tengine/job/template/generator.rb, line 5 def execute(template, options = {}) @inherited_attrs = {} process(template, options) end
expansion?()
click to toggle source
# File lib/tengine/job/template/generator.rb, line 19 def expansion? @current.is_a?(Tengine::Job::Template::Expansion) end
expansion_root()
click to toggle source
# File lib/tengine/job/template/generator.rb, line 23 def expansion_root cond = {:dsl_version => @current.root.dsl_version, :name => @current.name} Tengine::Job::Template::RootJobnet.where(cond).first end
generate(options) { |result| ... }
click to toggle source
# File lib/tengine/job/template/generator.rb, line 87 def generate(options) attrs = generating_attrs.update(child_index: options[:child_index], parent: options[:parent]) @inherited_attrs.each{|key, value| attrs[key] ||= value } klass_name = CLASS_MAP[@current.class.name] result = klass_name.constantize.new(attrs) result.save! src_to_generated = {} generating_children.each.with_index do |child, index| generated = process(child, child_index: index + 1, parent: result) src_to_generated[child.id] = generated.id result.children << generated end generating_edges.each do |edge| generated = Tengine::Job::Runtime::Edge.new generated.origin_id = src_to_generated[edge.origin_id] generated.destination_id = src_to_generated[edge.destination_id] result.edges << generated end yield(result) if block_given? # 派生クラスでsave!の前に処理を入れるためのyield result.save! result end
generating_attrs()
click to toggle source
# File lib/tengine/job/template/generator.rb, line 33 def generating_attrs field_names = @current.class.fields.keys - ignored_fields attrs = field_names.each_with_object({}){|name, d| d[name] = @current.send(name) } if expansion? attrs[:was_expansion] = true if (t = expansion_root) attrs[:template_id] = t.id end else if @current.is_a?(Tengine::Job::Template::Jobnet) attrs[:template_id] = @current.id end end attrs end
generating_children()
click to toggle source
# File lib/tengine/job/template/generator.rb, line 49 def generating_children expansion? ? expansion_root.children : @current.children end
generating_edges()
click to toggle source
# File lib/tengine/job/template/generator.rb, line 54 def generating_edges expansion? ? expansion_root.edges : @current.respond_to?(:edges) ? @current.edges : [] end
ignored_fields()
click to toggle source
# File lib/tengine/job/template/generator.rb, line 28 def ignored_fields expansion? ? EXPANSION_IGNORED_FIELD_NAMES : BASE_IGNORED_FIELD_NAMES end
merge_inherited_attrs()
click to toggle source
# File lib/tengine/job/template/generator.rb, line 71 def merge_inherited_attrs source = @current.nil? ? nil : expansion? ? expansion_root : @current return {} if source.nil? result = @inherited_attrs.dup { server_name: source.actual_server_name, credential_name: source.actual_credential_name, killing_signals: source.actual_killing_signals, killing_signal_interval: source.actual_killing_signal_interval, }.each do |key, value| next if value.blank? result[key] = value # sourceからの値が有効なら上書きする end result end
process(template, options)
click to toggle source
# File lib/tengine/job/template/generator.rb, line 60 def process(template, options) @inherited_attrs, inherited_attrs_backup = merge_inherited_attrs, @inherited_attrs @current, current_backup = template, @current begin generate(options) ensure @current = current_backup @inherited_attrs = inherited_attrs_backup end end