class MailHogwarts::Mailer
Attributes
body[R]
domain[R]
messages[R]
path[R]
url[R]
Public Class Methods
new(args)
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 5 def initialize(args) @url = "#{@domain = args[:url]}#{@path = args[:path]}" end
Public Instance Methods
[](index)
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 25 def [](index) @messages[index] end
call()
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 9 def call response = RestClient::Request.execute method: :get, url: @url, verify_ssl: false @body = JSON.parse(response.body) @messages = body['items'].map do |message| Message.new id: message['ID'], created_at: Time.parse(message['Created']).to_i, from: message['Raw']['From'], to: message['Raw']['To'], subject: readable_subject(message['Content']['Headers']['Subject'].join(' ')), body: readable_body(message['Content']['Body']) end @messages.size end
count()
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 33 def count body['count'] end
ids()
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 29 def ids @ids = @messages.map(&:id) end
select(filters)
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 41 def select(filters) messages = @messages filtered_messages = [] (%i[from to subject body] & filters.keys).each do |filter| messages.each do |message| filtered_messages << message if message.send(filter).include?(filters[filter]) end messages = filtered_messages filtered_messages = [] end messages end
total()
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 37 def total body['total'] end
Private Instance Methods
readable_body(body)
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 59 def readable_body(body) Base64.decode64(body).force_encoding('utf-8') end
readable_subject(subject)
click to toggle source
# File lib/mailhogwarts/mailer.rb, line 63 def readable_subject(subject) subject.split('=?UTF-8?Q?').map do |word| next if word.size.zero? word.strip.gsub(/(\?=)/, '').tr('_', ' ') end.reject(&:nil?).map do |word| next if word.nil? word.unpack('M').join('') end.join('').strip.force_encoding('utf-8') end