Class: LinkIO::Storage::InMemoryStorage

Inherits:
Base
  • Object
show all
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

Constructor Details

#initializeInMemoryStorage

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



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


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


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


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


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


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