Class: Tengine::Job::Template::Generator
- Inherits:
-
Object
- Object
- Tengine::Job::Template::Generator
- Defined in:
- lib/tengine/job/template/generator.rb
Constant Summary collapse
- CLASS_MAP =
%w[RootJobnet Jobnet Start End Fork Join SshJob].each_with_object({}){|t, d| c = "Tengine::Job::Template::#{t}" d[c] = c.sub(/Template/, 'Runtime') }.update({"Tengine::Job::Template::Expansion" => "Tengine::Job::Runtime::Jobnet"})
- BASE_IGNORED_FIELD_NAMES =
["_type", "_id"].freeze
- EXPANSION_IGNORED_FIELD_NAMES =
(BASE_IGNORED_FIELD_NAMES + %w[dsl_version jobnet_type_cd version updated_at created_at children edges]).freeze
Instance Method Summary collapse
- #execute(template, options = {}) ⇒ Object
- #expansion? ⇒ Boolean
- #expansion_root ⇒ Object
- #generate(options) {|result| ... } ⇒ Object
- #generating_attrs ⇒ Object
- #generating_children ⇒ Object
- #generating_edges ⇒ Object
- #ignored_fields ⇒ Object
- #merge_inherited_attrs ⇒ Object
- #process(template, options) ⇒ Object
Instance Method Details
#execute(template, options = {}) ⇒ Object
6 7 8 9 |
# File 'lib/tengine/job/template/generator.rb', line 6 def execute(template, = {}) @inherited_attrs = {} process(template, ) end |
#expansion? ⇒ Boolean
20 21 22 |
# File 'lib/tengine/job/template/generator.rb', line 20 def expansion? @current.is_a?(Tengine::Job::Template::Expansion) end |
#expansion_root ⇒ Object
24 25 26 27 |
# File 'lib/tengine/job/template/generator.rb', line 24 def expansion_root cond = {:dsl_version => @current.root.dsl_version, :name => @current.name} Tengine::Job::Template::RootJobnet.where(cond).first end |
#generate(options) {|result| ... } ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/tengine/job/template/generator.rb', line 88 def generate() attrs = .update(child_index: [:child_index], parent: [: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 = {} .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 .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 ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/tengine/job/template/generator.rb', line 34 def 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 ⇒ Object
50 51 52 53 |
# File 'lib/tengine/job/template/generator.rb', line 50 def expansion? ? expansion_root.children : @current.children end |
#generating_edges ⇒ Object
55 56 57 58 59 |
# File 'lib/tengine/job/template/generator.rb', line 55 def expansion? ? expansion_root.edges : @current.respond_to?(:edges) ? @current.edges : [] end |
#ignored_fields ⇒ Object
29 30 31 32 |
# File 'lib/tengine/job/template/generator.rb', line 29 def ignored_fields expansion? ? EXPANSION_IGNORED_FIELD_NAMES : BASE_IGNORED_FIELD_NAMES end |
#merge_inherited_attrs ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/tengine/job/template/generator.rb', line 72 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) ⇒ Object
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/tengine/job/template/generator.rb', line 61 def process(template, ) @inherited_attrs, inherited_attrs_backup = merge_inherited_attrs, @inherited_attrs @current, current_backup = template, @current begin generate() ensure @current = current_backup @inherited_attrs = inherited_attrs_backup end end |