Class: LinkIO::Storage::InMemoryStorage
- Defined in:
- lib/linkio/storage/in_memory_storage.rb
Overview
A process-local, thread-safe in-memory store. Great for development and tests. Data is lost when the process exits and is not shared between processes, so do not use it in production with multiple workers.
Expiry is enforced lazily on read (matching the Node.js backend).
Instance Method Summary collapse
- #delete_pending_link(device_id) ⇒ Object
- #delete_pending_link_by_fingerprint(fingerprint) ⇒ Object
- #get_pending_link(device_id) ⇒ Object
- #get_pending_link_by_fingerprint(fingerprint) ⇒ Object
- #get_referral_by_referee(referee_id) ⇒ Object
- #get_referrals_by_referrer(referrer_id) ⇒ Object
-
#initialize ⇒ InMemoryStorage
constructor
A new instance of InMemoryStorage.
- #save_pending_link(device_id, data) ⇒ Object
- #save_pending_link_by_fingerprint(fingerprint, data) ⇒ Object
- #save_referral(referral) ⇒ Object
Constructor Details
#initialize ⇒ InMemoryStorage
Returns a new instance of InMemoryStorage.
11 12 13 14 15 16 17 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 11 def initialize super @pending_links = {} @fingerprint_links = {} @referrals = [] @mutex = Mutex.new end |
Instance Method Details
#delete_pending_link(device_id) ⇒ Object
28 29 30 31 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 28 def delete_pending_link(device_id) @mutex.synchronize { @pending_links.delete(device_id) } nil end |
#delete_pending_link_by_fingerprint(fingerprint) ⇒ Object
42 43 44 45 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 42 def delete_pending_link_by_fingerprint(fingerprint) @mutex.synchronize { @fingerprint_links.delete(fingerprint) } nil end |
#get_pending_link(device_id) ⇒ Object
24 25 26 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 24 def get_pending_link(device_id) @mutex.synchronize { fetch_unexpired(@pending_links, device_id) } end |
#get_pending_link_by_fingerprint(fingerprint) ⇒ Object
38 39 40 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 38 def get_pending_link_by_fingerprint(fingerprint) @mutex.synchronize { fetch_unexpired(@fingerprint_links, fingerprint) } end |
#get_referral_by_referee(referee_id) ⇒ Object
59 60 61 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 59 def get_referral_by_referee(referee_id) @mutex.synchronize { @referrals.find { |r| r.referee_id == referee_id } } end |
#get_referrals_by_referrer(referrer_id) ⇒ Object
55 56 57 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 55 def get_referrals_by_referrer(referrer_id) @mutex.synchronize { @referrals.select { |r| r.referrer_id == referrer_id } } end |
#save_pending_link(device_id, data) ⇒ Object
19 20 21 22 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 19 def save_pending_link(device_id, data) @mutex.synchronize { @pending_links[device_id] = data } nil end |
#save_pending_link_by_fingerprint(fingerprint, data) ⇒ Object
33 34 35 36 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 33 def save_pending_link_by_fingerprint(fingerprint, data) @mutex.synchronize { @fingerprint_links[fingerprint] = data } nil end |
#save_referral(referral) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/linkio/storage/in_memory_storage.rb', line 47 def save_referral(referral) @mutex.synchronize do exists = @referrals.any? { |r| r.referee_id == referral.referee_id } @referrals << referral unless exists end nil end |