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