Class: MailDude::Stores::DatabaseStore
- Defined in:
- lib/mail_dude/stores/database_store.rb
Constant Summary
Constants inherited from Base
Instance Method Summary collapse
- #clear ⇒ Object
- #delete(id) ⇒ Object
- #find(id) ⇒ Object
- #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
Instance Method Details
#clear ⇒ Object
40 41 42 43 |
# File 'lib/mail_dude/stores/database_store.rb', line 40 def clear ensure_table! StoredEmail.delete_all end |
#delete(id) ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/mail_dude/stores/database_store.rb', line 30 def delete(id) ensure_table! valid_id = validate_id!(id) row = StoredEmail.find_by(uid: valid_id) return false unless row row.destroy! true end |
#find(id) ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/mail_dude/stores/database_store.rb', line 21 def find(id) ensure_table! valid_id = validate_id!(id) row = StoredEmail.find_by(uid: valid_id) raise MessageNotFoundError, 'Message not found' unless row record_from_row(row, raw: true) end |
#list(page: 1, per_page: MailDude.configuration.default_per_page, query: nil) ⇒ Object
15 16 17 18 19 |
# File 'lib/mail_dude/stores/database_store.rb', line 15 def list(page: 1, per_page: MailDude.configuration.default_per_page, query: nil) ensure_table! records = StoredEmail.order(captured_at: :desc).map { |row| record_from_row(row, raw: false) } page_for(records, page: page, per_page: per_page, query: query) end |
#prune(max_messages: MailDude.configuration.max_messages, retention_period: MailDude.configuration.retention_period) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/mail_dude/stores/database_store.rb', line 45 def prune(max_messages: MailDude.configuration., retention_period: MailDude.configuration.retention_period) ensure_table! ids = prune_ids(list(per_page: StoredEmail.count).records, max_messages: , retention_period: retention_period) StoredEmail.where(uid: ids).delete_all end |
#write(mail) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/mail_dude/stores/database_store.rb', line 6 def write(mail) ensure_table! record = build_record(mail) StoredEmail.create!(attributes_for(record)) record rescue ActiveRecord::StatementInvalid, ActiveRecord::ActiveRecordError => e raise StorageError, "MailDude database storage failed: #{e.}" end |