Module: RgGen::Core::OutputBase::CodeGeneratable

Included in:
Feature
Defined in:
lib/rggen/core/output_base/code_generatable.rb

Defined Under Namespace

Modules: Extension

Constant Summary collapse

CODE_PHASES =
[
  :pre_code, :main_code, :post_code
].freeze
VARIABLE_NAMES =
CODE_PHASES
.to_h { |phase| [phase, :"@#{phase}_blocks"] }
.freeze
TEMPLATE_PROCESSOR =
->(path, location) { process_template(path, location) }

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



53
54
55
# File 'lib/rggen/core/output_base/code_generatable.rb', line 53

def self.included(klass)
  klass.extend(Extension)
end

Instance Method Details

#generate_code(code, phase, kind) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/rggen/core/output_base/code_generatable.rb', line 57

def generate_code(code, phase, kind)
  blocks = feature_hash_array_variable_get(VARIABLE_NAMES[phase])
  return unless blocks

  blocks[kind]&.each do |block_and_args|
    block = block_and_args[0]
    args = block_and_args[1..]
    if block.arity == (args&.size || 0)
      code << instance_exec(*args, &block)
    else
      instance_exec(code, *args, &block)
    end
  end
end