class SpaceshipMissionSimulator::Simulate

Public Instance Methods

call() click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 16
def call
  context.result = build_new_result

  simulate_events_from_last_one do |prev_event|
    add_path_event prev_event
    validate_added_event!
    sum_total_fuel_weight prev_event
  end
end

Private Instance Methods

add_path_event(prev_event) click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 35
def add_path_event(prev_event)
  path.events.prepend prev_event
end
build_new_result() click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 39
def build_new_result
  new_path = Path.new raw_data: pull_from_context(:raw_path), events: []
  SimulationResult.new path: new_path,
                       total_fuel_weight: 0,
                       initial_weight: pull_from_context(:initial_weight)
end
path() click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 46
def path
  context.result.path
end
pull_from_context(key) click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 50
def pull_from_context(key)
  context.send(key).tap { context.delete_field key }
end
simulate_event(raw_event_data, reserved_fuel_weight) click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 54
def simulate_event(raw_event_data, reserved_fuel_weight)
  SimulateEvent.call!(initial_weight: context.result.initial_weight,
                      raw_data: raw_event_data,
                      reserved_fuel_weight: reserved_fuel_weight).event
end
simulate_events_from_last_one() { |event| ... } click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 60
def simulate_events_from_last_one
  path.raw_data.reverse.inject(0) do |reserved_fuel_weight, raw_event_data|
    event = simulate_event raw_event_data, reserved_fuel_weight
    yield event
    reserved_fuel_weight + event.fuel_weight
  end
end
sum_total_fuel_weight(event) click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 68
def sum_total_fuel_weight(event)
  context.result.total_fuel_weight += event.fuel_weight
end
validate_added_event!() click to toggle source
# File lib/spaceship_mission_simulator/interactors/simulate.rb, line 28
def validate_added_event!
  path_ctx = { path: path }
  ValidatePathConsistency.call! path_ctx
  ValidateStartEvent.call! path_ctx if path.start_event?
  ValidateFinishEvent.call! path_ctx if path.finish_event?
end