module JamesBond::Core::Mission

Constants

MissionConfig

Attributes

core_mission_config[RW]
core_mission_options[RW]
option_rules[R]

Public Class Methods

new(params={}) click to toggle source
# File lib/james_bond/core/mission.rb, line 13
def initialize(params={})
  @core_mission_config  = MissionConfig.new
  @core_mission_options = {}

  build(@core_mission_config, params)
  check_variables_definitions
  check_main_command_methods
end

Public Instance Methods

arguments_parser() { |option_rules| ... } click to toggle source
# File lib/james_bond/core/mission.rb, line 35
def arguments_parser(&block)
  require "slop"
  @option_rules = Slop::Options.new
  yield(@option_rules)
end
build(config, params) click to toggle source
# File lib/james_bond/core/mission.rb, line 22
def build(config, params)
  raise(NotImplementedError, "The method \"build\" must be implemented for the #{self.class} class")
end
run_command(command: , mission_pool:) click to toggle source
# File lib/james_bond/core/mission.rb, line 26
def run_command(command: , mission_pool:)
  @core_mission_options = command.options = parse_arguments(command) if @option_rules
  command.options = parse_arguments(command) if @option_rules
  self.send(
    build_command_method_name(command.main_command),
    { command: command, mission_pool: mission_pool }
  )
end

Private Instance Methods

build_command_method_name(main_command) click to toggle source
# File lib/james_bond/core/mission.rb, line 48
def build_command_method_name(main_command)
  "run_#{main_command}_command"
end
check_main_command_methods() click to toggle source
# File lib/james_bond/core/mission.rb, line 61
def check_main_command_methods
  @core_mission_config.main_commands.each do |main_command|
    expected_command_method = build_command_method_name(main_command)
    raise(NotImplementedError,
          "The method \"#{expected_command_method}\" must be implemented for the #{self.class}") if !self.respond_to?(expected_command_method)
  end
end
check_variables_definitions() click to toggle source
# File lib/james_bond/core/mission.rb, line 52
def check_variables_definitions
  raise(UndefinedVariableError,
        "The mission name must be defined in the build method. " \
      + "Try calling config.name = \"MissionName\" inside the build method") if !@core_mission_config.name
  raise(UndefinedVariableError,
        "The main commands must be defined in the build method. " \
      + "Try calling config.main_commands = [\"cmd\", \"dmc\"] inside the build method") if !@core_mission_config.main_commands
end
parse_arguments(command) click to toggle source
# File lib/james_bond/core/mission.rb, line 43
def parse_arguments(command)
  arguments_array = command.raw_arguments
  Slop::Parser.new(@option_rules).parse(arguments_array)
end