houston 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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>