Class: Ask::State::Adapter
- Inherits:
-
Object
- Object
- Ask::State::Adapter
- Defined in:
- lib/ask/state.rb
Overview
Abstract base class for state backends. Subclasses must implement all methods.
Direct Known Subclasses
Class Method Summary collapse
-
.glob_to_like(pattern) ⇒ String
Convert a glob pattern (*, ?) to a SQL LIKE pattern.
-
.glob_to_regex(pattern) ⇒ Regexp
Convert a glob pattern (*, ?) to a Regexp.
Instance Method Summary collapse
-
#acquire_lock(key, ttl: 10) ⇒ Lock?
Acquire a lock for a key.
-
#clear ⇒ Object
Remove all keys from the store (key-value only by default).
-
#close ⇒ Object
Optional: called when the adapter is no longer needed.
- #delete(key) ⇒ Object
-
#dequeue(queue) ⇒ QueueEntry?
Pop the next item from a named queue.
-
#enqueue(queue, value) ⇒ QueueEntry
Push an item onto a named queue.
-
#exists?(key) ⇒ Boolean
Check if a key exists and has not expired.
-
#get(key) ⇒ Object?
The stored value, or nil if not found.
-
#keys(pattern: nil) ⇒ Array<String>
Return all non-expired keys, optionally filtered by a glob pattern.
-
#list_append(key, value, max_length: nil) ⇒ Object
Append a value to an ordered list.
-
#list_range(key, start = 0, stop = -1)) ⇒ Array<Object>
Return a slice of the list.
-
#list_remove(key, value) ⇒ Integer
Remove all occurrences of a value from a list.
-
#queue_depth(queue) ⇒ Integer
The number of items in the queue.
-
#release_lock(key, lock) ⇒ Boolean
Release a lock.
- #set(key, value, ttl: nil) ⇒ Object
-
#set_if_not_exists(key, value, ttl: nil) ⇒ Boolean
Atomically set a value only if the key does not already exist.
Class Method Details
.glob_to_like(pattern) ⇒ String
Convert a glob pattern (*, ?) to a SQL LIKE pattern.
177 178 179 |
# File 'lib/ask/state.rb', line 177 def self.glob_to_like(pattern) pattern.gsub("*", "%").gsub("?", "_") end |
.glob_to_regex(pattern) ⇒ Regexp
Convert a glob pattern (*, ?) to a Regexp.
184 185 186 187 |
# File 'lib/ask/state.rb', line 184 def self.glob_to_regex(pattern) escaped = Regexp.escape(pattern) Regexp.new("\\A#{escaped.gsub("\\*", ".*").gsub("\\?", ".")}\\z") end |
Instance Method Details
#acquire_lock(key, ttl: 10) ⇒ Lock?
Acquire a lock for a key. Returns nil if the lock is held by another owner.
103 104 105 |
# File 'lib/ask/state.rb', line 103 def acquire_lock(key, ttl: 10) raise NotImplementedError end |
#clear ⇒ Object
Remove all keys from the store (key-value only by default). Subclasses should override to also clear locks, queues, and lists.
70 71 72 |
# File 'lib/ask/state.rb', line 70 def clear raise NotImplementedError end |
#close ⇒ Object
Optional: called when the adapter is no longer needed.
168 169 170 |
# File 'lib/ask/state.rb', line 168 def close # no-op by default end |
#delete(key) ⇒ Object
64 65 66 |
# File 'lib/ask/state.rb', line 64 def delete(key) raise NotImplementedError end |
#dequeue(queue) ⇒ QueueEntry?
Pop the next item from a named queue.
128 129 130 |
# File 'lib/ask/state.rb', line 128 def dequeue(queue) raise NotImplementedError end |
#enqueue(queue, value) ⇒ QueueEntry
Push an item onto a named queue.
121 122 123 |
# File 'lib/ask/state.rb', line 121 def enqueue(queue, value) raise NotImplementedError end |
#exists?(key) ⇒ Boolean
Check if a key exists and has not expired.
77 78 79 |
# File 'lib/ask/state.rb', line 77 def exists?(key) !get(key).nil? end |
#get(key) ⇒ Object?
Returns the stored value, or nil if not found.
52 53 54 |
# File 'lib/ask/state.rb', line 52 def get(key) raise NotImplementedError end |
#keys(pattern: nil) ⇒ Array<String>
Return all non-expired keys, optionally filtered by a glob pattern. Glob syntax: * matches any sequence, ? matches any single character.
85 86 87 |
# File 'lib/ask/state.rb', line 85 def keys(pattern: nil) raise NotImplementedError end |
#list_append(key, value, max_length: nil) ⇒ Object
Append a value to an ordered list. Trims to max_length (keeps newest).
144 145 146 |
# File 'lib/ask/state.rb', line 144 def list_append(key, value, max_length: nil) raise NotImplementedError end |
#list_range(key, start = 0, stop = -1)) ⇒ Array<Object>
Return a slice of the list.
153 154 155 |
# File 'lib/ask/state.rb', line 153 def list_range(key, start = 0, stop = -1) raise NotImplementedError end |
#list_remove(key, value) ⇒ Integer
Remove all occurrences of a value from a list.
161 162 163 |
# File 'lib/ask/state.rb', line 161 def list_remove(key, value) raise NotImplementedError end |
#queue_depth(queue) ⇒ Integer
Returns the number of items in the queue.
134 135 136 |
# File 'lib/ask/state.rb', line 134 def queue_depth(queue) raise NotImplementedError end |
#release_lock(key, lock) ⇒ Boolean
Release a lock. Only the lock owner can release it.
111 112 113 |
# File 'lib/ask/state.rb', line 111 def release_lock(key, lock) raise NotImplementedError end |
#set(key, value, ttl: nil) ⇒ Object
59 60 61 |
# File 'lib/ask/state.rb', line 59 def set(key, value, ttl: nil) raise NotImplementedError end |
#set_if_not_exists(key, value, ttl: nil) ⇒ Boolean
Atomically set a value only if the key does not already exist.
93 94 95 |
# File 'lib/ask/state.rb', line 93 def set_if_not_exists(key, value, ttl: nil) raise NotImplementedError end |