houston 2.0.2 → 2.1.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +12 -4
  3. data/README.md +2 -2
  4. data/bin/apn +18 -13
  5. data/coverage/assets/0.7.1/application.css +1110 -0
  6. data/coverage/assets/0.7.1/application.js +626 -0
  7. data/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
  8. data/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
  9. data/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
  10. data/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
  11. data/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
  12. data/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
  13. data/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
  14. data/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
  15. data/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
  16. data/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
  17. data/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
  18. data/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
  19. data/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
  20. data/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
  21. data/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
  22. data/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
  23. data/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
  24. data/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
  25. data/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
  26. data/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
  27. data/coverage/assets/0.7.1/favicon_green.png +0 -0
  28. data/coverage/assets/0.7.1/favicon_red.png +0 -0
  29. data/coverage/assets/0.7.1/favicon_yellow.png +0 -0
  30. data/coverage/assets/0.7.1/loading.gif +0 -0
  31. data/coverage/assets/0.7.1/magnify.png +0 -0
  32. data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  33. data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  34. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  35. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  36. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  37. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  38. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  39. data/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  40. data/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  41. data/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  42. data/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  43. data/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  44. data/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  45. data/coverage/index.html +1708 -0
  46. data/houston.gemspec +1 -1
  47. data/lib/houston/client.rb +8 -3
  48. data/lib/houston/version.rb +1 -1
  49. data/spec/client_spec.rb +101 -0
  50. data/spec/notification_spec.rb +79 -41
  51. data/spec/spec_helper.rb +21 -0
  52. metadata +49 -9
  53. data/houston-0.3.1.gem +0 -0
  54. data/houston-2.0.0.gem +0 -0
  55. data/houston-2.0.1.gem +0 -0
Binary file
Binary file
@@ -0,0 +1,1708 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>Code coverage for Houston</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <script src='./assets/0.7.1/application.js' type='text/javascript'></script>
7
+ <link href='./assets/0.7.1/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
+ <link rel="shortcut icon" type="image/png" href="./assets/0.7.1/favicon_red.png" />
9
+ <link rel="icon" type="image/png" href="./assets/0.7.1/favicon.png" />
10
+ </head>
11
+
12
+ <body>
13
+ <div id="loading">
14
+ <img src="./assets/0.7.1/loading.gif" alt="loading"/>
15
+ </div>
16
+ <div id="wrapper" style="display:none;">
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2014-06-12T14:59:27-07:00">2014-06-12T14:59:27-07:00</abbr></div>
18
+ <ul class="group_tabs"></ul>
19
+
20
+ <div id="content">
21
+ <div class="file_list_container" id="AllFiles">
22
+ <h2>
23
+ <span class="group_name">All Files</span>
24
+ (<span class="covered_percent"><span class="red">67.95%</span></span>
25
+ covered at
26
+ <span class="covered_strength">
27
+ <span class="green">
28
+ 3.75
29
+ </span>
30
+ </span> hits/line)
31
+ </h2>
32
+ <a name="AllFiles"></a>
33
+ <div>
34
+ <b>4</b> files in total.
35
+ <b>156</b> relevant lines.
36
+ <span class="green"><b>106</b> lines covered</span> and
37
+ <span class="red"><b>50</b> lines missed </span>
38
+ </div>
39
+ <table class="file_list">
40
+ <thead>
41
+ <tr>
42
+ <th>File</th>
43
+ <th>% covered</th>
44
+ <th>Lines</th>
45
+ <th>Relevant Lines</th>
46
+ <th>Lines covered</th>
47
+ <th>Lines missed</th>
48
+ <th>Avg. Hits / Line</th>
49
+ </tr>
50
+ </thead>
51
+ <tbody>
52
+
53
+ <tr>
54
+ <td class="strong"><a href="#28f862b31fdfb88d6f36a66abba5e0998ef8aa33" class="src_link" title="lib/houston.rb">lib/houston.rb</a></td>
55
+ <td class="green strong">100.0 %</td>
56
+ <td>4</td>
57
+ <td>4</td>
58
+ <td>4</td>
59
+ <td>0</td>
60
+ <td>1.0</td>
61
+ </tr>
62
+
63
+ <tr>
64
+ <td class="strong"><a href="#a3eaf6c199f250e522479598f621cf8c25128a64" class="src_link" title="lib/houston/client.rb">lib/houston/client.rb</a></td>
65
+ <td class="red strong">58.73 %</td>
66
+ <td>100</td>
67
+ <td>63</td>
68
+ <td>37</td>
69
+ <td>26</td>
70
+ <td>2.1</td>
71
+ </tr>
72
+
73
+ <tr>
74
+ <td class="strong"><a href="#f24bc8dc5a3b650c85198e750604fb16d9511c42" class="src_link" title="lib/houston/connection.rb">lib/houston/connection.rb</a></td>
75
+ <td class="red strong">42.5 %</td>
76
+ <td>65</td>
77
+ <td>40</td>
78
+ <td>17</td>
79
+ <td>23</td>
80
+ <td>0.4</td>
81
+ </tr>
82
+
83
+ <tr>
84
+ <td class="strong"><a href="#7ea710ee036930b7540634e0cd00f6d863839f93" class="src_link" title="lib/houston/notification.rb">lib/houston/notification.rb</a></td>
85
+ <td class="green strong">97.96 %</td>
86
+ <td>85</td>
87
+ <td>49</td>
88
+ <td>48</td>
89
+ <td>1</td>
90
+ <td>11.5</td>
91
+ </tr>
92
+
93
+ </tbody>
94
+ </table>
95
+ </div>
96
+
97
+
98
+
99
+ </div>
100
+
101
+ <div id="footer">
102
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.7.1
103
+ and simplecov-html v0.7.1<br/>
104
+ using RSpec
105
+ </div>
106
+
107
+ <div class="source_files">
108
+
109
+ <div class="source_table" id="28f862b31fdfb88d6f36a66abba5e0998ef8aa33">
110
+ <div class="header">
111
+ <h3>lib/houston.rb</h3>
112
+ <h4><span class="green">100.0 %</span> covered</h4>
113
+ <div>
114
+ <b>4</b> relevant lines.
115
+ <span class="green"><b>4</b> lines covered</span> and
116
+ <span class="red"><b>0</b> lines missed.</span>
117
+ </div>
118
+ </div>
119
+
120
+ <pre>
121
+ <ol>
122
+
123
+ <li class="covered" data-hits="1" data-linenumber="1">
124
+ <span class="hits">1</span>
125
+
126
+ <code class="ruby">require &#39;houston/version&#39;</code>
127
+ </li>
128
+
129
+ <li class="covered" data-hits="1" data-linenumber="2">
130
+ <span class="hits">1</span>
131
+
132
+ <code class="ruby">require &#39;houston/client&#39;</code>
133
+ </li>
134
+
135
+ <li class="covered" data-hits="1" data-linenumber="3">
136
+ <span class="hits">1</span>
137
+
138
+ <code class="ruby">require &#39;houston/notification&#39;</code>
139
+ </li>
140
+
141
+ <li class="covered" data-hits="1" data-linenumber="4">
142
+ <span class="hits">1</span>
143
+
144
+ <code class="ruby">require &#39;houston/connection&#39;</code>
145
+ </li>
146
+
147
+ </ol>
148
+ </pre>
149
+ </div>
150
+
151
+ <div class="source_table" id="a3eaf6c199f250e522479598f621cf8c25128a64">
152
+ <div class="header">
153
+ <h3>lib/houston/client.rb</h3>
154
+ <h4><span class="red">58.73 %</span> covered</h4>
155
+ <div>
156
+ <b>63</b> relevant lines.
157
+ <span class="green"><b>37</b> lines covered</span> and
158
+ <span class="red"><b>26</b> lines missed.</span>
159
+ </div>
160
+ </div>
161
+
162
+ <pre>
163
+ <ol>
164
+
165
+ <li class="covered" data-hits="1" data-linenumber="1">
166
+ <span class="hits">1</span>
167
+
168
+ <code class="ruby">module Houston</code>
169
+ </li>
170
+
171
+ <li class="covered" data-hits="1" data-linenumber="2">
172
+ <span class="hits">1</span>
173
+
174
+ <code class="ruby"> APPLE_PRODUCTION_GATEWAY_URI = &quot;apn://gateway.push.apple.com:2195&quot;</code>
175
+ </li>
176
+
177
+ <li class="covered" data-hits="1" data-linenumber="3">
178
+ <span class="hits">1</span>
179
+
180
+ <code class="ruby"> APPLE_PRODUCTION_FEEDBACK_URI = &quot;apn://feedback.push.apple.com:2196&quot;</code>
181
+ </li>
182
+
183
+ <li class="never" data-hits="" data-linenumber="4">
184
+
185
+
186
+ <code class="ruby"></code>
187
+ </li>
188
+
189
+ <li class="covered" data-hits="1" data-linenumber="5">
190
+ <span class="hits">1</span>
191
+
192
+ <code class="ruby"> APPLE_DEVELOPMENT_GATEWAY_URI = &quot;apn://gateway.sandbox.push.apple.com:2195&quot;</code>
193
+ </li>
194
+
195
+ <li class="covered" data-hits="1" data-linenumber="6">
196
+ <span class="hits">1</span>
197
+
198
+ <code class="ruby"> APPLE_DEVELOPMENT_FEEDBACK_URI = &quot;apn://feedback.sandbox.push.apple.com:2196&quot;</code>
199
+ </li>
200
+
201
+ <li class="never" data-hits="" data-linenumber="7">
202
+
203
+
204
+ <code class="ruby"></code>
205
+ </li>
206
+
207
+ <li class="covered" data-hits="1" data-linenumber="8">
208
+ <span class="hits">1</span>
209
+
210
+ <code class="ruby"> class Client</code>
211
+ </li>
212
+
213
+ <li class="covered" data-hits="1" data-linenumber="9">
214
+ <span class="hits">1</span>
215
+
216
+ <code class="ruby"> attr_accessor :gateway_uri, :feedback_uri, :certificate, :passphrase, :timeout</code>
217
+ </li>
218
+
219
+ <li class="never" data-hits="" data-linenumber="10">
220
+
221
+
222
+ <code class="ruby"></code>
223
+ </li>
224
+
225
+ <li class="covered" data-hits="1" data-linenumber="11">
226
+ <span class="hits">1</span>
227
+
228
+ <code class="ruby"> class &lt;&lt; self</code>
229
+ </li>
230
+
231
+ <li class="covered" data-hits="1" data-linenumber="12">
232
+ <span class="hits">1</span>
233
+
234
+ <code class="ruby"> def development</code>
235
+ </li>
236
+
237
+ <li class="covered" data-hits="5" data-linenumber="13">
238
+ <span class="hits">5</span>
239
+
240
+ <code class="ruby"> client = self.new</code>
241
+ </li>
242
+
243
+ <li class="covered" data-hits="5" data-linenumber="14">
244
+ <span class="hits">5</span>
245
+
246
+ <code class="ruby"> client.gateway_uri = APPLE_DEVELOPMENT_GATEWAY_URI</code>
247
+ </li>
248
+
249
+ <li class="covered" data-hits="5" data-linenumber="15">
250
+ <span class="hits">5</span>
251
+
252
+ <code class="ruby"> client.feedback_uri = APPLE_DEVELOPMENT_FEEDBACK_URI</code>
253
+ </li>
254
+
255
+ <li class="covered" data-hits="5" data-linenumber="16">
256
+ <span class="hits">5</span>
257
+
258
+ <code class="ruby"> client</code>
259
+ </li>
260
+
261
+ <li class="never" data-hits="" data-linenumber="17">
262
+
263
+
264
+ <code class="ruby"> end</code>
265
+ </li>
266
+
267
+ <li class="never" data-hits="" data-linenumber="18">
268
+
269
+
270
+ <code class="ruby"></code>
271
+ </li>
272
+
273
+ <li class="covered" data-hits="1" data-linenumber="19">
274
+ <span class="hits">1</span>
275
+
276
+ <code class="ruby"> def production</code>
277
+ </li>
278
+
279
+ <li class="covered" data-hits="2" data-linenumber="20">
280
+ <span class="hits">2</span>
281
+
282
+ <code class="ruby"> client = self.new</code>
283
+ </li>
284
+
285
+ <li class="covered" data-hits="2" data-linenumber="21">
286
+ <span class="hits">2</span>
287
+
288
+ <code class="ruby"> client.gateway_uri = APPLE_PRODUCTION_GATEWAY_URI</code>
289
+ </li>
290
+
291
+ <li class="covered" data-hits="2" data-linenumber="22">
292
+ <span class="hits">2</span>
293
+
294
+ <code class="ruby"> client.feedback_uri = APPLE_PRODUCTION_FEEDBACK_URI</code>
295
+ </li>
296
+
297
+ <li class="covered" data-hits="2" data-linenumber="23">
298
+ <span class="hits">2</span>
299
+
300
+ <code class="ruby"> client</code>
301
+ </li>
302
+
303
+ <li class="never" data-hits="" data-linenumber="24">
304
+
305
+
306
+ <code class="ruby"> end</code>
307
+ </li>
308
+
309
+ <li class="never" data-hits="" data-linenumber="25">
310
+
311
+
312
+ <code class="ruby"> end</code>
313
+ </li>
314
+
315
+ <li class="never" data-hits="" data-linenumber="26">
316
+
317
+
318
+ <code class="ruby"></code>
319
+ </li>
320
+
321
+ <li class="covered" data-hits="1" data-linenumber="27">
322
+ <span class="hits">1</span>
323
+
324
+ <code class="ruby"> def initialize</code>
325
+ </li>
326
+
327
+ <li class="covered" data-hits="13" data-linenumber="28">
328
+ <span class="hits">13</span>
329
+
330
+ <code class="ruby"> @gateway_uri = ENV[&#39;APN_GATEWAY_URI&#39;]</code>
331
+ </li>
332
+
333
+ <li class="covered" data-hits="13" data-linenumber="29">
334
+ <span class="hits">13</span>
335
+
336
+ <code class="ruby"> @feedback_uri = ENV[&#39;APN_FEEDBACK_URI&#39;]</code>
337
+ </li>
338
+
339
+ <li class="covered" data-hits="13" data-linenumber="30">
340
+ <span class="hits">13</span>
341
+
342
+ <code class="ruby"> @certificate = ENV[&#39;APN_CERTIFICATE&#39;]</code>
343
+ </li>
344
+
345
+ <li class="covered" data-hits="13" data-linenumber="31">
346
+ <span class="hits">13</span>
347
+
348
+ <code class="ruby"> @passphrase = ENV[&#39;APN_CERTIFICATE_PASSPHRASE&#39;]</code>
349
+ </li>
350
+
351
+ <li class="covered" data-hits="13" data-linenumber="32">
352
+ <span class="hits">13</span>
353
+
354
+ <code class="ruby"> @timeout = Float(ENV[&#39;APN_TIMEOUT&#39;] || 0.5)</code>
355
+ </li>
356
+
357
+ <li class="never" data-hits="" data-linenumber="33">
358
+
359
+
360
+ <code class="ruby"> end</code>
361
+ </li>
362
+
363
+ <li class="never" data-hits="" data-linenumber="34">
364
+
365
+
366
+ <code class="ruby"></code>
367
+ </li>
368
+
369
+ <li class="covered" data-hits="1" data-linenumber="35">
370
+ <span class="hits">1</span>
371
+
372
+ <code class="ruby"> def push(*notifications)</code>
373
+ </li>
374
+
375
+ <li class="covered" data-hits="1" data-linenumber="36">
376
+ <span class="hits">1</span>
377
+
378
+ <code class="ruby"> return if notifications.empty?</code>
379
+ </li>
380
+
381
+ <li class="never" data-hits="" data-linenumber="37">
382
+
383
+
384
+ <code class="ruby"></code>
385
+ </li>
386
+
387
+ <li class="missed" data-hits="0" data-linenumber="38">
388
+
389
+
390
+ <code class="ruby"> notifications.flatten!</code>
391
+ </li>
392
+
393
+ <li class="missed" data-hits="0" data-linenumber="39">
394
+
395
+
396
+ <code class="ruby"> error = nil</code>
397
+ </li>
398
+
399
+ <li class="never" data-hits="" data-linenumber="40">
400
+
401
+
402
+ <code class="ruby"></code>
403
+ </li>
404
+
405
+ <li class="missed" data-hits="0" data-linenumber="41">
406
+
407
+
408
+ <code class="ruby"> Connection.open(@gateway_uri, @certificate, @passphrase) do |connection|</code>
409
+ </li>
410
+
411
+ <li class="missed" data-hits="0" data-linenumber="42">
412
+
413
+
414
+ <code class="ruby"> ssl = connection.ssl</code>
415
+ </li>
416
+
417
+ <li class="never" data-hits="" data-linenumber="43">
418
+
419
+
420
+ <code class="ruby"></code>
421
+ </li>
422
+
423
+ <li class="missed" data-hits="0" data-linenumber="44">
424
+
425
+
426
+ <code class="ruby"> notifications.each_with_index do |notification, index|</code>
427
+ </li>
428
+
429
+ <li class="missed" data-hits="0" data-linenumber="45">
430
+
431
+
432
+ <code class="ruby"> next unless notification.kind_of?(Notification)</code>
433
+ </li>
434
+
435
+ <li class="missed" data-hits="0" data-linenumber="46">
436
+
437
+
438
+ <code class="ruby"> next if notification.sent?</code>
439
+ </li>
440
+
441
+ <li class="missed" data-hits="0" data-linenumber="47">
442
+
443
+
444
+ <code class="ruby"> next unless notification.valid?</code>
445
+ </li>
446
+
447
+ <li class="never" data-hits="" data-linenumber="48">
448
+
449
+
450
+ <code class="ruby"></code>
451
+ </li>
452
+
453
+ <li class="missed" data-hits="0" data-linenumber="49">
454
+
455
+
456
+ <code class="ruby"> notification.id = index</code>
457
+ </li>
458
+
459
+ <li class="never" data-hits="" data-linenumber="50">
460
+
461
+
462
+ <code class="ruby"></code>
463
+ </li>
464
+
465
+ <li class="missed" data-hits="0" data-linenumber="51">
466
+
467
+
468
+ <code class="ruby"> connection.write(notification.message)</code>
469
+ </li>
470
+
471
+ <li class="missed" data-hits="0" data-linenumber="52">
472
+
473
+
474
+ <code class="ruby"> notification.mark_as_sent!</code>
475
+ </li>
476
+
477
+ <li class="never" data-hits="" data-linenumber="53">
478
+
479
+
480
+ <code class="ruby"></code>
481
+ </li>
482
+
483
+ <li class="missed" data-hits="0" data-linenumber="54">
484
+
485
+
486
+ <code class="ruby"> break if notifications.count == 1 || notification == notifications.last</code>
487
+ </li>
488
+
489
+ <li class="never" data-hits="" data-linenumber="55">
490
+
491
+
492
+ <code class="ruby"></code>
493
+ </li>
494
+
495
+ <li class="missed" data-hits="0" data-linenumber="56">
496
+
497
+
498
+ <code class="ruby"> read_socket, write_socket = IO.select([ssl], [ssl], [ssl], nil)</code>
499
+ </li>
500
+
501
+ <li class="missed" data-hits="0" data-linenumber="57">
502
+
503
+
504
+ <code class="ruby"> if (read_socket &amp;&amp; read_socket[0])</code>
505
+ </li>
506
+
507
+ <li class="missed" data-hits="0" data-linenumber="58">
508
+
509
+
510
+ <code class="ruby"> error = connection.read(6)</code>
511
+ </li>
512
+
513
+ <li class="missed" data-hits="0" data-linenumber="59">
514
+
515
+
516
+ <code class="ruby"> break</code>
517
+ </li>
518
+
519
+ <li class="never" data-hits="" data-linenumber="60">
520
+
521
+
522
+ <code class="ruby"> end</code>
523
+ </li>
524
+
525
+ <li class="never" data-hits="" data-linenumber="61">
526
+
527
+
528
+ <code class="ruby"> end</code>
529
+ </li>
530
+
531
+ <li class="never" data-hits="" data-linenumber="62">
532
+
533
+
534
+ <code class="ruby"></code>
535
+ </li>
536
+
537
+ <li class="missed" data-hits="0" data-linenumber="63">
538
+
539
+
540
+ <code class="ruby"> return if notifications.count == 1</code>
541
+ </li>
542
+
543
+ <li class="never" data-hits="" data-linenumber="64">
544
+
545
+
546
+ <code class="ruby"></code>
547
+ </li>
548
+
549
+ <li class="missed" data-hits="0" data-linenumber="65">
550
+
551
+
552
+ <code class="ruby"> unless error</code>
553
+ </li>
554
+
555
+ <li class="missed" data-hits="0" data-linenumber="66">
556
+
557
+
558
+ <code class="ruby"> read_socket, write_socket = IO.select([ssl], nil, [ssl], timeout)</code>
559
+ </li>
560
+
561
+ <li class="missed" data-hits="0" data-linenumber="67">
562
+
563
+
564
+ <code class="ruby"> if (read_socket &amp;&amp; read_socket[0])</code>
565
+ </li>
566
+
567
+ <li class="missed" data-hits="0" data-linenumber="68">
568
+
569
+
570
+ <code class="ruby"> error = connection.read(6)</code>
571
+ </li>
572
+
573
+ <li class="never" data-hits="" data-linenumber="69">
574
+
575
+
576
+ <code class="ruby"> end</code>
577
+ </li>
578
+
579
+ <li class="never" data-hits="" data-linenumber="70">
580
+
581
+
582
+ <code class="ruby"> end</code>
583
+ </li>
584
+
585
+ <li class="never" data-hits="" data-linenumber="71">
586
+
587
+
588
+ <code class="ruby"> end</code>
589
+ </li>
590
+
591
+ <li class="never" data-hits="" data-linenumber="72">
592
+
593
+
594
+ <code class="ruby"></code>
595
+ </li>
596
+
597
+ <li class="missed" data-hits="0" data-linenumber="73">
598
+
599
+
600
+ <code class="ruby"> if error</code>
601
+ </li>
602
+
603
+ <li class="missed" data-hits="0" data-linenumber="74">
604
+
605
+
606
+ <code class="ruby"> command, status, index = error.unpack(&quot;ccN&quot;)</code>
607
+ </li>
608
+
609
+ <li class="missed" data-hits="0" data-linenumber="75">
610
+
611
+
612
+ <code class="ruby"> notifications.slice!(0..index)</code>
613
+ </li>
614
+
615
+ <li class="missed" data-hits="0" data-linenumber="76">
616
+
617
+
618
+ <code class="ruby"> notifications.each(&amp;:mark_as_unsent!)</code>
619
+ </li>
620
+
621
+ <li class="missed" data-hits="0" data-linenumber="77">
622
+
623
+
624
+ <code class="ruby"> push(*notifications)</code>
625
+ </li>
626
+
627
+ <li class="never" data-hits="" data-linenumber="78">
628
+
629
+
630
+ <code class="ruby"> end</code>
631
+ </li>
632
+
633
+ <li class="never" data-hits="" data-linenumber="79">
634
+
635
+
636
+ <code class="ruby"> end</code>
637
+ </li>
638
+
639
+ <li class="never" data-hits="" data-linenumber="80">
640
+
641
+
642
+ <code class="ruby"></code>
643
+ </li>
644
+
645
+ <li class="covered" data-hits="1" data-linenumber="81">
646
+ <span class="hits">1</span>
647
+
648
+ <code class="ruby"> def unregistered_devices</code>
649
+ </li>
650
+
651
+ <li class="covered" data-hits="2" data-linenumber="82">
652
+ <span class="hits">2</span>
653
+
654
+ <code class="ruby"> devices = []</code>
655
+ </li>
656
+
657
+ <li class="never" data-hits="" data-linenumber="83">
658
+
659
+
660
+ <code class="ruby"></code>
661
+ </li>
662
+
663
+ <li class="covered" data-hits="2" data-linenumber="84">
664
+ <span class="hits">2</span>
665
+
666
+ <code class="ruby"> Connection.open(@feedback_uri, @certificate, @passphrase) do |connection|</code>
667
+ </li>
668
+
669
+ <li class="covered" data-hits="2" data-linenumber="85">
670
+ <span class="hits">2</span>
671
+
672
+ <code class="ruby"> while line = connection.read(38)</code>
673
+ </li>
674
+
675
+ <li class="covered" data-hits="4" data-linenumber="86">
676
+ <span class="hits">4</span>
677
+
678
+ <code class="ruby"> feedback = line.unpack(&#39;N1n1H140&#39;)</code>
679
+ </li>
680
+
681
+ <li class="covered" data-hits="4" data-linenumber="87">
682
+ <span class="hits">4</span>
683
+
684
+ <code class="ruby"> timestamp = feedback[0]</code>
685
+ </li>
686
+
687
+ <li class="covered" data-hits="4" data-linenumber="88">
688
+ <span class="hits">4</span>
689
+
690
+ <code class="ruby"> token = feedback[2].scan(/.{0,8}/).join(&#39; &#39;).strip</code>
691
+ </li>
692
+
693
+ <li class="covered" data-hits="4" data-linenumber="89">
694
+ <span class="hits">4</span>
695
+
696
+ <code class="ruby"> devices &lt;&lt; {token: token, timestamp: timestamp} if token &amp;&amp; timestamp</code>
697
+ </li>
698
+
699
+ <li class="never" data-hits="" data-linenumber="90">
700
+
701
+
702
+ <code class="ruby"> end</code>
703
+ </li>
704
+
705
+ <li class="never" data-hits="" data-linenumber="91">
706
+
707
+
708
+ <code class="ruby"> end</code>
709
+ </li>
710
+
711
+ <li class="never" data-hits="" data-linenumber="92">
712
+
713
+
714
+ <code class="ruby"></code>
715
+ </li>
716
+
717
+ <li class="covered" data-hits="2" data-linenumber="93">
718
+ <span class="hits">2</span>
719
+
720
+ <code class="ruby"> devices</code>
721
+ </li>
722
+
723
+ <li class="never" data-hits="" data-linenumber="94">
724
+
725
+
726
+ <code class="ruby"> end</code>
727
+ </li>
728
+
729
+ <li class="never" data-hits="" data-linenumber="95">
730
+
731
+
732
+ <code class="ruby"></code>
733
+ </li>
734
+
735
+ <li class="covered" data-hits="1" data-linenumber="96">
736
+ <span class="hits">1</span>
737
+
738
+ <code class="ruby"> def devices</code>
739
+ </li>
740
+
741
+ <li class="covered" data-hits="3" data-linenumber="97">
742
+ <span class="hits">3</span>
743
+
744
+ <code class="ruby"> unregistered_devices.collect{|device| device[:token]}</code>
745
+ </li>
746
+
747
+ <li class="never" data-hits="" data-linenumber="98">
748
+
749
+
750
+ <code class="ruby"> end</code>
751
+ </li>
752
+
753
+ <li class="never" data-hits="" data-linenumber="99">
754
+
755
+
756
+ <code class="ruby"> end</code>
757
+ </li>
758
+
759
+ <li class="never" data-hits="" data-linenumber="100">
760
+
761
+
762
+ <code class="ruby">end</code>
763
+ </li>
764
+
765
+ </ol>
766
+ </pre>
767
+ </div>
768
+
769
+ <div class="source_table" id="f24bc8dc5a3b650c85198e750604fb16d9511c42">
770
+ <div class="header">
771
+ <h3>lib/houston/connection.rb</h3>
772
+ <h4><span class="red">42.5 %</span> covered</h4>
773
+ <div>
774
+ <b>40</b> relevant lines.
775
+ <span class="green"><b>17</b> lines covered</span> and
776
+ <span class="red"><b>23</b> lines missed.</span>
777
+ </div>
778
+ </div>
779
+
780
+ <pre>
781
+ <ol>
782
+
783
+ <li class="covered" data-hits="1" data-linenumber="1">
784
+ <span class="hits">1</span>
785
+
786
+ <code class="ruby">require &#39;uri&#39;</code>
787
+ </li>
788
+
789
+ <li class="covered" data-hits="1" data-linenumber="2">
790
+ <span class="hits">1</span>
791
+
792
+ <code class="ruby">require &#39;socket&#39;</code>
793
+ </li>
794
+
795
+ <li class="covered" data-hits="1" data-linenumber="3">
796
+ <span class="hits">1</span>
797
+
798
+ <code class="ruby">require &#39;openssl&#39;</code>
799
+ </li>
800
+
801
+ <li class="covered" data-hits="1" data-linenumber="4">
802
+ <span class="hits">1</span>
803
+
804
+ <code class="ruby">require &#39;forwardable&#39;</code>
805
+ </li>
806
+
807
+ <li class="never" data-hits="" data-linenumber="5">
808
+
809
+
810
+ <code class="ruby"></code>
811
+ </li>
812
+
813
+ <li class="covered" data-hits="1" data-linenumber="6">
814
+ <span class="hits">1</span>
815
+
816
+ <code class="ruby">module Houston</code>
817
+ </li>
818
+
819
+ <li class="covered" data-hits="1" data-linenumber="7">
820
+ <span class="hits">1</span>
821
+
822
+ <code class="ruby"> class Connection</code>
823
+ </li>
824
+
825
+ <li class="covered" data-hits="1" data-linenumber="8">
826
+ <span class="hits">1</span>
827
+
828
+ <code class="ruby"> extend Forwardable</code>
829
+ </li>
830
+
831
+ <li class="covered" data-hits="1" data-linenumber="9">
832
+ <span class="hits">1</span>
833
+
834
+ <code class="ruby"> def_delegators :@ssl, :read, :write</code>
835
+ </li>
836
+
837
+ <li class="covered" data-hits="1" data-linenumber="10">
838
+ <span class="hits">1</span>
839
+
840
+ <code class="ruby"> def_delegators :@uri, :scheme, :host, :port</code>
841
+ </li>
842
+
843
+ <li class="never" data-hits="" data-linenumber="11">
844
+
845
+
846
+ <code class="ruby"></code>
847
+ </li>
848
+
849
+ <li class="covered" data-hits="1" data-linenumber="12">
850
+ <span class="hits">1</span>
851
+
852
+ <code class="ruby"> attr_reader :ssl, :socket, :certificate, :passphrase</code>
853
+ </li>
854
+
855
+ <li class="never" data-hits="" data-linenumber="13">
856
+
857
+
858
+ <code class="ruby"></code>
859
+ </li>
860
+
861
+ <li class="covered" data-hits="1" data-linenumber="14">
862
+ <span class="hits">1</span>
863
+
864
+ <code class="ruby"> class &lt;&lt; self</code>
865
+ </li>
866
+
867
+ <li class="covered" data-hits="1" data-linenumber="15">
868
+ <span class="hits">1</span>
869
+
870
+ <code class="ruby"> def open(uri, certificate, passphrase)</code>
871
+ </li>
872
+
873
+ <li class="missed" data-hits="0" data-linenumber="16">
874
+
875
+
876
+ <code class="ruby"> return unless block_given?</code>
877
+ </li>
878
+
879
+ <li class="never" data-hits="" data-linenumber="17">
880
+
881
+
882
+ <code class="ruby"></code>
883
+ </li>
884
+
885
+ <li class="missed" data-hits="0" data-linenumber="18">
886
+
887
+
888
+ <code class="ruby"> connection = new(uri, certificate, passphrase)</code>
889
+ </li>
890
+
891
+ <li class="missed" data-hits="0" data-linenumber="19">
892
+
893
+
894
+ <code class="ruby"> connection.open</code>
895
+ </li>
896
+
897
+ <li class="never" data-hits="" data-linenumber="20">
898
+
899
+
900
+ <code class="ruby"></code>
901
+ </li>
902
+
903
+ <li class="missed" data-hits="0" data-linenumber="21">
904
+
905
+
906
+ <code class="ruby"> yield connection</code>
907
+ </li>
908
+
909
+ <li class="never" data-hits="" data-linenumber="22">
910
+
911
+
912
+ <code class="ruby"></code>
913
+ </li>
914
+
915
+ <li class="missed" data-hits="0" data-linenumber="23">
916
+
917
+
918
+ <code class="ruby"> connection.close</code>
919
+ </li>
920
+
921
+ <li class="never" data-hits="" data-linenumber="24">
922
+
923
+
924
+ <code class="ruby"> end</code>
925
+ </li>
926
+
927
+ <li class="never" data-hits="" data-linenumber="25">
928
+
929
+
930
+ <code class="ruby"> end</code>
931
+ </li>
932
+
933
+ <li class="never" data-hits="" data-linenumber="26">
934
+
935
+
936
+ <code class="ruby"></code>
937
+ </li>
938
+
939
+ <li class="covered" data-hits="1" data-linenumber="27">
940
+ <span class="hits">1</span>
941
+
942
+ <code class="ruby"> def initialize(uri, certificate, passphrase)</code>
943
+ </li>
944
+
945
+ <li class="missed" data-hits="0" data-linenumber="28">
946
+
947
+
948
+ <code class="ruby"> @uri = URI(uri)</code>
949
+ </li>
950
+
951
+ <li class="missed" data-hits="0" data-linenumber="29">
952
+
953
+
954
+ <code class="ruby"> @certificate = certificate</code>
955
+ </li>
956
+
957
+ <li class="missed" data-hits="0" data-linenumber="30">
958
+
959
+
960
+ <code class="ruby"> @passphrase = passphrase</code>
961
+ </li>
962
+
963
+ <li class="never" data-hits="" data-linenumber="31">
964
+
965
+
966
+ <code class="ruby"> end</code>
967
+ </li>
968
+
969
+ <li class="never" data-hits="" data-linenumber="32">
970
+
971
+
972
+ <code class="ruby"></code>
973
+ </li>
974
+
975
+ <li class="covered" data-hits="1" data-linenumber="33">
976
+ <span class="hits">1</span>
977
+
978
+ <code class="ruby"> def open</code>
979
+ </li>
980
+
981
+ <li class="missed" data-hits="0" data-linenumber="34">
982
+
983
+
984
+ <code class="ruby"> return false if open?</code>
985
+ </li>
986
+
987
+ <li class="never" data-hits="" data-linenumber="35">
988
+
989
+
990
+ <code class="ruby"></code>
991
+ </li>
992
+
993
+ <li class="missed" data-hits="0" data-linenumber="36">
994
+
995
+
996
+ <code class="ruby"> @socket = TCPSocket.new(@uri.host, @uri.port)</code>
997
+ </li>
998
+
999
+ <li class="never" data-hits="" data-linenumber="37">
1000
+
1001
+
1002
+ <code class="ruby"></code>
1003
+ </li>
1004
+
1005
+ <li class="missed" data-hits="0" data-linenumber="38">
1006
+
1007
+
1008
+ <code class="ruby"> context = OpenSSL::SSL::SSLContext.new</code>
1009
+ </li>
1010
+
1011
+ <li class="missed" data-hits="0" data-linenumber="39">
1012
+
1013
+
1014
+ <code class="ruby"> context.key = OpenSSL::PKey::RSA.new(@certificate, @passphrase)</code>
1015
+ </li>
1016
+
1017
+ <li class="missed" data-hits="0" data-linenumber="40">
1018
+
1019
+
1020
+ <code class="ruby"> context.cert = OpenSSL::X509::Certificate.new(@certificate)</code>
1021
+ </li>
1022
+
1023
+ <li class="never" data-hits="" data-linenumber="41">
1024
+
1025
+
1026
+ <code class="ruby"></code>
1027
+ </li>
1028
+
1029
+ <li class="missed" data-hits="0" data-linenumber="42">
1030
+
1031
+
1032
+ <code class="ruby"> @ssl = OpenSSL::SSL::SSLSocket.new(@socket, context)</code>
1033
+ </li>
1034
+
1035
+ <li class="missed" data-hits="0" data-linenumber="43">
1036
+
1037
+
1038
+ <code class="ruby"> @ssl.sync = true</code>
1039
+ </li>
1040
+
1041
+ <li class="missed" data-hits="0" data-linenumber="44">
1042
+
1043
+
1044
+ <code class="ruby"> @ssl.connect</code>
1045
+ </li>
1046
+
1047
+ <li class="never" data-hits="" data-linenumber="45">
1048
+
1049
+
1050
+ <code class="ruby"> end</code>
1051
+ </li>
1052
+
1053
+ <li class="never" data-hits="" data-linenumber="46">
1054
+
1055
+
1056
+ <code class="ruby"></code>
1057
+ </li>
1058
+
1059
+ <li class="covered" data-hits="1" data-linenumber="47">
1060
+ <span class="hits">1</span>
1061
+
1062
+ <code class="ruby"> def open?</code>
1063
+ </li>
1064
+
1065
+ <li class="missed" data-hits="0" data-linenumber="48">
1066
+
1067
+
1068
+ <code class="ruby"> not (@ssl and @socket).nil?</code>
1069
+ </li>
1070
+
1071
+ <li class="never" data-hits="" data-linenumber="49">
1072
+
1073
+
1074
+ <code class="ruby"> end</code>
1075
+ </li>
1076
+
1077
+ <li class="never" data-hits="" data-linenumber="50">
1078
+
1079
+
1080
+ <code class="ruby"></code>
1081
+ </li>
1082
+
1083
+ <li class="covered" data-hits="1" data-linenumber="51">
1084
+ <span class="hits">1</span>
1085
+
1086
+ <code class="ruby"> def close</code>
1087
+ </li>
1088
+
1089
+ <li class="missed" data-hits="0" data-linenumber="52">
1090
+
1091
+
1092
+ <code class="ruby"> return false if closed?</code>
1093
+ </li>
1094
+
1095
+ <li class="never" data-hits="" data-linenumber="53">
1096
+
1097
+
1098
+ <code class="ruby"></code>
1099
+ </li>
1100
+
1101
+ <li class="missed" data-hits="0" data-linenumber="54">
1102
+
1103
+
1104
+ <code class="ruby"> @ssl.close</code>
1105
+ </li>
1106
+
1107
+ <li class="missed" data-hits="0" data-linenumber="55">
1108
+
1109
+
1110
+ <code class="ruby"> @ssl = nil</code>
1111
+ </li>
1112
+
1113
+ <li class="never" data-hits="" data-linenumber="56">
1114
+
1115
+
1116
+ <code class="ruby"></code>
1117
+ </li>
1118
+
1119
+ <li class="missed" data-hits="0" data-linenumber="57">
1120
+
1121
+
1122
+ <code class="ruby"> @socket.close</code>
1123
+ </li>
1124
+
1125
+ <li class="missed" data-hits="0" data-linenumber="58">
1126
+
1127
+
1128
+ <code class="ruby"> @socket = nil</code>
1129
+ </li>
1130
+
1131
+ <li class="never" data-hits="" data-linenumber="59">
1132
+
1133
+
1134
+ <code class="ruby"> end</code>
1135
+ </li>
1136
+
1137
+ <li class="never" data-hits="" data-linenumber="60">
1138
+
1139
+
1140
+ <code class="ruby"></code>
1141
+ </li>
1142
+
1143
+ <li class="covered" data-hits="1" data-linenumber="61">
1144
+ <span class="hits">1</span>
1145
+
1146
+ <code class="ruby"> def closed?</code>
1147
+ </li>
1148
+
1149
+ <li class="missed" data-hits="0" data-linenumber="62">
1150
+
1151
+
1152
+ <code class="ruby"> not open?</code>
1153
+ </li>
1154
+
1155
+ <li class="never" data-hits="" data-linenumber="63">
1156
+
1157
+
1158
+ <code class="ruby"> end</code>
1159
+ </li>
1160
+
1161
+ <li class="never" data-hits="" data-linenumber="64">
1162
+
1163
+
1164
+ <code class="ruby"> end</code>
1165
+ </li>
1166
+
1167
+ <li class="never" data-hits="" data-linenumber="65">
1168
+
1169
+
1170
+ <code class="ruby">end</code>
1171
+ </li>
1172
+
1173
+ </ol>
1174
+ </pre>
1175
+ </div>
1176
+
1177
+ <div class="source_table" id="7ea710ee036930b7540634e0cd00f6d863839f93">
1178
+ <div class="header">
1179
+ <h3>lib/houston/notification.rb</h3>
1180
+ <h4><span class="green">97.96 %</span> covered</h4>
1181
+ <div>
1182
+ <b>49</b> relevant lines.
1183
+ <span class="green"><b>48</b> lines covered</span> and
1184
+ <span class="red"><b>1</b> lines missed.</span>
1185
+ </div>
1186
+ </div>
1187
+
1188
+ <pre>
1189
+ <ol>
1190
+
1191
+ <li class="covered" data-hits="1" data-linenumber="1">
1192
+ <span class="hits">1</span>
1193
+
1194
+ <code class="ruby">require &#39;json&#39;</code>
1195
+ </li>
1196
+
1197
+ <li class="never" data-hits="" data-linenumber="2">
1198
+
1199
+
1200
+ <code class="ruby"></code>
1201
+ </li>
1202
+
1203
+ <li class="covered" data-hits="1" data-linenumber="3">
1204
+ <span class="hits">1</span>
1205
+
1206
+ <code class="ruby">module Houston</code>
1207
+ </li>
1208
+
1209
+ <li class="covered" data-hits="1" data-linenumber="4">
1210
+ <span class="hits">1</span>
1211
+
1212
+ <code class="ruby"> class Notification</code>
1213
+ </li>
1214
+
1215
+ <li class="covered" data-hits="1" data-linenumber="5">
1216
+ <span class="hits">1</span>
1217
+
1218
+ <code class="ruby"> MAXIMUM_PAYLOAD_SIZE = 256</code>
1219
+ </li>
1220
+
1221
+ <li class="never" data-hits="" data-linenumber="6">
1222
+
1223
+
1224
+ <code class="ruby"></code>
1225
+ </li>
1226
+
1227
+ <li class="covered" data-hits="1" data-linenumber="7">
1228
+ <span class="hits">1</span>
1229
+
1230
+ <code class="ruby"> attr_accessor :token, :alert, :badge, :sound, :content_available, :custom_data, :id, :expiry, :priority</code>
1231
+ </li>
1232
+
1233
+ <li class="covered" data-hits="1" data-linenumber="8">
1234
+ <span class="hits">1</span>
1235
+
1236
+ <code class="ruby"> attr_reader :sent_at</code>
1237
+ </li>
1238
+
1239
+ <li class="never" data-hits="" data-linenumber="9">
1240
+
1241
+
1242
+ <code class="ruby"></code>
1243
+ </li>
1244
+
1245
+ <li class="covered" data-hits="1" data-linenumber="10">
1246
+ <span class="hits">1</span>
1247
+
1248
+ <code class="ruby"> alias :device :token</code>
1249
+ </li>
1250
+
1251
+ <li class="covered" data-hits="1" data-linenumber="11">
1252
+ <span class="hits">1</span>
1253
+
1254
+ <code class="ruby"> alias :device= :token=</code>
1255
+ </li>
1256
+
1257
+ <li class="never" data-hits="" data-linenumber="12">
1258
+
1259
+
1260
+ <code class="ruby"></code>
1261
+ </li>
1262
+
1263
+ <li class="covered" data-hits="1" data-linenumber="13">
1264
+ <span class="hits">1</span>
1265
+
1266
+ <code class="ruby"> def initialize(options = {})</code>
1267
+ </li>
1268
+
1269
+ <li class="covered" data-hits="31" data-linenumber="14">
1270
+ <span class="hits">31</span>
1271
+
1272
+ <code class="ruby"> @token = options.delete(:token) || options.delete(:device)</code>
1273
+ </li>
1274
+
1275
+ <li class="covered" data-hits="31" data-linenumber="15">
1276
+ <span class="hits">31</span>
1277
+
1278
+ <code class="ruby"> @alert = options.delete(:alert)</code>
1279
+ </li>
1280
+
1281
+ <li class="covered" data-hits="31" data-linenumber="16">
1282
+ <span class="hits">31</span>
1283
+
1284
+ <code class="ruby"> @badge = options.delete(:badge)</code>
1285
+ </li>
1286
+
1287
+ <li class="covered" data-hits="31" data-linenumber="17">
1288
+ <span class="hits">31</span>
1289
+
1290
+ <code class="ruby"> @sound = options.delete(:sound)</code>
1291
+ </li>
1292
+
1293
+ <li class="covered" data-hits="31" data-linenumber="18">
1294
+ <span class="hits">31</span>
1295
+
1296
+ <code class="ruby"> @expiry = options.delete(:expiry)</code>
1297
+ </li>
1298
+
1299
+ <li class="covered" data-hits="31" data-linenumber="19">
1300
+ <span class="hits">31</span>
1301
+
1302
+ <code class="ruby"> @id = options.delete(:id)</code>
1303
+ </li>
1304
+
1305
+ <li class="covered" data-hits="31" data-linenumber="20">
1306
+ <span class="hits">31</span>
1307
+
1308
+ <code class="ruby"> @priority = options.delete(:priority)</code>
1309
+ </li>
1310
+
1311
+ <li class="covered" data-hits="31" data-linenumber="21">
1312
+ <span class="hits">31</span>
1313
+
1314
+ <code class="ruby"> @content_available = options.delete(:content_available)</code>
1315
+ </li>
1316
+
1317
+ <li class="never" data-hits="" data-linenumber="22">
1318
+
1319
+
1320
+ <code class="ruby"></code>
1321
+ </li>
1322
+
1323
+ <li class="covered" data-hits="31" data-linenumber="23">
1324
+ <span class="hits">31</span>
1325
+
1326
+ <code class="ruby"> @custom_data = options</code>
1327
+ </li>
1328
+
1329
+ <li class="never" data-hits="" data-linenumber="24">
1330
+
1331
+
1332
+ <code class="ruby"> end</code>
1333
+ </li>
1334
+
1335
+ <li class="never" data-hits="" data-linenumber="25">
1336
+
1337
+
1338
+ <code class="ruby"></code>
1339
+ </li>
1340
+
1341
+ <li class="covered" data-hits="1" data-linenumber="26">
1342
+ <span class="hits">1</span>
1343
+
1344
+ <code class="ruby"> def payload</code>
1345
+ </li>
1346
+
1347
+ <li class="covered" data-hits="21" data-linenumber="27">
1348
+ <span class="hits">21</span>
1349
+
1350
+ <code class="ruby"> json = {}.merge(@custom_data || {})</code>
1351
+ </li>
1352
+
1353
+ <li class="covered" data-hits="21" data-linenumber="28">
1354
+ <span class="hits">21</span>
1355
+
1356
+ <code class="ruby"> json[&#39;aps&#39;] ||= {}</code>
1357
+ </li>
1358
+
1359
+ <li class="covered" data-hits="21" data-linenumber="29">
1360
+ <span class="hits">21</span>
1361
+
1362
+ <code class="ruby"> json[&#39;aps&#39;][&#39;alert&#39;] = @alert if @alert</code>
1363
+ </li>
1364
+
1365
+ <li class="covered" data-hits="21" data-linenumber="30">
1366
+ <span class="hits">21</span>
1367
+
1368
+ <code class="ruby"> json[&#39;aps&#39;][&#39;badge&#39;] = @badge.to_i rescue 0 if @badge</code>
1369
+ </li>
1370
+
1371
+ <li class="covered" data-hits="21" data-linenumber="31">
1372
+ <span class="hits">21</span>
1373
+
1374
+ <code class="ruby"> json[&#39;aps&#39;][&#39;sound&#39;] = @sound if @sound</code>
1375
+ </li>
1376
+
1377
+ <li class="covered" data-hits="21" data-linenumber="32">
1378
+ <span class="hits">21</span>
1379
+
1380
+ <code class="ruby"> json[&#39;aps&#39;][&#39;content-available&#39;] = 1 if @content_available</code>
1381
+ </li>
1382
+
1383
+ <li class="never" data-hits="" data-linenumber="33">
1384
+
1385
+
1386
+ <code class="ruby"></code>
1387
+ </li>
1388
+
1389
+ <li class="covered" data-hits="21" data-linenumber="34">
1390
+ <span class="hits">21</span>
1391
+
1392
+ <code class="ruby"> json</code>
1393
+ </li>
1394
+
1395
+ <li class="never" data-hits="" data-linenumber="35">
1396
+
1397
+
1398
+ <code class="ruby"> end</code>
1399
+ </li>
1400
+
1401
+ <li class="never" data-hits="" data-linenumber="36">
1402
+
1403
+
1404
+ <code class="ruby"></code>
1405
+ </li>
1406
+
1407
+ <li class="covered" data-hits="1" data-linenumber="37">
1408
+ <span class="hits">1</span>
1409
+
1410
+ <code class="ruby"> def message</code>
1411
+ </li>
1412
+
1413
+ <li class="covered" data-hits="14" data-linenumber="38">
1414
+ <span class="hits">14</span>
1415
+
1416
+ <code class="ruby"> data = [device_token_item,</code>
1417
+ </li>
1418
+
1419
+ <li class="never" data-hits="" data-linenumber="39">
1420
+
1421
+
1422
+ <code class="ruby"> payload_item,</code>
1423
+ </li>
1424
+
1425
+ <li class="never" data-hits="" data-linenumber="40">
1426
+
1427
+
1428
+ <code class="ruby"> identifier_item,</code>
1429
+ </li>
1430
+
1431
+ <li class="never" data-hits="" data-linenumber="41">
1432
+
1433
+
1434
+ <code class="ruby"> expiration_item,</code>
1435
+ </li>
1436
+
1437
+ <li class="never" data-hits="" data-linenumber="42">
1438
+
1439
+
1440
+ <code class="ruby"> priority_item].compact.join</code>
1441
+ </li>
1442
+
1443
+ <li class="covered" data-hits="14" data-linenumber="43">
1444
+ <span class="hits">14</span>
1445
+
1446
+ <code class="ruby"> [2, data.bytes.count, data].pack(&#39;cNa*&#39;)</code>
1447
+ </li>
1448
+
1449
+ <li class="never" data-hits="" data-linenumber="44">
1450
+
1451
+
1452
+ <code class="ruby"> end</code>
1453
+ </li>
1454
+
1455
+ <li class="never" data-hits="" data-linenumber="45">
1456
+
1457
+
1458
+ <code class="ruby"></code>
1459
+ </li>
1460
+
1461
+ <li class="covered" data-hits="1" data-linenumber="46">
1462
+ <span class="hits">1</span>
1463
+
1464
+ <code class="ruby"> def mark_as_sent!</code>
1465
+ </li>
1466
+
1467
+ <li class="covered" data-hits="2" data-linenumber="47">
1468
+ <span class="hits">2</span>
1469
+
1470
+ <code class="ruby"> @sent_at = Time.now</code>
1471
+ </li>
1472
+
1473
+ <li class="never" data-hits="" data-linenumber="48">
1474
+
1475
+
1476
+ <code class="ruby"> end</code>
1477
+ </li>
1478
+
1479
+ <li class="never" data-hits="" data-linenumber="49">
1480
+
1481
+
1482
+ <code class="ruby"></code>
1483
+ </li>
1484
+
1485
+ <li class="covered" data-hits="1" data-linenumber="50">
1486
+ <span class="hits">1</span>
1487
+
1488
+ <code class="ruby"> def mark_as_unsent!</code>
1489
+ </li>
1490
+
1491
+ <li class="covered" data-hits="1" data-linenumber="51">
1492
+ <span class="hits">1</span>
1493
+
1494
+ <code class="ruby"> @sent_at = nil</code>
1495
+ </li>
1496
+
1497
+ <li class="never" data-hits="" data-linenumber="52">
1498
+
1499
+
1500
+ <code class="ruby"> end</code>
1501
+ </li>
1502
+
1503
+ <li class="never" data-hits="" data-linenumber="53">
1504
+
1505
+
1506
+ <code class="ruby"></code>
1507
+ </li>
1508
+
1509
+ <li class="covered" data-hits="1" data-linenumber="54">
1510
+ <span class="hits">1</span>
1511
+
1512
+ <code class="ruby"> def sent?</code>
1513
+ </li>
1514
+
1515
+ <li class="covered" data-hits="3" data-linenumber="55">
1516
+ <span class="hits">3</span>
1517
+
1518
+ <code class="ruby"> !!@sent_at</code>
1519
+ </li>
1520
+
1521
+ <li class="never" data-hits="" data-linenumber="56">
1522
+
1523
+
1524
+ <code class="ruby"> end</code>
1525
+ </li>
1526
+
1527
+ <li class="never" data-hits="" data-linenumber="57">
1528
+
1529
+
1530
+ <code class="ruby"></code>
1531
+ </li>
1532
+
1533
+ <li class="covered" data-hits="1" data-linenumber="58">
1534
+ <span class="hits">1</span>
1535
+
1536
+ <code class="ruby"> def valid?</code>
1537
+ </li>
1538
+
1539
+ <li class="missed" data-hits="0" data-linenumber="59">
1540
+
1541
+
1542
+ <code class="ruby"> payload.to_json.bytesize &lt;= MAXIMUM_PAYLOAD_SIZE</code>
1543
+ </li>
1544
+
1545
+ <li class="never" data-hits="" data-linenumber="60">
1546
+
1547
+
1548
+ <code class="ruby"> end</code>
1549
+ </li>
1550
+
1551
+ <li class="never" data-hits="" data-linenumber="61">
1552
+
1553
+
1554
+ <code class="ruby"></code>
1555
+ </li>
1556
+
1557
+ <li class="covered" data-hits="1" data-linenumber="62">
1558
+ <span class="hits">1</span>
1559
+
1560
+ <code class="ruby"> private</code>
1561
+ </li>
1562
+
1563
+ <li class="never" data-hits="" data-linenumber="63">
1564
+
1565
+
1566
+ <code class="ruby"> </code>
1567
+ </li>
1568
+
1569
+ <li class="covered" data-hits="1" data-linenumber="64">
1570
+ <span class="hits">1</span>
1571
+
1572
+ <code class="ruby"> def device_token_item</code>
1573
+ </li>
1574
+
1575
+ <li class="covered" data-hits="14" data-linenumber="65">
1576
+ <span class="hits">14</span>
1577
+
1578
+ <code class="ruby"> [1, 32, @token.gsub(/[&lt;\s&gt;]/, &#39;&#39;)].pack(&#39;cnH*&#39;)</code>
1579
+ </li>
1580
+
1581
+ <li class="never" data-hits="" data-linenumber="66">
1582
+
1583
+
1584
+ <code class="ruby"> end</code>
1585
+ </li>
1586
+
1587
+ <li class="never" data-hits="" data-linenumber="67">
1588
+
1589
+
1590
+ <code class="ruby"></code>
1591
+ </li>
1592
+
1593
+ <li class="covered" data-hits="1" data-linenumber="68">
1594
+ <span class="hits">1</span>
1595
+
1596
+ <code class="ruby"> def payload_item</code>
1597
+ </li>
1598
+
1599
+ <li class="covered" data-hits="14" data-linenumber="69">
1600
+ <span class="hits">14</span>
1601
+
1602
+ <code class="ruby"> json = payload.to_json</code>
1603
+ </li>
1604
+
1605
+ <li class="covered" data-hits="14" data-linenumber="70">
1606
+ <span class="hits">14</span>
1607
+
1608
+ <code class="ruby"> [2, json.bytes.count, json].pack(&#39;cna*&#39;)</code>
1609
+ </li>
1610
+
1611
+ <li class="never" data-hits="" data-linenumber="71">
1612
+
1613
+
1614
+ <code class="ruby"> end</code>
1615
+ </li>
1616
+
1617
+ <li class="never" data-hits="" data-linenumber="72">
1618
+
1619
+
1620
+ <code class="ruby"></code>
1621
+ </li>
1622
+
1623
+ <li class="covered" data-hits="1" data-linenumber="73">
1624
+ <span class="hits">1</span>
1625
+
1626
+ <code class="ruby"> def identifier_item</code>
1627
+ </li>
1628
+
1629
+ <li class="covered" data-hits="14" data-linenumber="74">
1630
+ <span class="hits">14</span>
1631
+
1632
+ <code class="ruby"> [3, 4, @id].pack(&#39;cnN&#39;) unless @id.nil?</code>
1633
+ </li>
1634
+
1635
+ <li class="never" data-hits="" data-linenumber="75">
1636
+
1637
+
1638
+ <code class="ruby"> end</code>
1639
+ </li>
1640
+
1641
+ <li class="never" data-hits="" data-linenumber="76">
1642
+
1643
+
1644
+ <code class="ruby"></code>
1645
+ </li>
1646
+
1647
+ <li class="covered" data-hits="1" data-linenumber="77">
1648
+ <span class="hits">1</span>
1649
+
1650
+ <code class="ruby"> def expiration_item</code>
1651
+ </li>
1652
+
1653
+ <li class="covered" data-hits="14" data-linenumber="78">
1654
+ <span class="hits">14</span>
1655
+
1656
+ <code class="ruby"> [4, 4, @expiry.to_i].pack(&#39;cnN&#39;) unless @expiry.nil?</code>
1657
+ </li>
1658
+
1659
+ <li class="never" data-hits="" data-linenumber="79">
1660
+
1661
+
1662
+ <code class="ruby"> end</code>
1663
+ </li>
1664
+
1665
+ <li class="never" data-hits="" data-linenumber="80">
1666
+
1667
+
1668
+ <code class="ruby"></code>
1669
+ </li>
1670
+
1671
+ <li class="covered" data-hits="1" data-linenumber="81">
1672
+ <span class="hits">1</span>
1673
+
1674
+ <code class="ruby"> def priority_item</code>
1675
+ </li>
1676
+
1677
+ <li class="covered" data-hits="14" data-linenumber="82">
1678
+ <span class="hits">14</span>
1679
+
1680
+ <code class="ruby"> [5, 1, @priority].pack(&#39;cnc&#39;) unless @priority.nil?</code>
1681
+ </li>
1682
+
1683
+ <li class="never" data-hits="" data-linenumber="83">
1684
+
1685
+
1686
+ <code class="ruby"> end</code>
1687
+ </li>
1688
+
1689
+ <li class="never" data-hits="" data-linenumber="84">
1690
+
1691
+
1692
+ <code class="ruby"> end</code>
1693
+ </li>
1694
+
1695
+ <li class="never" data-hits="" data-linenumber="85">
1696
+
1697
+
1698
+ <code class="ruby">end</code>
1699
+ </li>
1700
+
1701
+ </ol>
1702
+ </pre>
1703
+ </div>
1704
+
1705
+ </div>
1706
+ </div>
1707
+ </body>
1708
+ </html>