Class: Evilution::Session::Store

Inherits:
Object
  • Object
show all
Defined in:
lib/evilution/session/store.rb

Constant Summary collapse

DEFAULT_DIR =
".evilution/results"

Instance Method Summary collapse

Constructor Details

#initialize(results_dir: DEFAULT_DIR) ⇒ Store

Returns a new instance of Store.



13
14
15
# File 'lib/evilution/session/store.rb', line 13

def initialize(results_dir: DEFAULT_DIR)
  @results_dir = results_dir
end

Instance Method Details

#gc(older_than:) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/evilution/session/store.rb', line 44

def gc(older_than:)
  return [] unless Dir.exist?(@results_dir)

  deleted = []
  Dir.glob(File.join(@results_dir, "*.json")).each do |file|
    timestamp = parse_filename_timestamp(File.basename(file))
    next unless timestamp
    next unless timestamp < older_than

    File.delete(file)
    deleted << file
  end
  deleted
end

#listObject



28
29
30
31
32
33
34
35
36
# File 'lib/evilution/session/store.rb', line 28

def list
  return [] unless Dir.exist?(@results_dir)

  Dir
    .glob(File.join(@results_dir, "*.json"))
    .sort_by { |f| File.basename(f) }
    .reverse
    .filter_map { |f| build_list_entry(f) }
end

#load(path) ⇒ Object

Raises:



38
39
40
41
42
# File 'lib/evilution/session/store.rb', line 38

def load(path)
  raise Evilution::Error, "session file not found: #{path}" unless File.exist?(path)

  JSON.parse(File.read(path))
end

#save(summary) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/evilution/session/store.rb', line 17

def save(summary)
  FileUtils.mkdir_p(@results_dir)

  now = Time.now
  data = build_session_data(summary, now)
  filename = "#{format_timestamp(now)}-#{SecureRandom.hex(4)}.json"
  path = File.join(@results_dir, filename)
  atomic_write(path, JSON.pretty_generate(data))
  path
end