class MailRoom::Delivery::Sidekiq
Constants
- Options
Attributes
options[RW]
Public Class Methods
new(options)
click to toggle source
Build a new delivery, hold the mailbox configuration @param [MailRoom::Delivery::Sidekiq::Options]
# File lib/mail_room/delivery/sidekiq.rb, line 26 def initialize(options) @options = options end
Public Instance Methods
deliver(message)
click to toggle source
deliver the message by pushing it onto the configured Sidekiq queue @param message [String] the email message as a string, RFC822 format
# File lib/mail_room/delivery/sidekiq.rb, line 32 def deliver(message) item = item_for(message) client.lpush("queue:#{options.queue}", JSON.generate(item)) true end
Private Instance Methods
client()
click to toggle source
# File lib/mail_room/delivery/sidekiq.rb, line 42 def client client = Redis.new(url: options.redis_url) namespace = options.namespace if namespace require 'redis/namespace' Redis::Namespace.new(namespace, redis: client) else client end end
item_for(message)
click to toggle source
# File lib/mail_room/delivery/sidekiq.rb, line 54 def item_for(message) { 'class' => options.worker, 'args' => [utf8_encode_message(message)], 'queue' => options.queue, 'jid' => SecureRandom.hex(12), 'retry' => false, 'enqueued_at' => Time.now.to_f } end
utf8_encode_message(message)
click to toggle source
# File lib/mail_room/delivery/sidekiq.rb, line 66 def utf8_encode_message(message) message = message.dup message.force_encoding("UTF-8") return message if message.valid_encoding? detection = CharlockHolmes::EncodingDetector.detect(message) return message unless detection && detection[:encoding] # Convert non-UTF-8 body UTF-8 so it can be dumped as JSON. CharlockHolmes::Converter.convert(message, detection[:encoding], 'UTF-8') end