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