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