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.
- checksums.yaml +4 -4
- data/Gemfile.lock +22 -16
- data/README.md +19 -1
- data/bin/apn +3 -0
- data/coverage/assets/0.8.0/application.css +799 -0
- data/coverage/assets/0.8.0/application.js +1559 -0
- data/coverage/assets/0.8.0/colorbox/border.png +0 -0
- data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
- data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
- data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.8.0/favicon_green.png +0 -0
- data/coverage/assets/0.8.0/favicon_red.png +0 -0
- data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
- data/coverage/assets/0.8.0/loading.gif +0 -0
- data/coverage/assets/0.8.0/magnify.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +319 -163
- data/houston.gemspec +1 -1
- data/lib/houston/client.rb +1 -0
- data/lib/houston/notification.rb +30 -5
- data/lib/houston/version.rb +1 -1
- data/spec/client_spec.rb +2 -2
- data/spec/notification_spec.rb +23 -10
- metadata +28 -4
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| 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 | 
            -
                <link href='./assets/0. | 
| 8 | 
            -
                <link rel="shortcut icon" type="image/png" href="./assets/0. | 
| 9 | 
            -
                <link rel="icon" type="image/png" href="./assets/0. | 
| 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. | 
| 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- | 
| 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"> | 
| 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 | 
            -
                      | 
| 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> | 
| 36 | 
            -
                <span class="green"><b> | 
| 37 | 
            -
                <span class="red"><b> | 
| 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"> | 
| 66 | 
            -
                    <td> | 
| 67 | 
            -
                    <td> | 
| 65 | 
            +
                    <td class="red strong">57.81 %</td>
         | 
| 66 | 
            +
                    <td>101</td>
         | 
| 67 | 
            +
                    <td>64</td>
         | 
| 68 68 | 
             
                    <td>37</td>
         | 
| 69 | 
            -
                    <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"> | 
| 86 | 
            -
                    <td> | 
| 87 | 
            -
                    <td> | 
| 88 | 
            -
                    <td> | 
| 89 | 
            -
                    <td> | 
| 90 | 
            -
                    <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. | 
| 103 | 
            -
                    and simplecov-html v0. | 
| 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"> | 
| 154 | 
            +
                <h4><span class="red">57.81 %</span> covered</h4>
         | 
| 155 155 | 
             
                <div>
         | 
| 156 | 
            -
                  <b> | 
| 156 | 
            +
                  <b>64</b> relevant lines. 
         | 
| 157 157 | 
             
                  <span class="green"><b>37</b> lines covered</span> and
         | 
| 158 | 
            -
                  <span class="red"><b> | 
| 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. | 
| 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. | 
| 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(&: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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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('N1n1H140')</code>
         | 
| 679 685 | 
             
                    </li>
         | 
| 680 686 |  | 
| 681 | 
            -
                    <li class="covered" data-hits="4" data-linenumber=" | 
| 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=" | 
| 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(' ').strip</code>
         | 
| 691 697 | 
             
                    </li>
         | 
| 692 698 |  | 
| 693 | 
            -
                    <li class="covered" data-hits="4" data-linenumber=" | 
| 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 << {token: token, timestamp: timestamp} if token && timestamp</code>
         | 
| 697 703 | 
             
                    </li>
         | 
| 698 704 |  | 
| 699 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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"> | 
| 1186 | 
            +
                <h4><span class="green">96.43 %</span> covered</h4>
         | 
| 1181 1187 | 
             
                <div>
         | 
| 1182 | 
            -
                  <b> | 
| 1183 | 
            -
                  <span class="green"><b> | 
| 1184 | 
            -
                  <span class="red"><b> | 
| 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">     | 
| 1224 | 
            +
                      <code class="ruby">    class APNSError < 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" | 
| 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"> | 
| 1236 | 
            +
                      <code class="ruby">      CODES = {</code>
         | 
| 1231 1237 | 
             
                    </li>
         | 
| 1232 1238 |  | 
| 1233 | 
            -
                    <li class=" | 
| 1239 | 
            +
                    <li class="never" data-hits="" data-linenumber="8">
         | 
| 1240 | 
            +
                      
         | 
| 1241 | 
            +
                      
         | 
| 1242 | 
            +
                      <code class="ruby">        0 => "No errors encountered",</code>
         | 
| 1243 | 
            +
                    </li>
         | 
| 1244 | 
            +
                  
         | 
| 1245 | 
            +
                    <li class="never" data-hits="" data-linenumber="9">
         | 
| 1246 | 
            +
                      
         | 
| 1247 | 
            +
                      
         | 
| 1248 | 
            +
                      <code class="ruby">        1 => "Processing error",</code>
         | 
| 1249 | 
            +
                    </li>
         | 
| 1250 | 
            +
                  
         | 
| 1251 | 
            +
                    <li class="never" data-hits="" data-linenumber="10">
         | 
| 1252 | 
            +
                      
         | 
| 1253 | 
            +
                      
         | 
| 1254 | 
            +
                      <code class="ruby">        2 => "Missing device token",</code>
         | 
| 1255 | 
            +
                    </li>
         | 
| 1256 | 
            +
                  
         | 
| 1257 | 
            +
                    <li class="never" data-hits="" data-linenumber="11">
         | 
| 1258 | 
            +
                      
         | 
| 1259 | 
            +
                      
         | 
| 1260 | 
            +
                      <code class="ruby">        3 => "Missing topic",</code>
         | 
| 1261 | 
            +
                    </li>
         | 
| 1262 | 
            +
                  
         | 
| 1263 | 
            +
                    <li class="never" data-hits="" data-linenumber="12">
         | 
| 1264 | 
            +
                      
         | 
| 1265 | 
            +
                      
         | 
| 1266 | 
            +
                      <code class="ruby">        4 => "Missing payload",</code>
         | 
| 1267 | 
            +
                    </li>
         | 
| 1268 | 
            +
                  
         | 
| 1269 | 
            +
                    <li class="never" data-hits="" data-linenumber="13">
         | 
| 1270 | 
            +
                      
         | 
| 1271 | 
            +
                      
         | 
| 1272 | 
            +
                      <code class="ruby">        5 => "Invalid token size",</code>
         | 
| 1273 | 
            +
                    </li>
         | 
| 1274 | 
            +
                  
         | 
| 1275 | 
            +
                    <li class="never" data-hits="" data-linenumber="14">
         | 
| 1276 | 
            +
                      
         | 
| 1277 | 
            +
                      
         | 
| 1278 | 
            +
                      <code class="ruby">        6 => "Invalid topic size",</code>
         | 
| 1279 | 
            +
                    </li>
         | 
| 1280 | 
            +
                  
         | 
| 1281 | 
            +
                    <li class="never" data-hits="" data-linenumber="15">
         | 
| 1282 | 
            +
                      
         | 
| 1283 | 
            +
                      
         | 
| 1284 | 
            +
                      <code class="ruby">        7 => "Invalid payload size",</code>
         | 
| 1285 | 
            +
                    </li>
         | 
| 1286 | 
            +
                  
         | 
| 1287 | 
            +
                    <li class="never" data-hits="" data-linenumber="16">
         | 
| 1288 | 
            +
                      
         | 
| 1289 | 
            +
                      
         | 
| 1290 | 
            +
                      <code class="ruby">        8 => "Invalid token",</code>
         | 
| 1291 | 
            +
                    </li>
         | 
| 1292 | 
            +
                  
         | 
| 1293 | 
            +
                    <li class="never" data-hits="" data-linenumber="17">
         | 
| 1294 | 
            +
                      
         | 
| 1295 | 
            +
                      
         | 
| 1296 | 
            +
                      <code class="ruby">        10 => "Shutdown",</code>
         | 
| 1297 | 
            +
                    </li>
         | 
| 1298 | 
            +
                  
         | 
| 1299 | 
            +
                    <li class="never" data-hits="" data-linenumber="18">
         | 
| 1300 | 
            +
                      
         | 
| 1301 | 
            +
                      
         | 
| 1302 | 
            +
                      <code class="ruby">        255 => "Unknown error"</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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1270 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1276 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1282 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1288 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1294 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1300 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1306 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1312 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 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=" | 
| 1324 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1348 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1354 | 
            -
                       | 
| 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['aps'] ||= {}</code>
         | 
| 1357 1483 | 
             
                    </li>
         | 
| 1358 1484 |  | 
| 1359 | 
            -
                    <li class="covered" data-hits=" | 
| 1360 | 
            -
                      <span class="hits"> | 
| 1485 | 
            +
                    <li class="covered" data-hits="23" data-linenumber="49">
         | 
| 1486 | 
            +
                      <span class="hits">23</span>
         | 
| 1361 1487 |  | 
| 1362 1488 | 
             
                      <code class="ruby">      json['aps']['alert'] = @alert if @alert</code>
         | 
| 1363 1489 | 
             
                    </li>
         | 
| 1364 1490 |  | 
| 1365 | 
            -
                    <li class="covered" data-hits=" | 
| 1366 | 
            -
                      <span class="hits"> | 
| 1491 | 
            +
                    <li class="covered" data-hits="23" data-linenumber="50">
         | 
| 1492 | 
            +
                      <span class="hits">23</span>
         | 
| 1367 1493 |  | 
| 1368 1494 | 
             
                      <code class="ruby">      json['aps']['badge'] = @badge.to_i rescue 0 if @badge</code>
         | 
| 1369 1495 | 
             
                    </li>
         | 
| 1370 1496 |  | 
| 1371 | 
            -
                    <li class="covered" data-hits=" | 
| 1372 | 
            -
                      <span class="hits"> | 
| 1497 | 
            +
                    <li class="covered" data-hits="23" data-linenumber="51">
         | 
| 1498 | 
            +
                      <span class="hits">23</span>
         | 
| 1373 1499 |  | 
| 1374 1500 | 
             
                      <code class="ruby">      json['aps']['sound'] = @sound if @sound</code>
         | 
| 1375 1501 | 
             
                    </li>
         | 
| 1376 1502 |  | 
| 1377 | 
            -
                    <li class="covered" data-hits=" | 
| 1378 | 
            -
                      <span class="hits"> | 
| 1503 | 
            +
                    <li class="covered" data-hits="23" data-linenumber="52">
         | 
| 1504 | 
            +
                      <span class="hits">23</span>
         | 
| 1505 | 
            +
                      
         | 
| 1506 | 
            +
                      <code class="ruby">      json['aps']['category'] = @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['aps']['content-available'] = 1 if @content_available</code>
         | 
| 1381 1513 | 
             
                    </li>
         | 
| 1382 1514 |  | 
| 1383 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 1390 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1414 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1444 | 
            -
                      <span class="hits"> | 
| 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('cNa*')</code>
         | 
| 1447 1579 | 
             
                    </li>
         | 
| 1448 1580 |  | 
| 1449 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1671 | 
            +
                    <li class="missed" data-hits="0" data-linenumber="80">
         | 
| 1540 1672 |  | 
| 1541 1673 |  | 
| 1542 1674 | 
             
                      <code class="ruby">      payload.to_json.bytesize <= MAXIMUM_PAYLOAD_SIZE</code>
         | 
| 1543 1675 | 
             
                    </li>
         | 
| 1544 1676 |  | 
| 1545 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1719 | 
            +
                    <li class="never" data-hits="" data-linenumber="88">
         | 
| 1564 1720 |  | 
| 1565 1721 |  | 
| 1566 | 
            -
                      <code class="ruby" | 
| 1722 | 
            +
                      <code class="ruby"></code>
         | 
| 1567 1723 | 
             
                    </li>
         | 
| 1568 1724 |  | 
| 1569 | 
            -
                    <li class="covered" data-hits="1" data-linenumber=" | 
| 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=" | 
| 1576 | 
            -
                      <span class="hits"> | 
| 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(/[<\s>]/, '')].pack(' | 
| 1734 | 
            +
                      <code class="ruby">      [1, 32, @token.gsub(/[<\s>]/, '')].pack('cnH64')</code>
         | 
| 1579 1735 | 
             
                    </li>
         | 
| 1580 1736 |  | 
| 1581 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1600 | 
            -
                      <span class="hits"> | 
| 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=" | 
| 1606 | 
            -
                      <span class="hits"> | 
| 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('cna*')</code>
         | 
| 1609 1765 | 
             
                    </li>
         | 
| 1610 1766 |  | 
| 1611 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1630 | 
            -
                      <span class="hits"> | 
| 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('cnN') unless @id.nil?</code>
         | 
| 1633 1789 | 
             
                    </li>
         | 
| 1634 1790 |  | 
| 1635 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1654 | 
            -
                      <span class="hits"> | 
| 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('cnN') unless @expiry.nil?</code>
         | 
| 1657 1813 | 
             
                    </li>
         | 
| 1658 1814 |  | 
| 1659 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 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=" | 
| 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=" | 
| 1678 | 
            -
                      <span class="hits"> | 
| 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('cnc') unless @priority.nil?</code>
         | 
| 1681 1837 | 
             
                    </li>
         | 
| 1682 1838 |  | 
| 1683 | 
            -
                    <li class="never" data-hits="" data-linenumber=" | 
| 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=" | 
| 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=" | 
| 1851 | 
            +
                    <li class="never" data-hits="" data-linenumber="110">
         | 
| 1696 1852 |  | 
| 1697 1853 |  | 
| 1698 1854 | 
             
                      <code class="ruby">end</code>
         |