Class: Textus::Contract::Resources::Cursor
- Inherits:
-
Object
- Object
- Textus::Contract::Resources::Cursor
- Defined in:
- lib/textus/contract/resources/cursor.rb
Overview
Reads the persisted file cursor as the ‘since` default when the caller did not supply one, runs pulse, then persists the returned cursor. Replaces CLI::Verb::Pulse’s hand-coded CursorStore read/write (ADR 0068).
A session-bearing surface (MCP) carries its own cursor via the contract’s ‘session_default: :cursor`, so this defers entirely when a session is present — it is the sessionless CLI/Ruby surfaces that need the file.
Instance Method Summary collapse
Instance Method Details
#wrap(scope:, inputs:, session:) ⇒ Object
12 13 14 15 16 17 18 19 20 |
# File 'lib/textus/contract/resources/cursor.rb', line 12 def wrap(scope:, inputs:, session:) return yield(inputs) if session store = Textus::CursorStore.new(root: scope.container.root, role: scope.role) effective = inputs.key?(:since) ? inputs : inputs.merge(since: store.read) result = yield(effective) store.write(result["cursor"]) if result.is_a?(Hash) && result["cursor"] result end |