Module: Legion::Extensions::Builder::Runners

Includes:
Base
Included in:
Core
Defined in:
lib/legion/extensions/builders/runners.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Base

#const_defined_two?, #define_constant_two, #define_get, #find_files, #require_files

Instance Attribute Details

#runnersObject (readonly)

Returns the value of attribute runners.



12
13
14
# File 'lib/legion/extensions/builders/runners.rb', line 12

def runners
  @runners
end

Instance Method Details

#build_runner_entry(runner_name, runner_class, loaded_runner, file) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/legion/extensions/builders/runners.rb', line 33

def build_runner_entry(runner_name, runner_class, loaded_runner, file)
  entry = {
    extension:       lex_class.to_s.downcase,
    extension_name:  extension_name,
    extension_class: lex_class,
    runner_name:     runner_name,
    runner_class:    runner_class,
    runner_module:   loaded_runner,
    runner_path:     file,
    class_methods:   {}
  }
  entry[:scheduled_tasks] = loaded_runner.scheduled_tasks if loaded_runner.method_defined?(:scheduled_tasks)
  entry[:trigger_words] = loaded_runner.trigger_words if loaded_runner.respond_to?(:trigger_words)
  entry[:desc] = settings[:runners][runner_name.to_sym][:desc] if settings.key?(:runners) && settings[:runners].key?(runner_name.to_sym)
  entry
end

#build_runner_listObject



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/legion/extensions/builders/runners.rb', line 21

def build_runner_list
  runner_files.each do |file|
    runner_name = file.split('/').last.sub('.rb', '')
    runner_class = "#{lex_class}::Runners::#{runner_name.split('_').collect(&:capitalize).join}"
    loaded_runner = Kernel.const_get(runner_class)
    loaded_runner.extend(Legion::Extensions::Definitions) unless loaded_runner.respond_to?(:definition)
    Legion::Logging.debug "[Runners] registered: #{runner_class}" if defined?(Legion::Logging)
    @runners[runner_name.to_sym] = build_runner_entry(runner_name, runner_class, loaded_runner, file)
    populate_runner_methods(runner_name, loaded_runner)
  end
end

#build_runnersObject



14
15
16
17
18
19
# File 'lib/legion/extensions/builders/runners.rb', line 14

def build_runners
  @runners = {}
  lex_class.const_set('Runners', Module.new) unless lex_class.const_defined?('Runners')
  require_files(runner_files)
  build_runner_list
end

#populate_runner_methods(runner_name, loaded_runner) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/legion/extensions/builders/runners.rb', line 50

def populate_runner_methods(runner_name, loaded_runner)
  loaded_runner.public_instance_methods(false).each do |runner_method|
    @runners[runner_name.to_sym][:class_methods][runner_method] = {
      args: loaded_runner.instance_method(runner_method).parameters
    }
  end
  loaded_runner.methods(false).each do |runner_method|
    next if %i[scheduled_tasks runner_description].include?(runner_method)

    @runners[runner_name.to_sym][:class_methods][runner_method] = {
      args: loaded_runner.method(runner_method).parameters
    }
  end
end

#runner_filesObject



71
72
73
# File 'lib/legion/extensions/builders/runners.rb', line 71

def runner_files
  @runner_files ||= find_files('runners')
end

#runner_modulesObject



65
66
67
68
69
# File 'lib/legion/extensions/builders/runners.rb', line 65

def runner_modules
  return [] unless defined?(@runners) && @runners.is_a?(Hash)

  @runners.values.filter_map { |r| r[:runner_module] }
end