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 27 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 33 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 43 def client @client ||= begin sentinels = options.sentinels redis_options = { url: options.redis_url } redis_options[:sentinels] = sentinels if sentinels redis = ::Redis.new(redis_options) namespace = options.namespace if namespace require 'redis/namespace' Redis::Namespace.new(namespace, redis: redis) else redis end end end
item_for(message)
click to toggle source
# File lib/mail_room/delivery/sidekiq.rb, line 61 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 73 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