mailqun 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/mailqun +64 -71
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a6fb93beeb19169d7babb25af4ba82437ddb4128
4
- data.tar.gz: 74770a11fceebcd33720dfa8eef25885458de5fd
3
+ metadata.gz: aa92a4457288ba1a54a43c6d9921aa5cf119e642
4
+ data.tar.gz: 262bd8e2701d04312974ee84fac86f716d538553
5
5
  SHA512:
6
- metadata.gz: 8c12b80fcba5d1082ef62a6a48b4d92b62f72215d45b475b400e2402c774d9946e33057819bf0e2bc4451a8000e585dab787fcb7767c9f5f2d61c2039d705956
7
- data.tar.gz: 62bf63ee66d3bcd2542b8a2986cfbac98bd57e6e0963ee3f54184ea368fb2983064bd158955563f4acf9eed8daba8c8f763ca31fa1590903380cafe71bb51419
6
+ metadata.gz: 75898450897035e70684127c56e576d6ba16521ab043bcd675760fed4b71465e9ca4abbc81364f8d215f762d4dc5f86802bfeef686d98e5ae711bd2d3f10ef68
7
+ data.tar.gz: 4edafe4f40b695d4ff1f78dd845dcead9e092f0bb4b7645957ccac4443e594c0b9a98b642dd09d28933f50c90990c52f554c8a1a079876038ab0f2beab3eaa6b
data/mailqun CHANGED
@@ -3,27 +3,14 @@ require 'net/http'
3
3
  require 'optparse'
4
4
  require 'ostruct'
5
5
  require 'json'
6
-
7
- begin
8
- require 'colorize'
9
- rescue LoadError
10
- class String
11
- def method_missing(name)
12
- if ['green', 'red'].include? name.to_s
13
- self
14
- else
15
- super
16
- end
17
- end
18
- end
19
- end
6
+ require 'colorize'
20
7
 
21
8
  def load_env
22
9
  @domain = ENV['MAILGUN_DOMAIN']
23
10
  @secret = ENV['MAILGUN_SECRET']
24
11
 
25
- abort("Error: Set MAILGUN_DOMAIN") if @domain.nil?
26
- abort("Error: Set MAILGUN_SECRET") if @secret.nil?
12
+ abort('Error: Set MAILGUN_DOMAIN') if @domain.nil?
13
+ abort('Error: Set MAILGUN_SECRET') if @secret.nil?
27
14
  end
28
15
 
29
16
  def load_uri
@@ -36,29 +23,29 @@ def load_uri
36
23
  query = URI.encode_www_form(@options.to_h)
37
24
  url = "https://api.mailgun.net/v3/#{@domain}/#{@query_type}?#{query}"
38
25
  end
39
- return URI(url)
26
+ URI(url)
40
27
  end
41
28
 
42
29
  def request uri
43
30
  response = nil
44
- Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
31
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
45
32
  klass = Object.const_get("Net::HTTP::#{@verb.capitalize}")
46
33
  request = klass.new uri.request_uri
47
34
  request.basic_auth 'api', @secret
48
35
  response = http.request request
49
36
  end
50
- return response
37
+ response
51
38
  end
52
39
 
53
- def get_json_response
40
+ def build_json_response
54
41
  response = request load_uri
55
- unless response.kind_of? Net::HTTPSuccess
42
+ unless response.is_a? Net::HTTPSuccess
56
43
  abort("Error: Response code was #{response.code}\n#{response.body}")
57
44
  end
58
45
  JSON.parse(response.body)
59
46
  end
60
47
 
61
- def get_filename filename
48
+ def build_filename filename
62
49
  filename.gsub!(/^.*(\\|\/)/, '')
63
50
  filename.gsub!(/[^0-9A-Za-z.\-]/, '_')
64
51
  "#{filename.strip}_#{Time.now.to_i}.html"
@@ -66,29 +53,37 @@ end
66
53
 
67
54
  def pretty_print_event_item item
68
55
  event = item['event'].upcase
69
- pretty_line = "#{Time.at(item['timestamp'])}: [#{event}]"
70
- pretty_line = "#{pretty_line}\t[#{item['tags'].join(',')}]";
71
- pretty_line = "#{pretty_line} #{item['recipient']}"
72
-
56
+ pretty_line = pretty_line_prefix item
73
57
  if event == 'FAILED'
74
- error_description = item['delivery-status']['description']
75
- error_description = item['delivery-status']['message'] if error_description.empty?
76
- pretty_line = "#{pretty_line}\t- #{item['delivery-status']['code']}"\
77
- " - #{error_description}"
78
-
79
- puts "#{pretty_line}".red
58
+ puts pretty_line_failed(pretty_line, item).to_s.red
80
59
  elsif ['DELIVERED', 'OPENED'].include? event
81
- puts "#{pretty_line}".green
60
+ puts pretty_line.to_s.green
82
61
  else
83
- puts "#{pretty_line}"
62
+ puts pretty_line.to_s
84
63
  end
85
64
  end
86
65
 
66
+ def pretty_line_failed pretty_line, item
67
+ error_description = [
68
+ item['delivery-status']['description'],
69
+ item['delivery-status']['message']
70
+ ].find { |m| !m.empty? }[0..70].gsub(/\s\w+$/, '...')
71
+ "#{pretty_line}\t- #{item['delivery-status']['code']} - #{error_description}"
72
+ end
73
+
74
+ def pretty_line_prefix item
75
+ "#{Time.at(item['timestamp'])}: " \
76
+ "[#{item['event'].upcase}]" \
77
+ "\t" \
78
+ "[#{item['tags'].join(',')}] " \
79
+ "#{item['recipient']}"
80
+ end
81
+
87
82
  def pretty_print_bounce_item item
88
83
  pretty_line = "#{item['created_at']}: #{item['address']}"
89
- pretty_line = "#{pretty_line}\t- #{item['error'].red}";
84
+ pretty_line = "#{pretty_line}\t- #{item['error'].red}"
90
85
 
91
- puts "#{pretty_line}"
86
+ puts pretty_line.to_s
92
87
  end
93
88
 
94
89
  def pretty_print_item item
@@ -115,8 +110,8 @@ def handle_fetch json_response
115
110
  end
116
111
 
117
112
  def handle_view json_response
118
- filename = get_filename json_response['subject']
119
- open("#{filename}", 'w') do |f|
113
+ filename = build_filename json_response['subject']
114
+ File.open(filename.to_s, 'w') do |f|
120
115
  f.puts json_response['body-html']
121
116
  end
122
117
  system "open #{filename}"
@@ -137,74 +132,72 @@ end
137
132
  @verb = 'GET'
138
133
 
139
134
  OptionParser.new do |opts|
140
- opts.banner = "Usage: mailqun [options]"
135
+ opts.banner = 'Usage: mailqun [options]'
141
136
 
142
- opts.separator ""
143
- opts.separator "Common options:"
137
+ opts.separator ''
138
+ opts.separator 'Common options:'
144
139
 
145
- opts.on("-f [FROM]", "--from [FROM]", String,
146
- "Address of the sender") do |f|
140
+ opts.on('-f [FROM]', '--from [FROM]', String,
141
+ 'Address of the sender') do |f|
147
142
  @options.from = f
148
143
  end
149
144
 
150
- opts.on("-t [TO]", "--to [TO]", String,
151
- "Address of the receiver") do |t|
145
+ opts.on('-t [TO]', '--to [TO]', String,
146
+ 'Address of the receiver') do |t|
152
147
  @options.to = t
153
148
  end
154
149
 
155
- opts.on("-s [SUBJECT]", "--subject [SUBJECT]", String,
156
- "Subject of mail") do |s|
150
+ opts.on('-s [SUBJECT]', '--subject [SUBJECT]', String,
151
+ 'Subject of mail') do |s|
157
152
  @options.subject = s
158
153
  end
159
154
 
160
- opts.on("-l [LIMIT]", "--limit [LIMIT]", Integer,
161
- "Limit on number of results") do |l|
155
+ opts.on('-l [LIMIT]', '--limit [LIMIT]', Integer,
156
+ 'Limit on number of results') do |l|
162
157
  @options.limit = l
163
158
  end
164
159
 
165
- opts.on("--tags [TAG]", String,
166
- "Value in X-Mailgun-Tag header") do |t|
160
+ opts.on('--tags [TAG]', String,
161
+ 'Value in X-Mailgun-Tag header') do |t|
167
162
  @options.tags = t
168
163
  end
169
164
 
170
- opts.on("-e [EVENT]", "--event [EVENT]", String,
171
- "Event being queried") do |e|
165
+ opts.on('-e [EVENT]', '--event [EVENT]', String,
166
+ 'Event being queried') do |e|
172
167
  @options.event = e
173
168
  end
174
169
 
175
- opts.on("--raw",
176
- "Gives raw json response, instead of summary") do |e|
170
+ opts.on('--raw',
171
+ 'Gives raw json response, instead of summary') do |_e|
177
172
  @options.pretty = false
178
173
  end
179
174
 
180
- opts.separator ""
181
- opts.separator "Bounce options:"
175
+ opts.separator ''
176
+ opts.separator 'Bounce options:'
182
177
 
183
- opts.on("--bounces",
184
- "Add this option to query bounces instead of events") do |e|
178
+ opts.on('--bounces',
179
+ 'Add this option to query bounces instead of events') do |_e|
185
180
  @query_type = 'bounces'
186
181
  end
187
182
 
188
- opts.on("-a [ADDRESS]", "--address [ADDRESS]", String,
189
- "Bounced address, used with --bounces") do |a|
190
- if @query_type == 'bounces'
191
- @address = a
192
- end
183
+ opts.on('-a [ADDRESS]', '--address [ADDRESS]', String,
184
+ 'Bounced address, used with --bounces') do |a|
185
+ @address = a if @query_type == 'bounces'
193
186
  end
194
187
 
195
- opts.on("--delete [ADDRESS]", String,
196
- "Delete address from bounces, used with --bounces") do |a|
188
+ opts.on('--delete [ADDRESS]', String,
189
+ 'Delete address from bounces, used with --bounces') do |a|
197
190
  if @query_type == 'bounces'
198
191
  @address = a
199
192
  @verb = 'DELETE'
200
193
  end
201
194
  end
202
195
 
203
- opts.separator ""
204
- opts.separator "View options:"
196
+ opts.separator ''
197
+ opts.separator 'View options:'
205
198
 
206
- opts.on("--view-body [URL]",
207
- "Mailgun storage URL to fetch email body from") do |u|
199
+ opts.on('--view-body [URL]',
200
+ 'Mailgun storage URL to fetch email body from') do |u|
208
201
  @url = u
209
202
  @query_type = 'view'
210
203
  end
@@ -212,6 +205,6 @@ end.parse!
212
205
 
213
206
  load_env
214
207
 
215
- json_response = get_json_response
208
+ json_response = build_json_response
216
209
 
217
210
  build_output json_response
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailqun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harman Singh