Class: Ast::Merge::ProviderResult

Inherits:
Object
  • Object
show all
Defined in:
lib/ast/merge/provider_result.rb,
sig/ast/merge.rbs

Overview

Constructs provider result envelopes and substrate-level failures.

Constant Summary collapse

DEFAULT_ENVELOPE =
{
  provider: {}.freeze,
  profile: {}.freeze,
  diagnostics: [].freeze,
  changes: [].freeze,
  conflicts: [].freeze,
  fallbacks: [].freeze,
  render_report: {}.freeze,
  verification: {}.freeze
}.freeze

Class Method Summary collapse

Class Method Details

.build(operation:, success:, envelope: {}, **payload) ⇒ provider_result

Parameters:

  • operation: (provider_operation)
  • success: (Boolean)
  • envelope: (Hash[untyped, untyped]) (defaults to: {})
  • payload (Object)

Returns:

  • (provider_result)


19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ast/merge/provider_result.rb', line 19

def build(operation:, success:, envelope: {}, **payload)
  reserved_payload_fields = ProviderContract::REQUIRED_RESULT_FIELDS & payload.keys
  unless reserved_payload_fields.empty?
    raise ArgumentError, "Payload contains reserved fields: #{reserved_payload_fields.join(', ')}"
  end

  payload.merge(DEFAULT_ENVELOPE).merge(envelope).merge(
    schema: ProviderContract::RESULT_SCHEMA,
    operation: ProviderContract.normalize_operation(operation),
    ok: success
  )
end

.invalid_request(operation:, message:) ⇒ provider_result

Parameters:

  • operation: (provider_operation)
  • message: (String)

Returns:

  • (provider_result)


32
33
34
# File 'lib/ast/merge/provider_result.rb', line 32

def invalid_request(operation:, message:)
  failure(operation: operation, category: :invalid_request, message: message)
end

.unsupported(operation:, message:, selectors: {}) ⇒ provider_result

Parameters:

  • operation: (provider_operation)
  • message: (String)
  • selectors: (Hash[untyped, untyped]) (defaults to: {})

Returns:

  • (provider_result)


36
37
38
39
40
41
42
43
# File 'lib/ast/merge/provider_result.rb', line 36

def unsupported(operation:, message:, selectors: {})
  failure(
    operation: operation,
    category: :unsupported_capability,
    message: message,
    profile: selectors
  )
end