Class: MailDude::Stores::FileStore

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

Constant Summary

Constants inherited from Base

Base::ID_PATTERN

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root = MailDude.configuration.storage_path) ⇒ FileStore

Returns a new instance of FileStore.



10
11
12
13
# File 'lib/mail_dude/stores/file_store.rb', line 10

def initialize(root = MailDude.configuration.storage_path)
  @root = Pathname.new(root.to_s)
  ensure_directories!
end

Instance Attribute Details

#rootObject (readonly)

Returns the value of attribute root.



8
9
10
# File 'lib/mail_dude/stores/file_store.rb', line 8

def root
  @root
end

Instance Method Details

#clearObject



53
54
55
56
57
58
59
# File 'lib/mail_dude/stores/file_store.rb', line 53

def clear
  synchronize do
    directories = message_directories
    directories.each { |directory| FileUtils.rm_rf(directory) }
    directories.length
  end
end

#delete(id) ⇒ Object



42
43
44
45
46
47
48
49
50
51
# File 'lib/mail_dude/stores/file_store.rb', line 42

def delete(id)
  valid_id = validate_id!(id)
  synchronize do
    directory = message_path(valid_id)
    return false unless directory.directory?

    FileUtils.rm_rf(directory)
    true
  end
end

#find(id) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/mail_dude/stores/file_store.rb', line 27

def find(id)
  valid_id = validate_id!(id)
  directory = message_path(valid_id)
  raise MessageNotFoundError, 'Message not found' unless directory.directory?

   = directory.join('metadata.json')
  raw_file = directory.join('message.eml')
  raise MessageNotFoundError, 'Message not found' unless .file? && raw_file.file?

   = JSON.parse(.read)
  MessageRecord.new(id: valid_id, metadata: , raw_source: raw_file.binread)
rescue JSON::ParserError
  raise MessageNotFoundError, 'Message not found'
end

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



23
24
25
# File 'lib/mail_dude/stores/file_store.rb', line 23

def list(page: 1, per_page: MailDude.configuration.default_per_page, query: nil)
  page_for(, page: page, per_page: per_page, query: query)
end

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



61
62
63
64
65
66
67
68
# File 'lib/mail_dude/stores/file_store.rb', line 61

def prune(max_messages: MailDude.configuration.max_messages,
          retention_period: MailDude.configuration.retention_period)
  synchronize do
    ids = prune_ids(, max_messages: max_messages, retention_period: retention_period)
    ids.each { |id| FileUtils.rm_rf(message_path(id)) }
    ids.length
  end
end

#write(mail) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/mail_dude/stores/file_store.rb', line 15

def write(mail)
  synchronize do
    record = build_record(mail)
    write_record(record)
    record
  end
end