Class: Textus::Protocol::StoreEngine
- Inherits:
-
Object
- Object
- Textus::Protocol::StoreEngine
- Defined in:
- lib/textus/protocol/store_engine.rb,
lib/textus/protocol/store_engine/put.rb,
lib/textus/protocol/store_engine/move.rb,
lib/textus/protocol/store_engine/delete.rb,
lib/textus/protocol/store_engine/pipeline.rb
Defined Under Namespace
Modules: Delete, Move, Pipeline, Put
Instance Method Summary collapse
- #delete(key:, call:, if_etag: nil) ⇒ Object
- #exists?(key:) ⇒ Boolean
-
#initialize(file_system:, manifest:, layout:, store:, event_emitter: nil, schemas: nil) ⇒ StoreEngine
constructor
A new instance of StoreEngine.
- #list(prefix: nil, lane: nil, q: nil, schema: nil) ⇒ Object
- #mentry_for(key:) ⇒ Object
- #move(from_key:, to_key:, call:, if_etag: nil, dry_run: false) ⇒ Object
- #put(key:, meta:, body:, content:, call:, if_etag: nil, format: nil) ⇒ Object
- #read(key:) ⇒ Object
- #resolve(key:) ⇒ Object
Constructor Details
#initialize(file_system:, manifest:, layout:, store:, event_emitter: nil, schemas: nil) ⇒ StoreEngine
Returns a new instance of StoreEngine.
4 5 6 7 8 9 10 11 |
# File 'lib/textus/protocol/store_engine.rb', line 4 def initialize(file_system:, manifest:, layout:, store:, event_emitter: nil, schemas: nil) @file_system = file_system @manifest = manifest @layout = layout @store = store @event_emitter = event_emitter @schemas = schemas end |
Instance Method Details
#delete(key:, call:, if_etag: nil) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/textus/protocol/store_engine.rb', line 60 def delete(key:, call:, if_etag: nil) deps = Pipeline::DeleteDeps.new( file_system: @file_system, manifest: @manifest, store: @store, layout: @layout, event_emitter: @event_emitter, call: ) Delete.call(key, if_etag:, deps:) end |
#exists?(key:) ⇒ Boolean
27 28 29 30 |
# File 'lib/textus/protocol/store_engine.rb', line 27 def exists?(key:) path = resolve(key:).path path && @file_system.exists?(path) end |
#list(prefix: nil, lane: nil, q: nil, schema: nil) ⇒ Object
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/textus/protocol/store_engine.rb', line 32 def list(prefix: nil, lane: nil, q: nil, schema: nil) if @store.entry_index && (q || schema) rows = @store.entry_index.search(query: q, schema:, lane:, prefix:) (rows || []).map { |r| { "key" => r["key"], "lane" => r["lane"] } } else rows = @manifest.resolver.enumerate(prefix:) rows = rows.select { |r| r[:manifest_entry].lane == lane } if lane rows.map { |r| { "key" => r[:key], "lane" => r[:manifest_entry].lane } } end end |
#mentry_for(key:) ⇒ Object
44 |
# File 'lib/textus/protocol/store_engine.rb', line 44 def mentry_for(key:)= resolve(key:).entry |
#move(from_key:, to_key:, call:, if_etag: nil, dry_run: false) ⇒ Object
68 69 70 71 72 73 74 |
# File 'lib/textus/protocol/store_engine.rb', line 68 def move(from_key:, to_key:, call:, if_etag: nil, dry_run: false) deps = Pipeline::MoveDeps.new( file_system: @file_system, manifest: @manifest, store: @store, layout: @layout, event_emitter: @event_emitter, reader: self, call: ) Move.call(from_key:, to_key:, if_etag:, dry_run:, deps:) end |
#put(key:, meta:, body:, content:, call:, if_etag: nil, format: nil) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/textus/protocol/store_engine.rb', line 46 def put(key:, meta:, body:, content:, call:, if_etag: nil, format: nil) result = resolve(key:) payload = Value::Payload.new(meta: || {}, body:, content:) deps = build_deps(reader: nil, call:) if format fmt_mod = Textus::Protocol::Format.for(format) path = result.path.sub(/\.[^.]+$/, "") + fmt_mod.nested_ext(result.remaining.last) Put.call(key, mentry: result.entry, path:, payload:, if_etag:, deps:, fmt: format) else Put.call(key, mentry: result.entry, path: result.path, payload:, if_etag:, deps:) end end |
#read(key:) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/textus/protocol/store_engine.rb', line 13 def read(key:) result = resolve(key:) path = result.path return nil unless path && @file_system.exists?(path) raw = @file_system.read(path) parsed = Format.for(result.entry.format).parse(raw, path:) Envelope.build(key:, mentry: result.entry, path:, meta: parsed["_meta"] || {}, body: parsed["body"] || "", content: parsed["content"], etag: Value::Etag.for_file(path)) end |
#resolve(key:) ⇒ Object
43 |
# File 'lib/textus/protocol/store_engine.rb', line 43 def resolve(key:) = @manifest.resolver.resolve(key) |