snooze 0.2.0 → 1.0.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.
- data/.travis.yml +22 -0
 - data/Gemfile +1 -1
 - data/Gemfile.lock +30 -3
 - data/Guardfile +14 -0
 - data/LICENSE +62 -20
 - data/README.rdoc +33 -3
 - data/bin/snooze +38 -2
 - data/lib/snooze.rb +9 -2
 - data/lib/snooze/button.rb +53 -0
 - data/lib/snooze/connection_error.rb +2 -0
 - data/lib/snooze/post.rb +58 -0
 - data/snooze.gemspec +8 -4
 - data/spec/spec_helper.rb +8 -0
 - data/spec/unit/button_spec.rb +44 -0
 - data/spec/unit/post_spec.rb +102 -0
 - metadata +66 -3
 
    
        data/.travis.yml
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            language: ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            rvm:
         
     | 
| 
      
 3 
     | 
    
         
            +
              - 2.0.0
         
     | 
| 
      
 4 
     | 
    
         
            +
              - 1.9.3
         
     | 
| 
      
 5 
     | 
    
         
            +
              - 1.9.2
         
     | 
| 
      
 6 
     | 
    
         
            +
              - jruby-head
         
     | 
| 
      
 7 
     | 
    
         
            +
              - jruby-18mode
         
     | 
| 
      
 8 
     | 
    
         
            +
              - jruby-19mode
         
     | 
| 
      
 9 
     | 
    
         
            +
              - rbx-18mode
         
     | 
| 
      
 10 
     | 
    
         
            +
              - rbx-19mode
         
     | 
| 
      
 11 
     | 
    
         
            +
              - ruby-head
         
     | 
| 
      
 12 
     | 
    
         
            +
              - 1.8.7
         
     | 
| 
      
 13 
     | 
    
         
            +
              - ree
         
     | 
| 
      
 14 
     | 
    
         
            +
            matrix:
         
     | 
| 
      
 15 
     | 
    
         
            +
              allow_failures:
         
     | 
| 
      
 16 
     | 
    
         
            +
                - rvm: jruby-19mode
         
     | 
| 
      
 17 
     | 
    
         
            +
                - rvm: rbx-19mode
         
     | 
| 
      
 18 
     | 
    
         
            +
                - rvm: jruby-head
         
     | 
| 
      
 19 
     | 
    
         
            +
                - rvm: ruby-head
         
     | 
| 
      
 20 
     | 
    
         
            +
            notifications:
         
     | 
| 
      
 21 
     | 
    
         
            +
              email:
         
     | 
| 
      
 22 
     | 
    
         
            +
                - contact@snooze.io
         
     | 
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -1,2 +1,2 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            source  
     | 
| 
      
 1 
     | 
    
         
            +
            source 'https://rubygems.org'
         
     | 
| 
       2 
2 
     | 
    
         
             
            gemspec
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,13 +1,35 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                 
     | 
| 
      
 4 
     | 
    
         
            +
                snooze (1.0.0)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  faraday
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
            GEM
         
     | 
| 
       7 
     | 
    
         
            -
              remote:  
     | 
| 
      
 8 
     | 
    
         
            +
              remote: https://rubygems.org/
         
     | 
| 
       8 
9 
     | 
    
         
             
              specs:
         
     | 
| 
      
 10 
     | 
    
         
            +
                coderay (1.0.8)
         
     | 
| 
       9 
11 
     | 
    
         
             
                diff-lcs (1.2.1)
         
     | 
| 
      
 12 
     | 
    
         
            +
                faraday (0.8.7)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  multipart-post (~> 1.1)
         
     | 
| 
      
 14 
     | 
    
         
            +
                guard (1.6.2)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  listen (>= 0.6.0)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  lumberjack (>= 1.0.2)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  pry (>= 0.9.10)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  terminal-table (>= 1.4.3)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  thor (>= 0.14.6)
         
     | 
| 
      
 20 
     | 
    
         
            +
                guard-rspec (2.4.0)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  guard (>= 1.1)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  rspec (~> 2.11)
         
     | 
| 
      
 23 
     | 
    
         
            +
                listen (0.7.2)
         
     | 
| 
      
 24 
     | 
    
         
            +
                lumberjack (1.0.2)
         
     | 
| 
      
 25 
     | 
    
         
            +
                method_source (0.8.1)
         
     | 
| 
      
 26 
     | 
    
         
            +
                multipart-post (1.2.0)
         
     | 
| 
      
 27 
     | 
    
         
            +
                pry (0.9.12)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  coderay (~> 1.0.5)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  method_source (~> 0.8)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  slop (~> 3.4)
         
     | 
| 
       10 
31 
     | 
    
         
             
                rake (10.0.3)
         
     | 
| 
      
 32 
     | 
    
         
            +
                rb-fsevent (0.9.3)
         
     | 
| 
       11 
33 
     | 
    
         
             
                rspec (2.13.0)
         
     | 
| 
       12 
34 
     | 
    
         
             
                  rspec-core (~> 2.13.0)
         
     | 
| 
       13 
35 
     | 
    
         
             
                  rspec-expectations (~> 2.13.0)
         
     | 
| 
         @@ -16,11 +38,16 @@ GEM 
     | 
|
| 
       16 
38 
     | 
    
         
             
                rspec-expectations (2.13.0)
         
     | 
| 
       17 
39 
     | 
    
         
             
                  diff-lcs (>= 1.1.3, < 2.0)
         
     | 
| 
       18 
40 
     | 
    
         
             
                rspec-mocks (2.13.0)
         
     | 
| 
      
 41 
     | 
    
         
            +
                slop (3.4.3)
         
     | 
| 
      
 42 
     | 
    
         
            +
                terminal-table (1.4.5)
         
     | 
| 
      
 43 
     | 
    
         
            +
                thor (0.17.0)
         
     | 
| 
       19 
44 
     | 
    
         | 
| 
       20 
45 
     | 
    
         
             
            PLATFORMS
         
     | 
| 
       21 
46 
     | 
    
         
             
              ruby
         
     | 
| 
       22 
47 
     | 
    
         | 
| 
       23 
48 
     | 
    
         
             
            DEPENDENCIES
         
     | 
| 
       24 
     | 
    
         
            -
               
     | 
| 
      
 49 
     | 
    
         
            +
              guard-rspec
         
     | 
| 
       25 
50 
     | 
    
         
             
              rake
         
     | 
| 
      
 51 
     | 
    
         
            +
              rb-fsevent
         
     | 
| 
       26 
52 
     | 
    
         
             
              rspec (~> 2.8)
         
     | 
| 
      
 53 
     | 
    
         
            +
              snooze!
         
     | 
    
        data/Guardfile
    ADDED
    
    | 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # A sample Guardfile
         
     | 
| 
      
 2 
     | 
    
         
            +
            # More info at https://github.com/guard/guard#readme
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            guard 'rspec' do
         
     | 
| 
      
 5 
     | 
    
         
            +
              # Files that affect global scope -> run all specs when they change
         
     | 
| 
      
 6 
     | 
    
         
            +
              watch(%r{^lib/snooze.rb$}) { 'spec' }
         
     | 
| 
      
 7 
     | 
    
         
            +
              watch('spec/spec_helper.rb') { 'spec' }
         
     | 
| 
      
 8 
     | 
    
         
            +
              watch('.rspec') { 'spec' }
         
     | 
| 
      
 9 
     | 
    
         
            +
              watch('Guardfile.lock') { 'spec' }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              # Specific files -> only run the associated spec file when they change
         
     | 
| 
      
 12 
     | 
    
         
            +
              watch(%r{^spec/.+_spec\.rb$})
         
     | 
| 
      
 13 
     | 
    
         
            +
              watch(%r{^lib/snooze/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
    
        data/LICENSE
    CHANGED
    
    | 
         @@ -1,20 +1,62 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            the  
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            This product depends on Faraday written by Rick Olson and Zack Hobson
         
     | 
| 
      
 2 
     | 
    
         
            +
            and distributed under an MIT license.
         
     | 
| 
      
 3 
     | 
    
         
            +
            See https://github.com/lostisland/faraday/blob/master/LICENSE.md
         
     | 
| 
      
 4 
     | 
    
         
            +
              Copyright (c) 2009-2013 Rick Olson, Zack Hobson
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 7 
     | 
    
         
            +
              a copy of this software and associated documentation files
         
     | 
| 
      
 8 
     | 
    
         
            +
              (the "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 9 
     | 
    
         
            +
              without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 10 
     | 
    
         
            +
              distribute, sublicense, and/or sell copies of the Software, and to permit
         
     | 
| 
      
 11 
     | 
    
         
            +
              persons to whom the Software is furnished to do so, subject to the
         
     | 
| 
      
 12 
     | 
    
         
            +
              following conditions:
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              The above copyright notice and this permission notice shall be included in
         
     | 
| 
      
 15 
     | 
    
         
            +
              all copies or substantial portions of the Software.
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         
     | 
| 
      
 18 
     | 
    
         
            +
              IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         
     | 
| 
      
 19 
     | 
    
         
            +
              FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         
     | 
| 
      
 20 
     | 
    
         
            +
              AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         
     | 
| 
      
 21 
     | 
    
         
            +
              LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
         
     | 
| 
      
 22 
     | 
    
         
            +
              FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
         
     | 
| 
      
 23 
     | 
    
         
            +
              DEALINGS IN THE SOFTWARE.
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            All other components of this product are copyright (c) 2013-2014 Bart ten
         
     | 
| 
      
 26 
     | 
    
         
            +
            Brinke - Retrosync. All rights reserved.
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            Certain inventions disclosed in this file may be claimed within
         
     | 
| 
      
 29 
     | 
    
         
            +
            patents owned or patent applications filed by Retrosync, or third
         
     | 
| 
      
 30 
     | 
    
         
            +
            parties.
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            Subject to the terms of this notice, Retrosync grants you a
         
     | 
| 
      
 33 
     | 
    
         
            +
            nonexclusive, nontransferable license, without the right to
         
     | 
| 
      
 34 
     | 
    
         
            +
            sublicense, to (a) install and execute one copy of these files on any
         
     | 
| 
      
 35 
     | 
    
         
            +
            number of workstations owned or controlled by you and (b) distribute
         
     | 
| 
      
 36 
     | 
    
         
            +
            verbatim copies of these files to third parties. As a condition to the
         
     | 
| 
      
 37 
     | 
    
         
            +
            foregoing grant, you must provide this notice along with each copy you
         
     | 
| 
      
 38 
     | 
    
         
            +
            distribute and you must not remove, alter, or obscure this notice. All
         
     | 
| 
      
 39 
     | 
    
         
            +
            other use, reproduction, modification, distribution, or other
         
     | 
| 
      
 40 
     | 
    
         
            +
            exploitation of these files is strictly prohibited, except as may be set
         
     | 
| 
      
 41 
     | 
    
         
            +
            forth in a separate written license agreement between you and New
         
     | 
| 
      
 42 
     | 
    
         
            +
            Relic. The terms of any such license agreement will control over this
         
     | 
| 
      
 43 
     | 
    
         
            +
            notice. The license stated above will be automatically terminated and
         
     | 
| 
      
 44 
     | 
    
         
            +
            revoked if you exceed its scope or violate any of the terms of this
         
     | 
| 
      
 45 
     | 
    
         
            +
            notice.
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            This License does not grant permission to use the trade names,
         
     | 
| 
      
 48 
     | 
    
         
            +
            trademarks, service marks, or product names of Retrosync, except as
         
     | 
| 
      
 49 
     | 
    
         
            +
            required for reasonable and customary use in describing the origin of
         
     | 
| 
      
 50 
     | 
    
         
            +
            this file and reproducing the content of this notice. You may not
         
     | 
| 
      
 51 
     | 
    
         
            +
            mark or brand this file with any trade name, trademarks, service
         
     | 
| 
      
 52 
     | 
    
         
            +
            marks, or product names other than the original brand (if any)
         
     | 
| 
      
 53 
     | 
    
         
            +
            provided by Retrosync.
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            Unless otherwise expressly agreed by Retrosync in a separate written
         
     | 
| 
      
 56 
     | 
    
         
            +
            license agreement, these files are provided AS IS, WITHOUT WARRANTY OF
         
     | 
| 
      
 57 
     | 
    
         
            +
            ANY KIND, including without any implied warranties of MERCHANTABILITY,
         
     | 
| 
      
 58 
     | 
    
         
            +
            FITNESS FOR A PARTICULAR PURPOSE, TITLE, or NON-INFRINGEMENT. As a
         
     | 
| 
      
 59 
     | 
    
         
            +
            condition to your use of these files, you are solely responsible for
         
     | 
| 
      
 60 
     | 
    
         
            +
            such use. Retrosync will have no liability to you for direct,
         
     | 
| 
      
 61 
     | 
    
         
            +
            indirect, consequential, incidental, special, or punitive damages or
         
     | 
| 
      
 62 
     | 
    
         
            +
            for lost profits or data.
         
     | 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -4,20 +4,50 @@ For devops who run recurring jobs like rake tasks or bas scripts, 
     | 
|
| 
       4 
4 
     | 
    
         
             
            Snooze.io is a notification service that tells you when something is wrong.
         
     | 
| 
       5 
5 
     | 
    
         
             
            Unlike just alerting when a job breaks, Snooze also alerts when a job did not run at all.
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
            * Simple heartbeat monitoring for all your tasks / scripts
         
     | 
| 
      
 8 
     | 
    
         
            +
            * Runs on all rubies {<img src="https://travis-ci.org/retrosync/snooze.png?branch=master" alt="Build Status" />}[https://travis-ci.org/retrosync/snooze]
         
     | 
| 
      
 9 
     | 
    
         
            +
            * Runs from bash
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       7 
11 
     | 
    
         
             
            == Installation & basic usage
         
     | 
| 
       8 
12 
     | 
    
         | 
| 
       9 
13 
     | 
    
         
             
            Log in to http://www.snooze.io and create your account
         
     | 
| 
       10 
14 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            Install Snooze  
     | 
| 
      
 15 
     | 
    
         
            +
            Install the Snooze gem:
         
     | 
| 
       12 
16 
     | 
    
         | 
| 
       13 
17 
     | 
    
         
             
              $ gem install snooze
         
     | 
| 
       14 
18 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
            Call the Snooze gem from the command line with your clock id to Snooze a clock:
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              $ snooze 1234-1234-abcd-abcd
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            == Advanced usage
         
     | 
| 
      
 24 
     | 
    
         
            +
            Test the Snoozing of a clock and the connection to Snooze.io:
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              $ snooze --dry-run 1234-1234-abcd-abcd
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            Get more debug output while Snoozing of a clock:
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              $ snooze --verbose 1234-1234-abcd-abcd
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            Snoozing a clock from Ruby / Rake task:
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              require 'snooze'
         
     | 
| 
      
 35 
     | 
    
         
            +
              snooze_instance = Snooze::Button.new('1234-1234-abcd-abcd')
         
     | 
| 
      
 36 
     | 
    
         
            +
              snooze_instance.snooze!
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            Catching exceptions in your Ruby application. If your code does not throw an exception,
         
     | 
| 
      
 39 
     | 
    
         
            +
            your clock will automatically be Snoozed.
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              require 'snooze'
         
     | 
| 
      
 42 
     | 
    
         
            +
              snooze_instance = Snooze::Button.new('1234-1234-abcd-abcd')
         
     | 
| 
      
 43 
     | 
    
         
            +
              snooze_instance.with_backtrace do
         
     | 
| 
      
 44 
     | 
    
         
            +
                puts 'your code goes here'
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
       16 
46 
     | 
    
         | 
| 
       17 
47 
     | 
    
         
             
            == Additional information
         
     | 
| 
       18 
48 
     | 
    
         | 
| 
       19 
49 
     | 
    
         
             
            Snooze was designed and built by Bart ten Brinke from Retrosync.
         
     | 
| 
       20 
     | 
    
         
            -
            If you have any issues, the fastest way to contact me is either through github or via email 
     | 
| 
      
 50 
     | 
    
         
            +
            If you have any issues, the fastest way to contact me is either through github or via email: contact@snooze.io
         
     | 
| 
       21 
51 
     | 
    
         | 
| 
       22 
52 
     | 
    
         
             
            * Snooze homepage: http://www.snooze.io
         
     | 
| 
       23 
53 
     | 
    
         
             
            * Retrosync homepage: http://www.retrosync.com
         
     | 
    
        data/bin/snooze
    CHANGED
    
    | 
         @@ -3,6 +3,42 @@ 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            $:.unshift(File.expand_path('../lib', File.dirname(__FILE__)))
         
     | 
| 
       5 
5 
     | 
    
         
             
            require 'snooze'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'optparse'
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
            ## Variables
         
     | 
| 
      
 9 
     | 
    
         
            +
            allowed_actions = ['snooze', 'backtrace', 'ping']
         
     | 
| 
      
 10 
     | 
    
         
            +
            options = {}
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            optparse = OptionParser.new do |opts|
         
     | 
| 
      
 13 
     | 
    
         
            +
              # Set a banner, displayed at the top
         
     | 
| 
      
 14 
     | 
    
         
            +
              # of the help screen.
         
     | 
| 
      
 15 
     | 
    
         
            +
              opts.banner = "Snooze gem, by Bart ten Brinke - version #{Snooze::VERSION}\nWebsite: http://snooze.io\n\n:Usage: snooze [options] clock_id\n\n"
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              # Define the options, and what they do
         
     | 
| 
      
 18 
     | 
    
         
            +
              options[:verbose] = false
         
     | 
| 
      
 19 
     | 
    
         
            +
              opts.on( '-v', '--verbose', 'Output more information' ) do
         
     | 
| 
      
 20 
     | 
    
         
            +
                options[:verbose] = true
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              options[:dry_run] = false
         
     | 
| 
      
 24 
     | 
    
         
            +
              opts.on( '-d', '--dry-run', 'Go through all the normal steps, but not actually Snooze anything.' ) do
         
     | 
| 
      
 25 
     | 
    
         
            +
                options[:dry_run] = true
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              opts.on( '-h', '--help', 'Display this screen' ) do
         
     | 
| 
      
 29 
     | 
    
         
            +
               puts opts
         
     | 
| 
      
 30 
     | 
    
         
            +
               exit
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            optparse.parse!
         
     | 
| 
      
 35 
     | 
    
         
            +
            if ARGV.empty? || ARGV.length != 1
         
     | 
| 
      
 36 
     | 
    
         
            +
              puts optparse
         
     | 
| 
      
 37 
     | 
    
         
            +
              exit(-1)
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            clock_id = ARGV[0]
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            require 'snooze'
         
     | 
| 
      
 43 
     | 
    
         
            +
            snooze_instance = Snooze::Button.new(clock_id, options)
         
     | 
| 
      
 44 
     | 
    
         
            +
            exit(snooze_instance.snooze!)
         
     | 
    
        data/lib/snooze.rb
    CHANGED
    
    | 
         @@ -1,7 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Snooze
         
     | 
| 
       2 
2 
     | 
    
         
             
              # The current version of snooze.
         
     | 
| 
       3 
3 
     | 
    
         
             
              # Do not change the value by hand; it will be updated automatically by the gem release script.
         
     | 
| 
       4 
     | 
    
         
            -
              VERSION = "0. 
     | 
| 
      
 4 
     | 
    
         
            +
              VERSION = "1.0.0"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              API_HOST = 'https://api.snooze.io'
         
     | 
| 
      
 7 
     | 
    
         
            +
              API_PATH = 'api'
         
     | 
| 
       5 
8 
     | 
    
         
             
            end
         
     | 
| 
       6 
9 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
            require 'faraday'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 12 
     | 
    
         
            +
            require 'snooze/connection_error'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require 'snooze/button'
         
     | 
| 
      
 14 
     | 
    
         
            +
            require 'snooze/post'
         
     | 
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Snooze::Button
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              attr_reader :dry_run, :clock_id, :method, :verbose
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def initialize(clock_id, options = {})
         
     | 
| 
      
 6 
     | 
    
         
            +
                @clock_id = clock_id
         
     | 
| 
      
 7 
     | 
    
         
            +
                @dry_run = options[:dry_run] || false
         
     | 
| 
      
 8 
     | 
    
         
            +
                @method = :snooze!
         
     | 
| 
      
 9 
     | 
    
         
            +
                @verbose = options[:verbose] || false
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                if @dry_run
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @method = :ping!
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @verbose = true
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              # Send snooze! or ping! to Snooze
         
     | 
| 
      
 18 
     | 
    
         
            +
              def snooze!
         
     | 
| 
      
 19 
     | 
    
         
            +
                log "Sending #{@method} to Snooze.io"
         
     | 
| 
      
 20 
     | 
    
         
            +
                handle_post_response { Snooze::Post.send(@method, @clock_id) }
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              # With backtrace capturing do
         
     | 
| 
      
 24 
     | 
    
         
            +
              def with_backtrace(&block)
         
     | 
| 
      
 25 
     | 
    
         
            +
                begin
         
     | 
| 
      
 26 
     | 
    
         
            +
                  log "Yielding backtrace block"
         
     | 
| 
      
 27 
     | 
    
         
            +
                  yield if block_given?
         
     | 
| 
      
 28 
     | 
    
         
            +
                  Snooze::Post.snooze!
         
     | 
| 
      
 29 
     | 
    
         
            +
                rescue Exception => detail
         
     | 
| 
      
 30 
     | 
    
         
            +
                  handle_post_response { Snooze::Post.exception!(@clock_id, detail.backtrace.join("\n  ")) }
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              private
         
     | 
| 
      
 35 
     | 
    
         
            +
              # Handle a post response
         
     | 
| 
      
 36 
     | 
    
         
            +
              # The block given should be a Snooze::Post class function.
         
     | 
| 
      
 37 
     | 
    
         
            +
              def handle_post_response(&block)
         
     | 
| 
      
 38 
     | 
    
         
            +
                exit_code = 1
         
     | 
| 
      
 39 
     | 
    
         
            +
                begin
         
     | 
| 
      
 40 
     | 
    
         
            +
                  response = yield
         
     | 
| 
      
 41 
     | 
    
         
            +
                  exit_code = 0 if response.success?
         
     | 
| 
      
 42 
     | 
    
         
            +
                  log "Error: Snooze returned status error #{response.status}" unless response.success?
         
     | 
| 
      
 43 
     | 
    
         
            +
                  log "Snooze returned status message: #{response.body}" if @verbose
         
     | 
| 
      
 44 
     | 
    
         
            +
                rescue Snooze::ConnectionError
         
     | 
| 
      
 45 
     | 
    
         
            +
                  log "Error: Snooze server is unreachable"
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
                exit_code
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              def log(msg)
         
     | 
| 
      
 51 
     | 
    
         
            +
                puts msg if @verbose
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/snooze/post.rb
    ADDED
    
    | 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Snooze::Post
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              # Setup the api host URI for the given action
         
     | 
| 
      
 4 
     | 
    
         
            +
              def self.generate_uri_from_action(action)
         
     | 
| 
      
 5 
     | 
    
         
            +
                URI.parse("#{Snooze::API_HOST}/#{Snooze::API_PATH}/#{action}")
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              # Setup the connection
         
     | 
| 
      
 9 
     | 
    
         
            +
              def self.setup_connection(uri)
         
     | 
| 
      
 10 
     | 
    
         
            +
                ::Faraday.new(:url => uri)
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              # Execute an HTTP post
         
     | 
| 
      
 14 
     | 
    
         
            +
              def self.execute!(action, post_body, retries = 4)
         
     | 
| 
      
 15 
     | 
    
         
            +
                uri = self.generate_uri_from_action(action)
         
     | 
| 
      
 16 
     | 
    
         
            +
                response = nil
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                begin
         
     | 
| 
      
 19 
     | 
    
         
            +
                  connection = self.setup_connection(uri)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  response = connection.post uri.path do |request|
         
     | 
| 
      
 22 
     | 
    
         
            +
                    request.headers['Content-Type'] = 'application/json'
         
     | 
| 
      
 23 
     | 
    
         
            +
                    request.options[:timeout] = 5
         
     | 
| 
      
 24 
     | 
    
         
            +
                    request.options[:open_timeout] = 2
         
     | 
| 
      
 25 
     | 
    
         
            +
                    request.body = post_body
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  raise Faraday::Error::ConnectionFailed.new('') if response.status == 500
         
     | 
| 
      
 29 
     | 
    
         
            +
                rescue Faraday::Error::TimeoutError, Faraday::Error::ConnectionFailed, Faraday::Error::ClientError, Faraday::Error => e
         
     | 
| 
      
 30 
     | 
    
         
            +
                  raise Snooze::ConnectionError if retries <= 0
         
     | 
| 
      
 31 
     | 
    
         
            +
                  sleep_for_a_while(5 - retries)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  response = self.execute!(action, post_body, retries-1)
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                response
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              # Ping Snooze
         
     | 
| 
      
 39 
     | 
    
         
            +
              def self.ping!(clock_id)
         
     | 
| 
      
 40 
     | 
    
         
            +
                self.execute!('ping', "{ \"id\":\"#{clock_id}\" }" )
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              # Snooze an alarm
         
     | 
| 
      
 44 
     | 
    
         
            +
              def self.snooze!(clock_id)
         
     | 
| 
      
 45 
     | 
    
         
            +
                self.execute!('snooze', "{ \"id\":\"#{clock_id}\" }")
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              # Pass an exception backtrace to Snooze
         
     | 
| 
      
 49 
     | 
    
         
            +
              def self.exception!(clock_id, backtrace="")
         
     | 
| 
      
 50 
     | 
    
         
            +
                self.execute!('exception', "{ \"id\":\"#{clock_id}\", \"backtrace\":\"#{backtrace}\" }")
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              private
         
     | 
| 
      
 54 
     | 
    
         
            +
              def self.sleep_for_a_while(seconds)
         
     | 
| 
      
 55 
     | 
    
         
            +
                sleep(seconds)
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            end
         
     | 
    
        data/snooze.gemspec
    CHANGED
    
    | 
         @@ -2,8 +2,8 @@ Gem::Specification.new do |s| 
     | 
|
| 
       2 
2 
     | 
    
         
             
              s.name    = "snooze"
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
              # Do not set the version and date field manually, this is done by the release script
         
     | 
| 
       5 
     | 
    
         
            -
              s.version = "0. 
     | 
| 
       6 
     | 
    
         
            -
              s.date    = "2013-03 
     | 
| 
      
 5 
     | 
    
         
            +
              s.version = "1.0.0"
         
     | 
| 
      
 6 
     | 
    
         
            +
              s.date    = "2013-05-03"
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              s.bindir             = 'bin'
         
     | 
| 
       9 
9 
     | 
    
         
             
              s.executables        = ['snooze']
         
     | 
| 
         @@ -19,8 +19,12 @@ Gem::Specification.new do |s| 
     | 
|
| 
       19 
19 
     | 
    
         
             
              s.rdoc_options << '--title' << s.name << '--main' << 'README.rdoc' << '--line-numbers' << '--inline-source'
         
     | 
| 
       20 
20 
     | 
    
         
             
              s.extra_rdoc_files = ['README.rdoc']
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
              s.add_dependency('faraday')
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       22 
24 
     | 
    
         
             
              s.add_development_dependency('rake')
         
     | 
| 
       23 
25 
     | 
    
         
             
              s.add_development_dependency('rspec', '~> 2.8')
         
     | 
| 
      
 26 
     | 
    
         
            +
              s.add_development_dependency('guard-rspec')
         
     | 
| 
      
 27 
     | 
    
         
            +
              s.add_development_dependency('rb-fsevent')
         
     | 
| 
       24 
28 
     | 
    
         | 
| 
       25 
29 
     | 
    
         
             
              s.authors  = ['Bart ten Brinke']
         
     | 
| 
       26 
30 
     | 
    
         
             
              s.email    = ['contact@snooze.io']
         
     | 
| 
         @@ -28,6 +32,6 @@ Gem::Specification.new do |s| 
     | 
|
| 
       28 
32 
     | 
    
         | 
| 
       29 
33 
     | 
    
         
             
              # The files and test_files directives are set automatically by the release script.
         
     | 
| 
       30 
34 
     | 
    
         
             
              # Do not change them by hand, but make sure to add the files to the git repository.
         
     | 
| 
       31 
     | 
    
         
            -
              s.files      = %w(.gitignore Gemfile Gemfile.lock LICENSE README.rdoc Rakefile bin/snooze lib/snooze.rb snooze.gemspec spec/spec_helper.rb tasks/github-gem.rake)
         
     | 
| 
       32 
     | 
    
         
            -
              s.test_files = %w()
         
     | 
| 
      
 35 
     | 
    
         
            +
              s.files      = %w(.gitignore .travis.yml Gemfile Gemfile.lock Guardfile LICENSE README.rdoc Rakefile bin/snooze lib/snooze.rb lib/snooze/button.rb lib/snooze/connection_error.rb lib/snooze/post.rb snooze.gemspec spec/spec_helper.rb spec/unit/button_spec.rb spec/unit/post_spec.rb tasks/github-gem.rake)
         
     | 
| 
      
 36 
     | 
    
         
            +
              s.test_files = %w(spec/unit/button_spec.rb spec/unit/post_spec.rb)
         
     | 
| 
       33 
37 
     | 
    
         
             
            end
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -7,4 +7,12 @@ require 'snooze' 
     | 
|
| 
       7 
7 
     | 
    
         
             
            # Include all files in the spec_helper directory
         
     | 
| 
       8 
8 
     | 
    
         
             
            Dir[File.dirname(__FILE__) + "/lib/**/*.rb"].each do |file|
         
     | 
| 
       9 
9 
     | 
    
         
             
              require file
         
     | 
| 
      
 10 
     | 
    
         
            +
            end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            RSpec.configure do |config|
         
     | 
| 
      
 13 
     | 
    
         
            +
              config.treat_symbols_as_metadata_keys_with_true_values = true
         
     | 
| 
      
 14 
     | 
    
         
            +
              config.run_all_when_everything_filtered                = true
         
     | 
| 
      
 15 
     | 
    
         
            +
              config.color_enabled = true
         
     | 
| 
      
 16 
     | 
    
         
            +
              config.filter_run :focus
         
     | 
| 
      
 17 
     | 
    
         
            +
              config.order = 'random'
         
     | 
| 
       10 
18 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Snooze::Button, 'button' do
         
     | 
| 
      
 4 
     | 
    
         
            +
              let (:button) { Snooze::Button.new('8765-1234') }
         
     | 
| 
      
 5 
     | 
    
         
            +
              let (:response) { Faraday::Response.new(:status => 200)}
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              it "should initialize a dry run correctly" do
         
     | 
| 
      
 8 
     | 
    
         
            +
                dry_button = Snooze::Button.new('8765-1234', :dry_run => true)
         
     | 
| 
      
 9 
     | 
    
         
            +
                dry_button.dry_run.should == true
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              it "should capture the clock id" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                button.clock_id.should == '8765-1234'
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              it "should call ping! if dry run" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                button = Snooze::Button.new('8765-1234', :dry_run => true)
         
     | 
| 
      
 18 
     | 
    
         
            +
                Snooze::Post.should_receive(:ping!).once.and_return(response)
         
     | 
| 
      
 19 
     | 
    
         
            +
                button.snooze!
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              it "should support with_backtrace_do" do
         
     | 
| 
      
 23 
     | 
    
         
            +
                Snooze::Post.should_receive(:exception!).once.and_return(response)
         
     | 
| 
      
 24 
     | 
    
         
            +
                button.with_backtrace do
         
     | 
| 
      
 25 
     | 
    
         
            +
                  raise 'terrible exception!'
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              describe "snooze! status code handling" do
         
     | 
| 
      
 30 
     | 
    
         
            +
                it "should support 200" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  Snooze::Post.should_receive(:snooze!).once.and_return(response)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  button.snooze!.should == 0
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                [500,404,403,100].each do |status_code|
         
     | 
| 
      
 36 
     | 
    
         
            +
                  it "should support #{status_code}" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                    Snooze::Post.should_receive(:snooze!).once.and_return( Faraday::Response.new(:status => status_code) )
         
     | 
| 
      
 38 
     | 
    
         
            +
                    button.snooze!.should == 1
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,102 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Snooze::Post do
         
     | 
| 
      
 4 
     | 
    
         
            +
              let (:test_connection) {
         
     | 
| 
      
 5 
     | 
    
         
            +
                Faraday.new do |builder|
         
     | 
| 
      
 6 
     | 
    
         
            +
                  builder.adapter :test do |stub|
         
     | 
| 
      
 7 
     | 
    
         
            +
                    stub.post('api/action') { [200, {}, ''] }
         
     | 
| 
      
 8 
     | 
    
         
            +
                    stub.post('api/ping') { [200, {:id=>"1234-5678"}, ''] }
         
     | 
| 
      
 9 
     | 
    
         
            +
                    stub.post('api/snooze') { [200, {:id=>"1234-5678"}, ''] }
         
     | 
| 
      
 10 
     | 
    
         
            +
                    stub.post('api/exception') { [200, {:id=>"1234-5678", :backtrace => "error\nwith\newlines"}, ''] }
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
              }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              it "should generate the correct path" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                Snooze::Post.generate_uri_from_action('test').to_s.should == 'https://api.snooze.io/api/test'
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              it "should setup a faraday connection" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                connection = Snooze::Post.setup_connection('http://www.example.com/')
         
     | 
| 
      
 21 
     | 
    
         
            +
                connection.is_a?(::Faraday::Connection).should be_true
         
     | 
| 
      
 22 
     | 
    
         
            +
                connection.url_prefix.to_s.should == 'http://www.example.com/'
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              it "should post to an action URL" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                Snooze::Post.stub!(:setup_connection).and_return(test_connection)
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                response = Snooze::Post.execute!('action', {:test_data => true})
         
     | 
| 
      
 29 
     | 
    
         
            +
                response.status.should == 200
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              describe 'ping' do
         
     | 
| 
      
 33 
     | 
    
         
            +
                it "should post to the ping URL" do
         
     | 
| 
      
 34 
     | 
    
         
            +
                  Snooze::Post.stub!(:setup_connection).and_return(test_connection)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  response = Snooze::Post.ping!('1234-5678')
         
     | 
| 
      
 36 
     | 
    
         
            +
                  response.status.should == 200
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                it "should handle unkown clock_ids" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  test_connection = Faraday.new do |builder|
         
     | 
| 
      
 41 
     | 
    
         
            +
                    builder.adapter :test do |stub|
         
     | 
| 
      
 42 
     | 
    
         
            +
                      stub.post('api/ping') { [404, {:id=>"1234-5679"}, ''] }
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  Snooze::Post.stub!(:setup_connection).and_return(test_connection)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  response = Snooze::Post.ping!('1234-5679')
         
     | 
| 
      
 48 
     | 
    
         
            +
                  response.status.should == 404
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              describe 'snooze' do
         
     | 
| 
      
 53 
     | 
    
         
            +
                it "should post to the snooze URL" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  Snooze::Post.stub!(:setup_connection).and_return(test_connection)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  response = Snooze::Post.snooze!('1234-5678')
         
     | 
| 
      
 56 
     | 
    
         
            +
                  response.status.should == 200
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                it "should handle unkown clock_ids" do
         
     | 
| 
      
 60 
     | 
    
         
            +
                  test_connection = Faraday.new do |builder|
         
     | 
| 
      
 61 
     | 
    
         
            +
                    builder.adapter :test do |stub|
         
     | 
| 
      
 62 
     | 
    
         
            +
                      stub.post('api/snooze') { [404, {:id=>"1234-5679"}, ''] }
         
     | 
| 
      
 63 
     | 
    
         
            +
                    end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  Snooze::Post.stub!(:setup_connection).and_return(test_connection)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  response = Snooze::Post.snooze!('1234-5679')
         
     | 
| 
      
 68 
     | 
    
         
            +
                  response.status.should == 404
         
     | 
| 
      
 69 
     | 
    
         
            +
                end
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              describe 'exception' do
         
     | 
| 
      
 73 
     | 
    
         
            +
                it "should post a backtrace to the snooze URL" do
         
     | 
| 
      
 74 
     | 
    
         
            +
                  Snooze::Post.stub!(:setup_connection).and_return(test_connection)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  response = Snooze::Post.exception!('1234-5678', "error\nwith\newlines")
         
     | 
| 
      
 76 
     | 
    
         
            +
                  response.status.should == 200
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                it "should handle unkown clock_ids" do
         
     | 
| 
      
 80 
     | 
    
         
            +
                  test_connection = Faraday.new do |builder|
         
     | 
| 
      
 81 
     | 
    
         
            +
                    builder.adapter :test do |stub|
         
     | 
| 
      
 82 
     | 
    
         
            +
                      stub.post('api/exception') { [404, {:id=>"1234-5679", :backtrace => "error\nwith\newlines"}, ''] }
         
     | 
| 
      
 83 
     | 
    
         
            +
                    end
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                  Snooze::Post.stub!(:setup_connection).and_return(test_connection)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  response = Snooze::Post.exception!('1234-5679', "error\nwith\newlines")
         
     | 
| 
      
 88 
     | 
    
         
            +
                  response.status.should == 404
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
              describe 'execute!' do
         
     | 
| 
      
 93 
     | 
    
         
            +
                it "should retry five times" do
         
     | 
| 
      
 94 
     | 
    
         
            +
                  exception = Faraday::Error::TimeoutError.new('')
         
     | 
| 
      
 95 
     | 
    
         
            +
                  Snooze::Post.stub!(:setup_connection).and_raise(exception)
         
     | 
| 
      
 96 
     | 
    
         
            +
                  Snooze::Post.stub!(:sleep_for_a_while).and_return(true)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  Snooze::Post.should_receive(:execute!).exactly(5).times.and_call_original
         
     | 
| 
      
 98 
     | 
    
         
            +
                  expect { Snooze::Post.execute!('noop', {:a => 'b'}) }.to raise_error(Snooze::ConnectionError)
         
     | 
| 
      
 99 
     | 
    
         
            +
                end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
              end
         
     | 
| 
      
 102 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: snooze
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,8 +9,24 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2013-03 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2013-05-03 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
      
 14 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 15 
     | 
    
         
            +
              name: faraday
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 18 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 19 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 20 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 21 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 22 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 25 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 26 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 27 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 29 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       14 
30 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
31 
     | 
    
         
             
              name: rake
         
     | 
| 
       16 
32 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -43,6 +59,38 @@ dependencies: 
     | 
|
| 
       43 
59 
     | 
    
         
             
                - - ~>
         
     | 
| 
       44 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       45 
61 
     | 
    
         
             
                    version: '2.8'
         
     | 
| 
      
 62 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 63 
     | 
    
         
            +
              name: guard-rspec
         
     | 
| 
      
 64 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 66 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 67 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 68 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 69 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 70 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 71 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 72 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 73 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 74 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 75 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 76 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 77 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 78 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 79 
     | 
    
         
            +
              name: rb-fsevent
         
     | 
| 
      
 80 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 81 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 82 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 83 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 84 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 85 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 86 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 87 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 88 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 89 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 90 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 91 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 92 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 93 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       46 
94 
     | 
    
         
             
            description: ! "  For devops who run recurring jobs like rake tasks or bas scripts,\n
         
     | 
| 
       47 
95 
     | 
    
         
             
              \ Snooze.io is a notification service that tells you when something is wrong.\n
         
     | 
| 
       48 
96 
     | 
    
         
             
              \ Unlike just alerting when a job breaks, Snooze also alerts when a job did not
         
     | 
| 
         @@ -56,15 +104,22 @@ extra_rdoc_files: 
     | 
|
| 
       56 
104 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       57 
105 
     | 
    
         
             
            files:
         
     | 
| 
       58 
106 
     | 
    
         
             
            - .gitignore
         
     | 
| 
      
 107 
     | 
    
         
            +
            - .travis.yml
         
     | 
| 
       59 
108 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       60 
109 
     | 
    
         
             
            - Gemfile.lock
         
     | 
| 
      
 110 
     | 
    
         
            +
            - Guardfile
         
     | 
| 
       61 
111 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       62 
112 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       63 
113 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       64 
114 
     | 
    
         
             
            - bin/snooze
         
     | 
| 
       65 
115 
     | 
    
         
             
            - lib/snooze.rb
         
     | 
| 
      
 116 
     | 
    
         
            +
            - lib/snooze/button.rb
         
     | 
| 
      
 117 
     | 
    
         
            +
            - lib/snooze/connection_error.rb
         
     | 
| 
      
 118 
     | 
    
         
            +
            - lib/snooze/post.rb
         
     | 
| 
       66 
119 
     | 
    
         
             
            - snooze.gemspec
         
     | 
| 
       67 
120 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
      
 121 
     | 
    
         
            +
            - spec/unit/button_spec.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
            - spec/unit/post_spec.rb
         
     | 
| 
       68 
123 
     | 
    
         
             
            - tasks/github-gem.rake
         
     | 
| 
       69 
124 
     | 
    
         
             
            homepage: http://snooze.io
         
     | 
| 
       70 
125 
     | 
    
         
             
            licenses: []
         
     | 
| 
         @@ -84,12 +139,18 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       84 
139 
     | 
    
         
             
              - - ! '>='
         
     | 
| 
       85 
140 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       86 
141 
     | 
    
         
             
                  version: '0'
         
     | 
| 
      
 142 
     | 
    
         
            +
                  segments:
         
     | 
| 
      
 143 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 144 
     | 
    
         
            +
                  hash: 2415208834990755493
         
     | 
| 
       87 
145 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       88 
146 
     | 
    
         
             
              none: false
         
     | 
| 
       89 
147 
     | 
    
         
             
              requirements:
         
     | 
| 
       90 
148 
     | 
    
         
             
              - - ! '>='
         
     | 
| 
       91 
149 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       92 
150 
     | 
    
         
             
                  version: '0'
         
     | 
| 
      
 151 
     | 
    
         
            +
                  segments:
         
     | 
| 
      
 152 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 153 
     | 
    
         
            +
                  hash: 2415208834990755493
         
     | 
| 
       93 
154 
     | 
    
         
             
            requirements: []
         
     | 
| 
       94 
155 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       95 
156 
     | 
    
         
             
            rubygems_version: 1.8.24
         
     | 
| 
         @@ -97,4 +158,6 @@ signing_key: 
     | 
|
| 
       97 
158 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       98 
159 
     | 
    
         
             
            summary: A command line tool to inform the webservice at snooze.io that a job has
         
     | 
| 
       99 
160 
     | 
    
         
             
              run.
         
     | 
| 
       100 
     | 
    
         
            -
            test_files: 
     | 
| 
      
 161 
     | 
    
         
            +
            test_files:
         
     | 
| 
      
 162 
     | 
    
         
            +
            - spec/unit/button_spec.rb
         
     | 
| 
      
 163 
     | 
    
         
            +
            - spec/unit/post_spec.rb
         
     |