Module: Philiprehberger::Scheduler::Persistence

Included in:
Philiprehberger::Scheduler
Defined in:
lib/philiprehberger/scheduler/persistence.rb

Instance Method Summary collapse

Instance Method Details

#load_state(path) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/philiprehberger/scheduler/persistence.rb', line 19

def load_state(path)
  return self unless File.exist?(path)

  data = JSON.parse(File.read(path))
  job_states = data.fetch('jobs', [])
  named_jobs = @mutex.synchronize { @jobs.select(&:name) }

  job_states.each do |js|
    job = named_jobs.find { |j| j.name == js['name'] }
    job&.restore_state(js)
  end
  self
end

#save_state(path) ⇒ Object



9
10
11
12
13
14
15
16
17
# File 'lib/philiprehberger/scheduler/persistence.rb', line 9

def save_state(path)
  state = {
    'version' => VERSION,
    'saved_at' => Time.now.iso8601,
    'jobs' => jobs.select(&:name).map(&:to_state)
  }
  File.write(path, JSON.pretty_generate(state))
  self
end