houston 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +22 -16
  3. data/README.md +19 -1
  4. data/bin/apn +3 -0
  5. data/coverage/assets/0.8.0/application.css +799 -0
  6. data/coverage/assets/0.8.0/application.js +1559 -0
  7. data/coverage/assets/0.8.0/colorbox/border.png +0 -0
  8. data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
  9. data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
  10. data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
  11. data/coverage/assets/0.8.0/favicon_green.png +0 -0
  12. data/coverage/assets/0.8.0/favicon_red.png +0 -0
  13. data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
  14. data/coverage/assets/0.8.0/loading.gif +0 -0
  15. data/coverage/assets/0.8.0/magnify.png +0 -0
  16. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  17. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  18. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  19. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  20. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  21. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  22. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  23. data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  24. data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  25. data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  26. data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  27. data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  28. data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  29. data/coverage/index.html +319 -163
  30. data/houston.gemspec +1 -1
  31. data/lib/houston/client.rb +1 -0
  32. data/lib/houston/notification.rb +30 -5
  33. data/lib/houston/version.rb +1 -1
  34. data/spec/client_spec.rb +2 -2
  35. data/spec/notification_spec.rb +23 -10
  36. metadata +28 -4
Binary file
Binary file
data/coverage/index.html CHANGED
@@ -3,38 +3,38 @@
3
3
  <head>
4
4
  <title>Code coverage for Houston</title>
5
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" />
6
+ <script src='./assets/0.8.0/application.js' type='text/javascript'></script>
7
+ <link href='./assets/0.8.0/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
+ <link rel="shortcut icon" type="image/png" href="./assets/0.8.0/favicon_red.png" />
9
+ <link rel="icon" type="image/png" href="./assets/0.8.0/favicon.png" />
10
10
  </head>
11
11
 
12
12
  <body>
13
13
  <div id="loading">
14
- <img src="./assets/0.7.1/loading.gif" alt="loading"/>
14
+ <img src="./assets/0.8.0/loading.gif" alt="loading"/>
15
15
  </div>
16
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>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2014-08-09T16:18:14-04:00">2014-08-09T16:18:14-04:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
21
21
  <div class="file_list_container" id="AllFiles">
22
22
  <h2>
23
23
  <span class="group_name">All Files</span>
24
- (<span class="covered_percent"><span class="red">67.95%</span></span>
24
+ (<span class="covered_percent"><span class="red">68.29%</span></span>
25
25
  covered at
26
26
  <span class="covered_strength">
27
27
  <span class="green">
28
- 3.75
28
+ 5.21
29
29
  </span>
30
30
  </span> hits/line)
31
31
  </h2>
32
32
  <a name="AllFiles"></a>
33
33
  <div>
34
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>
35
+ <b>164</b> relevant lines.
36
+ <span class="green"><b>112</b> lines covered</span> and
37
+ <span class="red"><b>52</b> lines missed </span>
38
38
  </div>
39
39
  <table class="file_list">
40
40
  <thead>
@@ -62,11 +62,11 @@
62
62
 
63
63
  <tr>
64
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>
65
+ <td class="red strong">57.81 %</td>
66
+ <td>101</td>
67
+ <td>64</td>
68
68
  <td>37</td>
69
- <td>26</td>
69
+ <td>27</td>
70
70
  <td>2.1</td>
71
71
  </tr>
72
72
 
@@ -82,12 +82,12 @@
82
82
 
83
83
  <tr>
84
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>
85
+ <td class="green strong">96.43 %</td>
86
+ <td>110</td>
87
+ <td>56</td>
88
+ <td>54</td>
89
+ <td>2</td>
90
+ <td>12.5</td>
91
91
  </tr>
92
92
 
93
93
  </tbody>
@@ -99,8 +99,8 @@
99
99
  </div>
100
100
 
101
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/>
102
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.9.0
103
+ and simplecov-html v0.8.0<br/>
104
104
  using RSpec
105
105
  </div>
106
106
 
@@ -151,11 +151,11 @@
151
151
  <div class="source_table" id="a3eaf6c199f250e522479598f621cf8c25128a64">
152
152
  <div class="header">
153
153
  <h3>lib/houston/client.rb</h3>
154
- <h4><span class="red">58.73 %</span> covered</h4>
154
+ <h4><span class="red">57.81 %</span> covered</h4>
155
155
  <div>
156
- <b>63</b> relevant lines.
156
+ <b>64</b> relevant lines.
157
157
  <span class="green"><b>37</b> lines covered</span> and
158
- <span class="red"><b>26</b> lines missed.</span>
158
+ <span class="red"><b>27</b> lines missed.</span>
159
159
  </div>
160
160
  </div>
161
161
 
@@ -609,154 +609,160 @@
609
609
  <li class="missed" data-hits="0" data-linenumber="75">
610
610
 
611
611
 
612
- <code class="ruby"> notifications.slice!(0..index)</code>
612
+ <code class="ruby"> notifications[index].apns_error_code = status</code>
613
613
  </li>
614
614
 
615
615
  <li class="missed" data-hits="0" data-linenumber="76">
616
616
 
617
617
 
618
- <code class="ruby"> notifications.each(&amp;:mark_as_unsent!)</code>
618
+ <code class="ruby"> notifications.slice!(0..index)</code>
619
619
  </li>
620
620
 
621
621
  <li class="missed" data-hits="0" data-linenumber="77">
622
622
 
623
623
 
624
+ <code class="ruby"> notifications.each(&amp;:mark_as_unsent!)</code>
625
+ </li>
626
+
627
+ <li class="missed" data-hits="0" data-linenumber="78">
628
+
629
+
624
630
  <code class="ruby"> push(*notifications)</code>
625
631
  </li>
626
632
 
627
- <li class="never" data-hits="" data-linenumber="78">
633
+ <li class="never" data-hits="" data-linenumber="79">
628
634
 
629
635
 
630
636
  <code class="ruby"> end</code>
631
637
  </li>
632
638
 
633
- <li class="never" data-hits="" data-linenumber="79">
639
+ <li class="never" data-hits="" data-linenumber="80">
634
640
 
635
641
 
636
642
  <code class="ruby"> end</code>
637
643
  </li>
638
644
 
639
- <li class="never" data-hits="" data-linenumber="80">
645
+ <li class="never" data-hits="" data-linenumber="81">
640
646
 
641
647
 
642
648
  <code class="ruby"></code>
643
649
  </li>
644
650
 
645
- <li class="covered" data-hits="1" data-linenumber="81">
651
+ <li class="covered" data-hits="1" data-linenumber="82">
646
652
  <span class="hits">1</span>
647
653
 
648
654
  <code class="ruby"> def unregistered_devices</code>
649
655
  </li>
650
656
 
651
- <li class="covered" data-hits="2" data-linenumber="82">
657
+ <li class="covered" data-hits="2" data-linenumber="83">
652
658
  <span class="hits">2</span>
653
659
 
654
660
  <code class="ruby"> devices = []</code>
655
661
  </li>
656
662
 
657
- <li class="never" data-hits="" data-linenumber="83">
663
+ <li class="never" data-hits="" data-linenumber="84">
658
664
 
659
665
 
660
666
  <code class="ruby"></code>
661
667
  </li>
662
668
 
663
- <li class="covered" data-hits="2" data-linenumber="84">
669
+ <li class="covered" data-hits="2" data-linenumber="85">
664
670
  <span class="hits">2</span>
665
671
 
666
672
  <code class="ruby"> Connection.open(@feedback_uri, @certificate, @passphrase) do |connection|</code>
667
673
  </li>
668
674
 
669
- <li class="covered" data-hits="2" data-linenumber="85">
675
+ <li class="covered" data-hits="2" data-linenumber="86">
670
676
  <span class="hits">2</span>
671
677
 
672
678
  <code class="ruby"> while line = connection.read(38)</code>
673
679
  </li>
674
680
 
675
- <li class="covered" data-hits="4" data-linenumber="86">
681
+ <li class="covered" data-hits="4" data-linenumber="87">
676
682
  <span class="hits">4</span>
677
683
 
678
684
  <code class="ruby"> feedback = line.unpack(&#39;N1n1H140&#39;)</code>
679
685
  </li>
680
686
 
681
- <li class="covered" data-hits="4" data-linenumber="87">
687
+ <li class="covered" data-hits="4" data-linenumber="88">
682
688
  <span class="hits">4</span>
683
689
 
684
690
  <code class="ruby"> timestamp = feedback[0]</code>
685
691
  </li>
686
692
 
687
- <li class="covered" data-hits="4" data-linenumber="88">
693
+ <li class="covered" data-hits="4" data-linenumber="89">
688
694
  <span class="hits">4</span>
689
695
 
690
696
  <code class="ruby"> token = feedback[2].scan(/.{0,8}/).join(&#39; &#39;).strip</code>
691
697
  </li>
692
698
 
693
- <li class="covered" data-hits="4" data-linenumber="89">
699
+ <li class="covered" data-hits="4" data-linenumber="90">
694
700
  <span class="hits">4</span>
695
701
 
696
702
  <code class="ruby"> devices &lt;&lt; {token: token, timestamp: timestamp} if token &amp;&amp; timestamp</code>
697
703
  </li>
698
704
 
699
- <li class="never" data-hits="" data-linenumber="90">
705
+ <li class="never" data-hits="" data-linenumber="91">
700
706
 
701
707
 
702
708
  <code class="ruby"> end</code>
703
709
  </li>
704
710
 
705
- <li class="never" data-hits="" data-linenumber="91">
711
+ <li class="never" data-hits="" data-linenumber="92">
706
712
 
707
713
 
708
714
  <code class="ruby"> end</code>
709
715
  </li>
710
716
 
711
- <li class="never" data-hits="" data-linenumber="92">
717
+ <li class="never" data-hits="" data-linenumber="93">
712
718
 
713
719
 
714
720
  <code class="ruby"></code>
715
721
  </li>
716
722
 
717
- <li class="covered" data-hits="2" data-linenumber="93">
723
+ <li class="covered" data-hits="2" data-linenumber="94">
718
724
  <span class="hits">2</span>
719
725
 
720
726
  <code class="ruby"> devices</code>
721
727
  </li>
722
728
 
723
- <li class="never" data-hits="" data-linenumber="94">
729
+ <li class="never" data-hits="" data-linenumber="95">
724
730
 
725
731
 
726
732
  <code class="ruby"> end</code>
727
733
  </li>
728
734
 
729
- <li class="never" data-hits="" data-linenumber="95">
735
+ <li class="never" data-hits="" data-linenumber="96">
730
736
 
731
737
 
732
738
  <code class="ruby"></code>
733
739
  </li>
734
740
 
735
- <li class="covered" data-hits="1" data-linenumber="96">
741
+ <li class="covered" data-hits="1" data-linenumber="97">
736
742
  <span class="hits">1</span>
737
743
 
738
744
  <code class="ruby"> def devices</code>
739
745
  </li>
740
746
 
741
- <li class="covered" data-hits="3" data-linenumber="97">
747
+ <li class="covered" data-hits="3" data-linenumber="98">
742
748
  <span class="hits">3</span>
743
749
 
744
750
  <code class="ruby"> unregistered_devices.collect{|device| device[:token]}</code>
745
751
  </li>
746
752
 
747
- <li class="never" data-hits="" data-linenumber="98">
753
+ <li class="never" data-hits="" data-linenumber="99">
748
754
 
749
755
 
750
756
  <code class="ruby"> end</code>
751
757
  </li>
752
758
 
753
- <li class="never" data-hits="" data-linenumber="99">
759
+ <li class="never" data-hits="" data-linenumber="100">
754
760
 
755
761
 
756
762
  <code class="ruby"> end</code>
757
763
  </li>
758
764
 
759
- <li class="never" data-hits="" data-linenumber="100">
765
+ <li class="never" data-hits="" data-linenumber="101">
760
766
 
761
767
 
762
768
  <code class="ruby">end</code>
@@ -1177,11 +1183,11 @@
1177
1183
  <div class="source_table" id="7ea710ee036930b7540634e0cd00f6d863839f93">
1178
1184
  <div class="header">
1179
1185
  <h3>lib/houston/notification.rb</h3>
1180
- <h4><span class="green">97.96 %</span> covered</h4>
1186
+ <h4><span class="green">96.43 %</span> covered</h4>
1181
1187
  <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>
1188
+ <b>56</b> relevant lines.
1189
+ <span class="green"><b>54</b> lines covered</span> and
1190
+ <span class="red"><b>2</b> lines missed.</span>
1185
1191
  </div>
1186
1192
  </div>
1187
1193
 
@@ -1215,484 +1221,634 @@
1215
1221
  <li class="covered" data-hits="1" data-linenumber="5">
1216
1222
  <span class="hits">1</span>
1217
1223
 
1218
- <code class="ruby"> MAXIMUM_PAYLOAD_SIZE = 256</code>
1224
+ <code class="ruby"> class APNSError &lt; RuntimeError</code>
1219
1225
  </li>
1220
1226
 
1221
1227
  <li class="never" data-hits="" data-linenumber="6">
1222
1228
 
1223
1229
 
1224
- <code class="ruby"></code>
1230
+ <code class="ruby"> # See: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW12</code>
1225
1231
  </li>
1226
1232
 
1227
1233
  <li class="covered" data-hits="1" data-linenumber="7">
1228
1234
  <span class="hits">1</span>
1229
1235
 
1230
- <code class="ruby"> attr_accessor :token, :alert, :badge, :sound, :content_available, :custom_data, :id, :expiry, :priority</code>
1236
+ <code class="ruby"> CODES = {</code>
1231
1237
  </li>
1232
1238
 
1233
- <li class="covered" data-hits="1" data-linenumber="8">
1239
+ <li class="never" data-hits="" data-linenumber="8">
1240
+
1241
+
1242
+ <code class="ruby"> 0 =&gt; &quot;No errors encountered&quot;,</code>
1243
+ </li>
1244
+
1245
+ <li class="never" data-hits="" data-linenumber="9">
1246
+
1247
+
1248
+ <code class="ruby"> 1 =&gt; &quot;Processing error&quot;,</code>
1249
+ </li>
1250
+
1251
+ <li class="never" data-hits="" data-linenumber="10">
1252
+
1253
+
1254
+ <code class="ruby"> 2 =&gt; &quot;Missing device token&quot;,</code>
1255
+ </li>
1256
+
1257
+ <li class="never" data-hits="" data-linenumber="11">
1258
+
1259
+
1260
+ <code class="ruby"> 3 =&gt; &quot;Missing topic&quot;,</code>
1261
+ </li>
1262
+
1263
+ <li class="never" data-hits="" data-linenumber="12">
1264
+
1265
+
1266
+ <code class="ruby"> 4 =&gt; &quot;Missing payload&quot;,</code>
1267
+ </li>
1268
+
1269
+ <li class="never" data-hits="" data-linenumber="13">
1270
+
1271
+
1272
+ <code class="ruby"> 5 =&gt; &quot;Invalid token size&quot;,</code>
1273
+ </li>
1274
+
1275
+ <li class="never" data-hits="" data-linenumber="14">
1276
+
1277
+
1278
+ <code class="ruby"> 6 =&gt; &quot;Invalid topic size&quot;,</code>
1279
+ </li>
1280
+
1281
+ <li class="never" data-hits="" data-linenumber="15">
1282
+
1283
+
1284
+ <code class="ruby"> 7 =&gt; &quot;Invalid payload size&quot;,</code>
1285
+ </li>
1286
+
1287
+ <li class="never" data-hits="" data-linenumber="16">
1288
+
1289
+
1290
+ <code class="ruby"> 8 =&gt; &quot;Invalid token&quot;,</code>
1291
+ </li>
1292
+
1293
+ <li class="never" data-hits="" data-linenumber="17">
1294
+
1295
+
1296
+ <code class="ruby"> 10 =&gt; &quot;Shutdown&quot;,</code>
1297
+ </li>
1298
+
1299
+ <li class="never" data-hits="" data-linenumber="18">
1300
+
1301
+
1302
+ <code class="ruby"> 255 =&gt; &quot;Unknown error&quot;</code>
1303
+ </li>
1304
+
1305
+ <li class="never" data-hits="" data-linenumber="19">
1306
+
1307
+
1308
+ <code class="ruby"> }</code>
1309
+ </li>
1310
+
1311
+ <li class="never" data-hits="" data-linenumber="20">
1312
+
1313
+
1314
+ <code class="ruby"> end</code>
1315
+ </li>
1316
+
1317
+ <li class="never" data-hits="" data-linenumber="21">
1318
+
1319
+
1320
+ <code class="ruby"></code>
1321
+ </li>
1322
+
1323
+ <li class="covered" data-hits="1" data-linenumber="22">
1324
+ <span class="hits">1</span>
1325
+
1326
+ <code class="ruby"> MAXIMUM_PAYLOAD_SIZE = 2048</code>
1327
+ </li>
1328
+
1329
+ <li class="never" data-hits="" data-linenumber="23">
1330
+
1331
+
1332
+ <code class="ruby"></code>
1333
+ </li>
1334
+
1335
+ <li class="covered" data-hits="1" data-linenumber="24">
1336
+ <span class="hits">1</span>
1337
+
1338
+ <code class="ruby"> attr_accessor :token, :alert, :badge, :sound, :category, :content_available, :custom_data, :id, :expiry, :priority</code>
1339
+ </li>
1340
+
1341
+ <li class="covered" data-hits="1" data-linenumber="25">
1234
1342
  <span class="hits">1</span>
1235
1343
 
1236
1344
  <code class="ruby"> attr_reader :sent_at</code>
1237
1345
  </li>
1238
1346
 
1239
- <li class="never" data-hits="" data-linenumber="9">
1347
+ <li class="covered" data-hits="1" data-linenumber="26">
1348
+ <span class="hits">1</span>
1349
+
1350
+ <code class="ruby"> attr_writer :apns_error_code</code>
1351
+ </li>
1352
+
1353
+ <li class="never" data-hits="" data-linenumber="27">
1240
1354
 
1241
1355
 
1242
1356
  <code class="ruby"></code>
1243
1357
  </li>
1244
1358
 
1245
- <li class="covered" data-hits="1" data-linenumber="10">
1359
+ <li class="covered" data-hits="1" data-linenumber="28">
1246
1360
  <span class="hits">1</span>
1247
1361
 
1248
1362
  <code class="ruby"> alias :device :token</code>
1249
1363
  </li>
1250
1364
 
1251
- <li class="covered" data-hits="1" data-linenumber="11">
1365
+ <li class="covered" data-hits="1" data-linenumber="29">
1252
1366
  <span class="hits">1</span>
1253
1367
 
1254
1368
  <code class="ruby"> alias :device= :token=</code>
1255
1369
  </li>
1256
1370
 
1257
- <li class="never" data-hits="" data-linenumber="12">
1371
+ <li class="never" data-hits="" data-linenumber="30">
1258
1372
 
1259
1373
 
1260
1374
  <code class="ruby"></code>
1261
1375
  </li>
1262
1376
 
1263
- <li class="covered" data-hits="1" data-linenumber="13">
1377
+ <li class="covered" data-hits="1" data-linenumber="31">
1264
1378
  <span class="hits">1</span>
1265
1379
 
1266
1380
  <code class="ruby"> def initialize(options = {})</code>
1267
1381
  </li>
1268
1382
 
1269
- <li class="covered" data-hits="31" data-linenumber="14">
1270
- <span class="hits">31</span>
1383
+ <li class="covered" data-hits="33" data-linenumber="32">
1384
+ <span class="hits">33</span>
1271
1385
 
1272
1386
  <code class="ruby"> @token = options.delete(:token) || options.delete(:device)</code>
1273
1387
  </li>
1274
1388
 
1275
- <li class="covered" data-hits="31" data-linenumber="15">
1276
- <span class="hits">31</span>
1389
+ <li class="covered" data-hits="33" data-linenumber="33">
1390
+ <span class="hits">33</span>
1277
1391
 
1278
1392
  <code class="ruby"> @alert = options.delete(:alert)</code>
1279
1393
  </li>
1280
1394
 
1281
- <li class="covered" data-hits="31" data-linenumber="16">
1282
- <span class="hits">31</span>
1395
+ <li class="covered" data-hits="33" data-linenumber="34">
1396
+ <span class="hits">33</span>
1283
1397
 
1284
1398
  <code class="ruby"> @badge = options.delete(:badge)</code>
1285
1399
  </li>
1286
1400
 
1287
- <li class="covered" data-hits="31" data-linenumber="17">
1288
- <span class="hits">31</span>
1401
+ <li class="covered" data-hits="33" data-linenumber="35">
1402
+ <span class="hits">33</span>
1289
1403
 
1290
1404
  <code class="ruby"> @sound = options.delete(:sound)</code>
1291
1405
  </li>
1292
1406
 
1293
- <li class="covered" data-hits="31" data-linenumber="18">
1294
- <span class="hits">31</span>
1407
+ <li class="covered" data-hits="33" data-linenumber="36">
1408
+ <span class="hits">33</span>
1409
+
1410
+ <code class="ruby"> @category = options.delete(:category)</code>
1411
+ </li>
1412
+
1413
+ <li class="covered" data-hits="33" data-linenumber="37">
1414
+ <span class="hits">33</span>
1295
1415
 
1296
1416
  <code class="ruby"> @expiry = options.delete(:expiry)</code>
1297
1417
  </li>
1298
1418
 
1299
- <li class="covered" data-hits="31" data-linenumber="19">
1300
- <span class="hits">31</span>
1419
+ <li class="covered" data-hits="33" data-linenumber="38">
1420
+ <span class="hits">33</span>
1301
1421
 
1302
1422
  <code class="ruby"> @id = options.delete(:id)</code>
1303
1423
  </li>
1304
1424
 
1305
- <li class="covered" data-hits="31" data-linenumber="20">
1306
- <span class="hits">31</span>
1425
+ <li class="covered" data-hits="33" data-linenumber="39">
1426
+ <span class="hits">33</span>
1307
1427
 
1308
1428
  <code class="ruby"> @priority = options.delete(:priority)</code>
1309
1429
  </li>
1310
1430
 
1311
- <li class="covered" data-hits="31" data-linenumber="21">
1312
- <span class="hits">31</span>
1431
+ <li class="covered" data-hits="33" data-linenumber="40">
1432
+ <span class="hits">33</span>
1313
1433
 
1314
1434
  <code class="ruby"> @content_available = options.delete(:content_available)</code>
1315
1435
  </li>
1316
1436
 
1317
- <li class="never" data-hits="" data-linenumber="22">
1437
+ <li class="never" data-hits="" data-linenumber="41">
1318
1438
 
1319
1439
 
1320
1440
  <code class="ruby"></code>
1321
1441
  </li>
1322
1442
 
1323
- <li class="covered" data-hits="31" data-linenumber="23">
1324
- <span class="hits">31</span>
1443
+ <li class="covered" data-hits="33" data-linenumber="42">
1444
+ <span class="hits">33</span>
1325
1445
 
1326
1446
  <code class="ruby"> @custom_data = options</code>
1327
1447
  </li>
1328
1448
 
1329
- <li class="never" data-hits="" data-linenumber="24">
1449
+ <li class="never" data-hits="" data-linenumber="43">
1330
1450
 
1331
1451
 
1332
1452
  <code class="ruby"> end</code>
1333
1453
  </li>
1334
1454
 
1335
- <li class="never" data-hits="" data-linenumber="25">
1455
+ <li class="never" data-hits="" data-linenumber="44">
1336
1456
 
1337
1457
 
1338
1458
  <code class="ruby"></code>
1339
1459
  </li>
1340
1460
 
1341
- <li class="covered" data-hits="1" data-linenumber="26">
1461
+ <li class="covered" data-hits="1" data-linenumber="45">
1342
1462
  <span class="hits">1</span>
1343
1463
 
1344
1464
  <code class="ruby"> def payload</code>
1345
1465
  </li>
1346
1466
 
1347
- <li class="covered" data-hits="21" data-linenumber="27">
1348
- <span class="hits">21</span>
1467
+ <li class="covered" data-hits="59" data-linenumber="46">
1468
+ <span class="hits">59</span>
1349
1469
 
1350
- <code class="ruby"> json = {}.merge(@custom_data || {})</code>
1470
+ <code class="ruby"> json = {}.merge(@custom_data || {}).inject({}){|h,(k,v)| h[k.to_s] = v; h}</code>
1351
1471
  </li>
1352
1472
 
1353
- <li class="covered" data-hits="21" data-linenumber="28">
1354
- <span class="hits">21</span>
1473
+ <li class="never" data-hits="" data-linenumber="47">
1474
+
1475
+
1476
+ <code class="ruby"></code>
1477
+ </li>
1478
+
1479
+ <li class="covered" data-hits="23" data-linenumber="48">
1480
+ <span class="hits">23</span>
1355
1481
 
1356
1482
  <code class="ruby"> json[&#39;aps&#39;] ||= {}</code>
1357
1483
  </li>
1358
1484
 
1359
- <li class="covered" data-hits="21" data-linenumber="29">
1360
- <span class="hits">21</span>
1485
+ <li class="covered" data-hits="23" data-linenumber="49">
1486
+ <span class="hits">23</span>
1361
1487
 
1362
1488
  <code class="ruby"> json[&#39;aps&#39;][&#39;alert&#39;] = @alert if @alert</code>
1363
1489
  </li>
1364
1490
 
1365
- <li class="covered" data-hits="21" data-linenumber="30">
1366
- <span class="hits">21</span>
1491
+ <li class="covered" data-hits="23" data-linenumber="50">
1492
+ <span class="hits">23</span>
1367
1493
 
1368
1494
  <code class="ruby"> json[&#39;aps&#39;][&#39;badge&#39;] = @badge.to_i rescue 0 if @badge</code>
1369
1495
  </li>
1370
1496
 
1371
- <li class="covered" data-hits="21" data-linenumber="31">
1372
- <span class="hits">21</span>
1497
+ <li class="covered" data-hits="23" data-linenumber="51">
1498
+ <span class="hits">23</span>
1373
1499
 
1374
1500
  <code class="ruby"> json[&#39;aps&#39;][&#39;sound&#39;] = @sound if @sound</code>
1375
1501
  </li>
1376
1502
 
1377
- <li class="covered" data-hits="21" data-linenumber="32">
1378
- <span class="hits">21</span>
1503
+ <li class="covered" data-hits="23" data-linenumber="52">
1504
+ <span class="hits">23</span>
1505
+
1506
+ <code class="ruby"> json[&#39;aps&#39;][&#39;category&#39;] = @category if @category</code>
1507
+ </li>
1508
+
1509
+ <li class="covered" data-hits="23" data-linenumber="53">
1510
+ <span class="hits">23</span>
1379
1511
 
1380
1512
  <code class="ruby"> json[&#39;aps&#39;][&#39;content-available&#39;] = 1 if @content_available</code>
1381
1513
  </li>
1382
1514
 
1383
- <li class="never" data-hits="" data-linenumber="33">
1515
+ <li class="never" data-hits="" data-linenumber="54">
1384
1516
 
1385
1517
 
1386
1518
  <code class="ruby"></code>
1387
1519
  </li>
1388
1520
 
1389
- <li class="covered" data-hits="21" data-linenumber="34">
1390
- <span class="hits">21</span>
1521
+ <li class="covered" data-hits="23" data-linenumber="55">
1522
+ <span class="hits">23</span>
1391
1523
 
1392
1524
  <code class="ruby"> json</code>
1393
1525
  </li>
1394
1526
 
1395
- <li class="never" data-hits="" data-linenumber="35">
1527
+ <li class="never" data-hits="" data-linenumber="56">
1396
1528
 
1397
1529
 
1398
1530
  <code class="ruby"> end</code>
1399
1531
  </li>
1400
1532
 
1401
- <li class="never" data-hits="" data-linenumber="36">
1533
+ <li class="never" data-hits="" data-linenumber="57">
1402
1534
 
1403
1535
 
1404
1536
  <code class="ruby"></code>
1405
1537
  </li>
1406
1538
 
1407
- <li class="covered" data-hits="1" data-linenumber="37">
1539
+ <li class="covered" data-hits="1" data-linenumber="58">
1408
1540
  <span class="hits">1</span>
1409
1541
 
1410
1542
  <code class="ruby"> def message</code>
1411
1543
  </li>
1412
1544
 
1413
- <li class="covered" data-hits="14" data-linenumber="38">
1414
- <span class="hits">14</span>
1545
+ <li class="covered" data-hits="15" data-linenumber="59">
1546
+ <span class="hits">15</span>
1415
1547
 
1416
1548
  <code class="ruby"> data = [device_token_item,</code>
1417
1549
  </li>
1418
1550
 
1419
- <li class="never" data-hits="" data-linenumber="39">
1551
+ <li class="never" data-hits="" data-linenumber="60">
1420
1552
 
1421
1553
 
1422
1554
  <code class="ruby"> payload_item,</code>
1423
1555
  </li>
1424
1556
 
1425
- <li class="never" data-hits="" data-linenumber="40">
1557
+ <li class="never" data-hits="" data-linenumber="61">
1426
1558
 
1427
1559
 
1428
1560
  <code class="ruby"> identifier_item,</code>
1429
1561
  </li>
1430
1562
 
1431
- <li class="never" data-hits="" data-linenumber="41">
1563
+ <li class="never" data-hits="" data-linenumber="62">
1432
1564
 
1433
1565
 
1434
1566
  <code class="ruby"> expiration_item,</code>
1435
1567
  </li>
1436
1568
 
1437
- <li class="never" data-hits="" data-linenumber="42">
1569
+ <li class="never" data-hits="" data-linenumber="63">
1438
1570
 
1439
1571
 
1440
1572
  <code class="ruby"> priority_item].compact.join</code>
1441
1573
  </li>
1442
1574
 
1443
- <li class="covered" data-hits="14" data-linenumber="43">
1444
- <span class="hits">14</span>
1575
+ <li class="covered" data-hits="15" data-linenumber="64">
1576
+ <span class="hits">15</span>
1445
1577
 
1446
1578
  <code class="ruby"> [2, data.bytes.count, data].pack(&#39;cNa*&#39;)</code>
1447
1579
  </li>
1448
1580
 
1449
- <li class="never" data-hits="" data-linenumber="44">
1581
+ <li class="never" data-hits="" data-linenumber="65">
1450
1582
 
1451
1583
 
1452
1584
  <code class="ruby"> end</code>
1453
1585
  </li>
1454
1586
 
1455
- <li class="never" data-hits="" data-linenumber="45">
1587
+ <li class="never" data-hits="" data-linenumber="66">
1456
1588
 
1457
1589
 
1458
1590
  <code class="ruby"></code>
1459
1591
  </li>
1460
1592
 
1461
- <li class="covered" data-hits="1" data-linenumber="46">
1593
+ <li class="covered" data-hits="1" data-linenumber="67">
1462
1594
  <span class="hits">1</span>
1463
1595
 
1464
1596
  <code class="ruby"> def mark_as_sent!</code>
1465
1597
  </li>
1466
1598
 
1467
- <li class="covered" data-hits="2" data-linenumber="47">
1599
+ <li class="covered" data-hits="2" data-linenumber="68">
1468
1600
  <span class="hits">2</span>
1469
1601
 
1470
1602
  <code class="ruby"> @sent_at = Time.now</code>
1471
1603
  </li>
1472
1604
 
1473
- <li class="never" data-hits="" data-linenumber="48">
1605
+ <li class="never" data-hits="" data-linenumber="69">
1474
1606
 
1475
1607
 
1476
1608
  <code class="ruby"> end</code>
1477
1609
  </li>
1478
1610
 
1479
- <li class="never" data-hits="" data-linenumber="49">
1611
+ <li class="never" data-hits="" data-linenumber="70">
1480
1612
 
1481
1613
 
1482
1614
  <code class="ruby"></code>
1483
1615
  </li>
1484
1616
 
1485
- <li class="covered" data-hits="1" data-linenumber="50">
1617
+ <li class="covered" data-hits="1" data-linenumber="71">
1486
1618
  <span class="hits">1</span>
1487
1619
 
1488
1620
  <code class="ruby"> def mark_as_unsent!</code>
1489
1621
  </li>
1490
1622
 
1491
- <li class="covered" data-hits="1" data-linenumber="51">
1623
+ <li class="covered" data-hits="1" data-linenumber="72">
1492
1624
  <span class="hits">1</span>
1493
1625
 
1494
1626
  <code class="ruby"> @sent_at = nil</code>
1495
1627
  </li>
1496
1628
 
1497
- <li class="never" data-hits="" data-linenumber="52">
1629
+ <li class="never" data-hits="" data-linenumber="73">
1498
1630
 
1499
1631
 
1500
1632
  <code class="ruby"> end</code>
1501
1633
  </li>
1502
1634
 
1503
- <li class="never" data-hits="" data-linenumber="53">
1635
+ <li class="never" data-hits="" data-linenumber="74">
1504
1636
 
1505
1637
 
1506
1638
  <code class="ruby"></code>
1507
1639
  </li>
1508
1640
 
1509
- <li class="covered" data-hits="1" data-linenumber="54">
1641
+ <li class="covered" data-hits="1" data-linenumber="75">
1510
1642
  <span class="hits">1</span>
1511
1643
 
1512
1644
  <code class="ruby"> def sent?</code>
1513
1645
  </li>
1514
1646
 
1515
- <li class="covered" data-hits="3" data-linenumber="55">
1647
+ <li class="covered" data-hits="3" data-linenumber="76">
1516
1648
  <span class="hits">3</span>
1517
1649
 
1518
1650
  <code class="ruby"> !!@sent_at</code>
1519
1651
  </li>
1520
1652
 
1521
- <li class="never" data-hits="" data-linenumber="56">
1653
+ <li class="never" data-hits="" data-linenumber="77">
1522
1654
 
1523
1655
 
1524
1656
  <code class="ruby"> end</code>
1525
1657
  </li>
1526
1658
 
1527
- <li class="never" data-hits="" data-linenumber="57">
1659
+ <li class="never" data-hits="" data-linenumber="78">
1528
1660
 
1529
1661
 
1530
1662
  <code class="ruby"></code>
1531
1663
  </li>
1532
1664
 
1533
- <li class="covered" data-hits="1" data-linenumber="58">
1665
+ <li class="covered" data-hits="1" data-linenumber="79">
1534
1666
  <span class="hits">1</span>
1535
1667
 
1536
1668
  <code class="ruby"> def valid?</code>
1537
1669
  </li>
1538
1670
 
1539
- <li class="missed" data-hits="0" data-linenumber="59">
1671
+ <li class="missed" data-hits="0" data-linenumber="80">
1540
1672
 
1541
1673
 
1542
1674
  <code class="ruby"> payload.to_json.bytesize &lt;= MAXIMUM_PAYLOAD_SIZE</code>
1543
1675
  </li>
1544
1676
 
1545
- <li class="never" data-hits="" data-linenumber="60">
1677
+ <li class="never" data-hits="" data-linenumber="81">
1546
1678
 
1547
1679
 
1548
1680
  <code class="ruby"> end</code>
1549
1681
  </li>
1550
1682
 
1551
- <li class="never" data-hits="" data-linenumber="61">
1683
+ <li class="never" data-hits="" data-linenumber="82">
1552
1684
 
1553
1685
 
1554
1686
  <code class="ruby"></code>
1555
1687
  </li>
1556
1688
 
1557
- <li class="covered" data-hits="1" data-linenumber="62">
1689
+ <li class="covered" data-hits="1" data-linenumber="83">
1690
+ <span class="hits">1</span>
1691
+
1692
+ <code class="ruby"> def error</code>
1693
+ </li>
1694
+
1695
+ <li class="missed" data-hits="0" data-linenumber="84">
1696
+
1697
+
1698
+ <code class="ruby"> APNSError.new(APNSError::CODES[@apns_error_code]) if @apns_error_code.nonzero?</code>
1699
+ </li>
1700
+
1701
+ <li class="never" data-hits="" data-linenumber="85">
1702
+
1703
+
1704
+ <code class="ruby"> end</code>
1705
+ </li>
1706
+
1707
+ <li class="never" data-hits="" data-linenumber="86">
1708
+
1709
+
1710
+ <code class="ruby"></code>
1711
+ </li>
1712
+
1713
+ <li class="covered" data-hits="1" data-linenumber="87">
1558
1714
  <span class="hits">1</span>
1559
1715
 
1560
1716
  <code class="ruby"> private</code>
1561
1717
  </li>
1562
1718
 
1563
- <li class="never" data-hits="" data-linenumber="63">
1719
+ <li class="never" data-hits="" data-linenumber="88">
1564
1720
 
1565
1721
 
1566
- <code class="ruby"> </code>
1722
+ <code class="ruby"></code>
1567
1723
  </li>
1568
1724
 
1569
- <li class="covered" data-hits="1" data-linenumber="64">
1725
+ <li class="covered" data-hits="1" data-linenumber="89">
1570
1726
  <span class="hits">1</span>
1571
1727
 
1572
1728
  <code class="ruby"> def device_token_item</code>
1573
1729
  </li>
1574
1730
 
1575
- <li class="covered" data-hits="14" data-linenumber="65">
1576
- <span class="hits">14</span>
1731
+ <li class="covered" data-hits="15" data-linenumber="90">
1732
+ <span class="hits">15</span>
1577
1733
 
1578
- <code class="ruby"> [1, 32, @token.gsub(/[&lt;\s&gt;]/, &#39;&#39;)].pack(&#39;cnH*&#39;)</code>
1734
+ <code class="ruby"> [1, 32, @token.gsub(/[&lt;\s&gt;]/, &#39;&#39;)].pack(&#39;cnH64&#39;)</code>
1579
1735
  </li>
1580
1736
 
1581
- <li class="never" data-hits="" data-linenumber="66">
1737
+ <li class="never" data-hits="" data-linenumber="91">
1582
1738
 
1583
1739
 
1584
1740
  <code class="ruby"> end</code>
1585
1741
  </li>
1586
1742
 
1587
- <li class="never" data-hits="" data-linenumber="67">
1743
+ <li class="never" data-hits="" data-linenumber="92">
1588
1744
 
1589
1745
 
1590
1746
  <code class="ruby"></code>
1591
1747
  </li>
1592
1748
 
1593
- <li class="covered" data-hits="1" data-linenumber="68">
1749
+ <li class="covered" data-hits="1" data-linenumber="93">
1594
1750
  <span class="hits">1</span>
1595
1751
 
1596
1752
  <code class="ruby"> def payload_item</code>
1597
1753
  </li>
1598
1754
 
1599
- <li class="covered" data-hits="14" data-linenumber="69">
1600
- <span class="hits">14</span>
1755
+ <li class="covered" data-hits="15" data-linenumber="94">
1756
+ <span class="hits">15</span>
1601
1757
 
1602
1758
  <code class="ruby"> json = payload.to_json</code>
1603
1759
  </li>
1604
1760
 
1605
- <li class="covered" data-hits="14" data-linenumber="70">
1606
- <span class="hits">14</span>
1761
+ <li class="covered" data-hits="15" data-linenumber="95">
1762
+ <span class="hits">15</span>
1607
1763
 
1608
1764
  <code class="ruby"> [2, json.bytes.count, json].pack(&#39;cna*&#39;)</code>
1609
1765
  </li>
1610
1766
 
1611
- <li class="never" data-hits="" data-linenumber="71">
1767
+ <li class="never" data-hits="" data-linenumber="96">
1612
1768
 
1613
1769
 
1614
1770
  <code class="ruby"> end</code>
1615
1771
  </li>
1616
1772
 
1617
- <li class="never" data-hits="" data-linenumber="72">
1773
+ <li class="never" data-hits="" data-linenumber="97">
1618
1774
 
1619
1775
 
1620
1776
  <code class="ruby"></code>
1621
1777
  </li>
1622
1778
 
1623
- <li class="covered" data-hits="1" data-linenumber="73">
1779
+ <li class="covered" data-hits="1" data-linenumber="98">
1624
1780
  <span class="hits">1</span>
1625
1781
 
1626
1782
  <code class="ruby"> def identifier_item</code>
1627
1783
  </li>
1628
1784
 
1629
- <li class="covered" data-hits="14" data-linenumber="74">
1630
- <span class="hits">14</span>
1785
+ <li class="covered" data-hits="15" data-linenumber="99">
1786
+ <span class="hits">15</span>
1631
1787
 
1632
1788
  <code class="ruby"> [3, 4, @id].pack(&#39;cnN&#39;) unless @id.nil?</code>
1633
1789
  </li>
1634
1790
 
1635
- <li class="never" data-hits="" data-linenumber="75">
1791
+ <li class="never" data-hits="" data-linenumber="100">
1636
1792
 
1637
1793
 
1638
1794
  <code class="ruby"> end</code>
1639
1795
  </li>
1640
1796
 
1641
- <li class="never" data-hits="" data-linenumber="76">
1797
+ <li class="never" data-hits="" data-linenumber="101">
1642
1798
 
1643
1799
 
1644
1800
  <code class="ruby"></code>
1645
1801
  </li>
1646
1802
 
1647
- <li class="covered" data-hits="1" data-linenumber="77">
1803
+ <li class="covered" data-hits="1" data-linenumber="102">
1648
1804
  <span class="hits">1</span>
1649
1805
 
1650
1806
  <code class="ruby"> def expiration_item</code>
1651
1807
  </li>
1652
1808
 
1653
- <li class="covered" data-hits="14" data-linenumber="78">
1654
- <span class="hits">14</span>
1809
+ <li class="covered" data-hits="15" data-linenumber="103">
1810
+ <span class="hits">15</span>
1655
1811
 
1656
1812
  <code class="ruby"> [4, 4, @expiry.to_i].pack(&#39;cnN&#39;) unless @expiry.nil?</code>
1657
1813
  </li>
1658
1814
 
1659
- <li class="never" data-hits="" data-linenumber="79">
1815
+ <li class="never" data-hits="" data-linenumber="104">
1660
1816
 
1661
1817
 
1662
1818
  <code class="ruby"> end</code>
1663
1819
  </li>
1664
1820
 
1665
- <li class="never" data-hits="" data-linenumber="80">
1821
+ <li class="never" data-hits="" data-linenumber="105">
1666
1822
 
1667
1823
 
1668
1824
  <code class="ruby"></code>
1669
1825
  </li>
1670
1826
 
1671
- <li class="covered" data-hits="1" data-linenumber="81">
1827
+ <li class="covered" data-hits="1" data-linenumber="106">
1672
1828
  <span class="hits">1</span>
1673
1829
 
1674
1830
  <code class="ruby"> def priority_item</code>
1675
1831
  </li>
1676
1832
 
1677
- <li class="covered" data-hits="14" data-linenumber="82">
1678
- <span class="hits">14</span>
1833
+ <li class="covered" data-hits="15" data-linenumber="107">
1834
+ <span class="hits">15</span>
1679
1835
 
1680
1836
  <code class="ruby"> [5, 1, @priority].pack(&#39;cnc&#39;) unless @priority.nil?</code>
1681
1837
  </li>
1682
1838
 
1683
- <li class="never" data-hits="" data-linenumber="83">
1839
+ <li class="never" data-hits="" data-linenumber="108">
1684
1840
 
1685
1841
 
1686
1842
  <code class="ruby"> end</code>
1687
1843
  </li>
1688
1844
 
1689
- <li class="never" data-hits="" data-linenumber="84">
1845
+ <li class="never" data-hits="" data-linenumber="109">
1690
1846
 
1691
1847
 
1692
1848
  <code class="ruby"> end</code>
1693
1849
  </li>
1694
1850
 
1695
- <li class="never" data-hits="" data-linenumber="85">
1851
+ <li class="never" data-hits="" data-linenumber="110">
1696
1852
 
1697
1853
 
1698
1854
  <code class="ruby">end</code>