Class: GravityMailbox::RailsCacheDeliveryMethod

Inherits:
Object
  • Object
show all
Defined in:
lib/gravity_mailbox/rails_cache_delivery_method.rb

Constant Summary collapse

KEY_PREFIX =
'gravity_mailbox/'
MAILS_LIST_KEY =
"#{KEY_PREFIX}list"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(settings) ⇒ RailsCacheDeliveryMethod

Returns a new instance of RailsCacheDeliveryMethod.



12
13
14
# File 'lib/gravity_mailbox/rails_cache_delivery_method.rb', line 12

def initialize(settings)
  @settings = settings
end

Instance Attribute Details

#settingsObject

Returns the value of attribute settings.



10
11
12
# File 'lib/gravity_mailbox/rails_cache_delivery_method.rb', line 10

def settings
  @settings
end

Class Method Details

.delete(id) ⇒ Object



39
40
41
42
43
44
# File 'lib/gravity_mailbox/rails_cache_delivery_method.rb', line 39

def self.delete(id)
  Rails.cache.delete("#{KEY_PREFIX}#{id}")
  actual_list = mail_keys
  actual_list.delete("#{KEY_PREFIX}#{id}")
  Rails.cache.write(MAILS_LIST_KEY, actual_list)
end

.delete_allObject



46
47
48
# File 'lib/gravity_mailbox/rails_cache_delivery_method.rb', line 46

def self.delete_all
  Rails.cache.delete_matched("#{KEY_PREFIX}*")
end

.mail(id) ⇒ Object



35
36
37
# File 'lib/gravity_mailbox/rails_cache_delivery_method.rb', line 35

def self.mail(id)
  Mail.new(Rails.cache.read("#{KEY_PREFIX}#{id}"))
end

.mail_keysObject



50
51
52
# File 'lib/gravity_mailbox/rails_cache_delivery_method.rb', line 50

def self.mail_keys
  Rails.cache.read(MAILS_LIST_KEY) || []
end

.mailsObject



27
28
29
30
31
32
33
# File 'lib/gravity_mailbox/rails_cache_delivery_method.rb', line 27

def self.mails
  return [] if mail_keys.empty?

  Rails.cache.read_multi(*mail_keys).values.map do |mail|
    Mail.new(mail)
  end.sort_by(&:date).reverse
end

Instance Method Details

#deliver!(mail) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/gravity_mailbox/rails_cache_delivery_method.rb', line 16

def deliver!(mail)
  # https://github.com/mikel/mail/blob/d1d65b370b109b98e673a934e8b70a0c1f58cc59/lib/mail/network/delivery_methods/test_mailer.rb#L39
  # Create the envelope to validate it
  Mail::SmtpEnvelope.new(mail)

  key = "#{KEY_PREFIX}#{mail.message_id}"
  Rails.cache.write(key, mail.encoded, expires_in: 1.week) # TODO: setting for expiration
  actual_list = self.class.mail_keys
  Rails.cache.write(MAILS_LIST_KEY, actual_list << key)
end