Class: Dogfood::Scheduler

Inherits:
Object
  • Object
show all
Defined in:
lib/dogfood/scheduler.rb

Constant Summary collapse

DEFAULT_DELAYS =
{
  parts_arrival:    { same_day: 0.40, next_day: 0.40, two_to_three_days: 0.15, next_week: 0.05 },
  customer_approval: { same_day: 0.60, next_day: 0.25, two_to_three_days: 0.10, next_week: 0.05 },
  payment:          { same_day: 0.70, next_week: 0.20, net_30: 0.10 },
  core_return:      { next_day: 0.70, two_to_three_days: 0.30 },
  labor_completion: { same_day: 0.85, next_day: 0.15 }
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(rng, delays: {}) ⇒ Scheduler

Returns a new instance of Scheduler.



13
14
15
16
# File 'lib/dogfood/scheduler.rb', line 13

def initialize(rng, delays: {})
  @rng = rng
  @delays = DEFAULT_DELAYS.merge(delays)
end

Instance Method Details

#schedule(event) ⇒ Object



18
19
20
21
22
# File 'lib/dogfood/scheduler.rb', line 18

def schedule(event)
  distribution = @delays.fetch(event) { raise ArgumentError, "Unknown event: #{event}" }
  delay_days = resolve_delay(distribution)
  { delay_days: delay_days, event: event }
end