Class: Textus::Action::Pulse

Inherits:
Base
  • Object
show all
Defined in:
lib/textus/action/pulse.rb

Class Method Summary collapse

Methods inherited from Base

inherited, proposal_from

Methods included from Contract::DSL

#arg, #cli, #cli_stdin, #contract, #contract?, #summary, #surfaces, #verb, #view

Class Method Details

.call(container:, call:, since: nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/textus/action/pulse.rb', line 14

def self.call(container:, call:, since: nil, **)
  manifest = container.manifest
  audit_log = container.audit_log
  root = container.root
  since ||= Textus::Store::Cursor.new(root: root, role: call.role).read

  changed = Value::Result.unwrap(Textus::Action::Audit.call(container: container, seq_since: since))

  result = {
    "cursor" => audit_log.latest_seq,
    "changed" => changed,
    "pending_review" => review_keys(manifest, container),
    "contract_etag" => Textus::Value::Etag.for_contract(root),
    "index_etag" => index_etag(container),
  }

  Textus::Store::Cursor.new(root: root, role: call.role).write(result["cursor"])
  Success(result)
end

.index_etag(container) ⇒ Object



41
42
43
44
45
46
# File 'lib/textus/action/pulse.rb', line 41

def self.index_etag(container)
  path = container.manifest.resolver.resolve("artifacts.system.index").path
  File.exist?(path) ? container.file_store.etag(path) : nil
rescue Textus::Error
  nil
end

.review_keys(manifest, container) ⇒ Object



34
35
36
37
38
39
# File 'lib/textus/action/pulse.rb', line 34

def self.review_keys(manifest, container)
  queue = manifest.policy.queue_lane
  return [] unless queue

  Textus::Action::List.leaf_keys(container: container, lane: queue)
end