class Object

Public Instance Methods

build_filename(filename) click to toggle source
# File mailqun, line 48
def build_filename filename
  filename.gsub!(/^.*(\\|\/)/, '')
  filename.gsub!(/[^0-9A-Za-z.\-]/, '_')
  "#{filename.strip}_#{Time.now.to_i}.html"
end
build_json_response() click to toggle source
# File mailqun, line 40
def build_json_response
  response = request load_uri
  unless response.is_a? Net::HTTPSuccess
    abort("Error: Response code was #{response.code}\n#{response.body}")
  end
  JSON.parse(response.body)
end
build_output(json_response) click to toggle source
# File mailqun, line 120
def build_output json_response
  if @query_type == 'view'
    handle_view json_response
  else
    handle_fetch json_response
  end
end
handle_fetch(json_response) click to toggle source
# File mailqun, line 103
def handle_fetch json_response
  if @options.pretty and !json_response['items'].nil?
    pretty_print json_response
  else
    puts JSON.pretty_generate(json_response)
  end
  p @options.to_h
end
handle_view(json_response) click to toggle source
# File mailqun, line 112
def handle_view json_response
  filename = build_filename json_response['subject']
  File.open(filename.to_s, 'w') do |f|
    f.puts json_response['body-html']
  end
  system "open #{filename}"
end
load_env() click to toggle source
# File mailqun, line 8
def load_env
  @domain = ENV['MAILGUN_DOMAIN']
  @secret = ENV['MAILGUN_SECRET']

  abort('Error: Set MAILGUN_DOMAIN') if @domain.nil?
  abort('Error: Set MAILGUN_SECRET') if @secret.nil?
end
load_uri() click to toggle source
# File mailqun, line 16
def load_uri
  if @query_type == 'view'
    abort("Error: Where's the url, bro?") if @url.nil?
    url = @url
  elsif @query_type == 'bounces' and @address
    url = "https://api.mailgun.net/v3/#{@domain}/#{@query_type}/#{@address}"
  else
    query = URI.encode_www_form(@options.to_h)
    url = "https://api.mailgun.net/v3/#{@domain}/#{@query_type}?#{query}"
  end
  URI(url)
end
pretty_line_failed(pretty_line, item) click to toggle source
# File mailqun, line 66
def pretty_line_failed pretty_line, item
  error_description = [
    item['delivery-status']['description'],
    item['delivery-status']['message']
  ].find { |m| !m.empty? }[0..70].gsub(/\s\w+$/, '...')
  "#{pretty_line}\t- #{item['delivery-status']['code']} - #{error_description}"
end
pretty_line_prefix(item) click to toggle source
# File mailqun, line 74
def pretty_line_prefix item
  "#{Time.at(item['timestamp'])}: " \
  "[#{item['event'].upcase}]" \
  "\t" \
  "[#{item['tags'].join(',')}] " \
  "#{item['recipient']}"
end
pretty_print(json_response) click to toggle source
# File mailqun, line 97
def pretty_print json_response
  json_response['items'].each do |item|
    pretty_print_item item
  end
end
pretty_print_bounce_item(item) click to toggle source
# File mailqun, line 82
def pretty_print_bounce_item item
  pretty_line = "#{item['created_at']}: #{item['address']}"
  pretty_line = "#{pretty_line}\t- #{item['error'].red}"

  puts pretty_line.to_s
end
pretty_print_event_item(item) click to toggle source
# File mailqun, line 54
def pretty_print_event_item item
  event = item['event'].upcase
  pretty_line = pretty_line_prefix item
  if event == 'FAILED'
    puts pretty_line_failed(pretty_line, item).to_s.red
  elsif ['DELIVERED', 'OPENED'].include? event
    puts pretty_line.to_s.green
  else
    puts pretty_line.to_s
  end
end
pretty_print_item(item) click to toggle source
# File mailqun, line 89
def pretty_print_item item
  if @query_type == 'bounces'
    pretty_print_bounce_item item
  else
    pretty_print_event_item item
  end
end
request(uri) click to toggle source
# File mailqun, line 29
def request uri
  response = nil
  Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
    klass = Object.const_get("Net::HTTP::#{@verb.capitalize}")
    request = klass.new uri.request_uri
    request.basic_auth 'api', @secret
    response = http.request request
  end
  response
end