Class: Igniter::Store::TBackendAdapterDescriptor

Inherits:
Object
  • Object
show all
Defined in:
lib/igniter/store/tbackend_adapter_descriptor.rb

Constant Summary collapse

KIND =
"ledger_tbackend_adapter_descriptor"
DIAGNOSTICS_KIND =
"ledger_tbackend_adapter_descriptor_diagnostics"
ADAPTER_KIND =
"ledger_open_protocol"
ADAPTER_VERSION =
"0.1.0"
CONTRACT_VERSION =
"tbackend.v0"
PROTOCOL =
"igniter_store"
EVIDENCE_MODE =
"receipt_required"
DEFAULT_ADAPTER_REF =
"adapter:ledger-open-protocol/package-descriptor-v0"
READ_OPS =
%w[read query fact_ref].freeze
APPEND_OPS =
%w[write write_fact append].freeze
REPLAY_OPS =
%w[replay sync_hub_profile].freeze
SNAPSHOT_OPS =
%w[metadata_snapshot descriptor_snapshot sync_hub_profile].freeze
TBACKEND_OPS =
{
  "read" => READ_OPS,
  "append" => APPEND_OPS,
  "replay" => REPLAY_OPS,
  "snapshot" => SNAPSHOT_OPS,
  "compact" => %w[compact],
  "subscribe" => %w[subscribe]
}.freeze
CURSOR_POLICY =
{
  ordered: "forward",
  cursor_kinds: ["timestamp"],
  truncation_reported: true,
  tie_breaker: "timestamp_then_fact_id_required"
}.freeze
NON_AUTHORIZATION =
{
  runtime_binding: false,
  ledger_reads: false,
  ledger_writes: false,
  ledger_append: false,
  ledger_replay: false,
  ledger_compact: false,
  ledger_subscribe: false,
  migration_execution: false
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(metadata_snapshot:, descriptor_snapshot:, schema_fingerprint:, adapter_ref: nil, ledger_protocol_ops: nil) ⇒ TBackendAdapterDescriptor

Returns a new instance of TBackendAdapterDescriptor.



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 64

def initialize(metadata_snapshot:, descriptor_snapshot:, schema_fingerprint:, adapter_ref: nil,
               ledger_protocol_ops: nil)
  @metadata_snapshot = normalize_hash(, :metadata_snapshot)
  @descriptor_snapshot = normalize_hash(descriptor_snapshot, :descriptor_snapshot)
  @payload = build_payload(
    schema_fingerprint: require_value(:schema_fingerprint, schema_fingerprint),
    adapter_ref: adapter_ref || DEFAULT_ADAPTER_REF,
    ledger_protocol_ops: normalize_ops(
      ledger_protocol_ops || (:ledger_protocol_ops) || (:protocol_ops)
    )
  )
  freeze
end

Instance Attribute Details

#descriptor_snapshotObject (readonly)

Returns the value of attribute descriptor_snapshot.



49
50
51
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 49

def descriptor_snapshot
  @descriptor_snapshot
end

#metadata_snapshotObject (readonly)

Returns the value of attribute metadata_snapshot.



49
50
51
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 49

def 
  @metadata_snapshot
end

#payloadObject (readonly)

Returns the value of attribute payload.



49
50
51
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 49

def payload
  @payload
end

Class Method Details

.build(metadata_snapshot:, descriptor_snapshot:, schema_fingerprint:, adapter_ref: nil, ledger_protocol_ops: nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 53

def self.build(metadata_snapshot:, descriptor_snapshot:, schema_fingerprint:, adapter_ref: nil,
               ledger_protocol_ops: nil)
  new(
    metadata_snapshot: ,
    descriptor_snapshot: descriptor_snapshot,
    schema_fingerprint: schema_fingerprint,
    adapter_ref: adapter_ref,
    ledger_protocol_ops: ledger_protocol_ops
  )
end

.canonical_hash(value) ⇒ Object



283
284
285
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 283

def canonical_hash(value)
  "sha256:#{Digest::SHA256.hexdigest(JSON.generate(canonical_value(value)))}"
end

Instance Method Details

#capabilitiesObject



98
99
100
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 98

def capabilities
  payload.fetch(:capabilities)
end

#cursor_policyObject



106
107
108
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 106

def cursor_policy
  payload.fetch(:cursor_policy)
end

#descriptor_hashObject



78
79
80
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 78

def descriptor_hash
  payload.fetch(:descriptor_hash)
end

#descriptor_registry_hashObject



82
83
84
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 82

def descriptor_registry_hash
  payload.fetch(:descriptor_registry_hash)
end

#diagnostics(requirement = {}) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 110

def diagnostics(requirement = {})
  requirement = normalize_hash(requirement, :requirement)
  missing_ops = missing(:required_ops, :supported_tbackend_ops, requirement)
  missing_hook_methods = missing(:required_hook_methods, :hook_methods, requirement)
  missing_capabilities = missing(:required_capabilities, :capabilities, requirement)
  missing_axes = missing(:history_axes, :history_axes, requirement)
  schema_fingerprint_match = schema_fingerprint_match?(requirement)
  blocked = missing_ops.any? ||
            missing_hook_methods.any? ||
            missing_capabilities.any? ||
            missing_axes.any? ||
            !schema_fingerprint_match

  deep_freeze(
    kind: DIAGNOSTICS_KIND,
    status: blocked ? "blocked" : "ok",
    missing_ops: missing_ops,
    missing_hook_methods: missing_hook_methods,
    missing_capabilities: missing_capabilities,
    missing_axes: missing_axes,
    schema_fingerprint_match: schema_fingerprint_match,
    descriptor_hash: descriptor_hash,
    descriptor_registry_hash: descriptor_registry_hash
  )
end

#history_axesObject



102
103
104
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 102

def history_axes
  payload.fetch(:history_axes)
end

#hook_methodsObject



94
95
96
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 94

def hook_methods
  payload.fetch(:hook_methods)
end

#ledger_protocol_opsObject



86
87
88
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 86

def ledger_protocol_ops
  payload.fetch(:ledger_protocol_ops)
end

#supported_tbackend_opsObject



90
91
92
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 90

def supported_tbackend_ops
  payload.fetch(:supported_tbackend_ops)
end

#to_hObject



136
137
138
# File 'lib/igniter/store/tbackend_adapter_descriptor.rb', line 136

def to_h
  payload
end