Class: MailDude::Stores::MemoryStore

Inherits:
Base
  • Object
show all
Defined in:
lib/mail_dude/stores/memory_store.rb

Constant Summary

Constants inherited from Base

Base::ID_PATTERN

Instance Method Summary collapse

Constructor Details

#initializeMemoryStore

Returns a new instance of MemoryStore.



6
7
8
9
# File 'lib/mail_dude/stores/memory_store.rb', line 6

def initialize
  @records = {}
  @mutex = Mutex.new
end

Instance Method Details

#clearObject



31
32
33
34
35
36
37
# File 'lib/mail_dude/stores/memory_store.rb', line 31

def clear
  mutex.synchronize do
    count = records.length
    records.clear
    count
  end
end

#delete(id) ⇒ Object



26
27
28
29
# File 'lib/mail_dude/stores/memory_store.rb', line 26

def delete(id)
  valid_id = validate_id!(id)
  mutex.synchronize { !records.delete(valid_id).nil? }
end

#find(id) ⇒ Object



21
22
23
24
# File 'lib/mail_dude/stores/memory_store.rb', line 21

def find(id)
  valid_id = validate_id!(id)
  mutex.synchronize { records.fetch(valid_id) { raise MessageNotFoundError, 'Message not found' } }
end

#list(page: 1, per_page: MailDude.configuration.default_per_page, query: nil) ⇒ Object



17
18
19
# File 'lib/mail_dude/stores/memory_store.rb', line 17

def list(page: 1, per_page: MailDude.configuration.default_per_page, query: nil)
  mutex.synchronize { page_for(records.values, page: page, per_page: per_page, query: query) }
end

#prune(max_messages: MailDude.configuration.max_messages, retention_period: MailDude.configuration.retention_period) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/mail_dude/stores/memory_store.rb', line 39

def prune(max_messages: MailDude.configuration.max_messages,
          retention_period: MailDude.configuration.retention_period)
  mutex.synchronize do
    ids = prune_ids(records.values, max_messages: max_messages, retention_period: retention_period)
    ids.each { |id| records.delete(id) }
    ids.length
  end
end

#write(mail) ⇒ Object



11
12
13
14
15
# File 'lib/mail_dude/stores/memory_store.rb', line 11

def write(mail)
  record = build_record(mail)
  mutex.synchronize { records[record.id] = record }
  record
end