Class: Prdigest::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/prdigest/result.rb

Constant Summary collapse

SCHEMA =
"prdigest-result"
SCHEMA_VERSION =
1
REQUIRED_FIELDS =
%i[
  status mode requested_days settled_days skipped_days failed_date remaining_days error
].freeze
EXIT_CODES =
{
  "config" => 2, "cli" => 2, "refusal" => 2,
  "github" => 3,
  "telegram" => 4, "telegram_refused" => 4, "telegram_permanent" => 4,
  "telegram_ambiguous" => 4, "delivery_checkpoint" => 4,
  "delivery_checkpoint_permanent" => 4,
  "state" => 5,
  "provider" => 7, "provider_ambiguous" => 7
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status:, mode:, requested_days: [], settled_days: [], skipped_days: [], failed_date: nil, remaining_days: [], error: nil, chunks: [], delivery: nil) ⇒ Result

Returns a new instance of Result.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/prdigest/result.rb', line 22

def initialize(status:, mode:, requested_days: [], settled_days: [], skipped_days: [],
               failed_date: nil, remaining_days: [], error: nil, chunks: [], delivery: nil)
  @status = status.to_s.freeze
  @mode = mode.to_s.freeze
  @requested_days = Array(requested_days).freeze
  @settled_days = Array(settled_days).freeze
  @skipped_days = Array(skipped_days).freeze
  @failed_date = failed_date
  @remaining_days = Array(remaining_days).freeze
  @error = error&.transform_keys(&:to_sym)&.freeze
  @chunks = Array(chunks).map(&:to_s).freeze
  @delivery = delivery&.transform_keys(&:to_sym)&.freeze
  freeze
end

Class Method Details

.failure(mode:, error_kind:, message:, requested_days: [], settled_days: [], skipped_days: [], failed_date: nil, remaining_days: [], chunks: [], delivery: nil) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/prdigest/result.rb', line 37

def self.failure(mode:, error_kind:, message:, requested_days: [], settled_days: [], skipped_days: [],
                 failed_date: nil, remaining_days: [], chunks: [], delivery: nil)
  progress = !settled_days.empty? || !skipped_days.empty?
  new(
    status: progress ? "partial_failure" : "failure",
    mode: mode,
    requested_days: requested_days,
    settled_days: settled_days,
    skipped_days: skipped_days,
    failed_date: failed_date,
    remaining_days: remaining_days,
    error: { kind: error_kind.to_s, message: message.to_s },
    chunks: chunks,
    delivery: delivery
  )
end

Instance Method Details

#exit_codeObject



54
55
56
57
58
# File 'lib/prdigest/result.rb', line 54

def exit_code
  return 0 if %w[success dry_run].include?(status)
  return 6 if status == "partial_failure"
  EXIT_CODES.fetch(error && error[:kind], 1)
end

#to_hObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/prdigest/result.rb', line 60

def to_h
  {
    schema: SCHEMA,
    schema_version: SCHEMA_VERSION,
    status: status,
    mode: mode,
    requested_days: serialize_dates(requested_days),
    settled_days: serialize_dates(settled_days),
    skipped_days: serialize_dates(skipped_days),
    failed_date: failed_date&.to_s,
    remaining_days: serialize_dates(remaining_days),
    error: error,
    chunks: chunks,
    delivery: delivery
  }
end