Class: MailDude::Stores::FileStore
- Defined in:
- lib/mail_dude/stores/file_store.rb
Constant Summary
Constants inherited from Base
Instance Attribute Summary collapse
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Instance Method Summary collapse
- #clear ⇒ Object
- #delete(id) ⇒ Object
- #find(id) ⇒ Object
-
#initialize(root = MailDude.configuration.storage_path) ⇒ FileStore
constructor
A new instance of FileStore.
- #list(page: 1, per_page: MailDude.configuration.default_per_page, query: nil) ⇒ Object
- #prune(max_messages: MailDude.configuration.max_messages, retention_period: MailDude.configuration.retention_period) ⇒ Object
- #write(mail) ⇒ Object
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
#root ⇒ Object (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
#clear ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/mail_dude/stores/file_store.rb', line 53 def clear synchronize do 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 = (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 = (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., retention_period: MailDude.configuration.retention_period) synchronize do ids = prune_ids(, max_messages: , retention_period: retention_period) ids.each { |id| FileUtils.rm_rf((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 |