wait 0.4 → 0.4.1
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/lib/counters/base.rb +43 -0
 - data/lib/delayers/base.rb +24 -0
 - data/lib/delayers/exponential.rb +12 -0
 - data/lib/delayers/regular.rb +3 -0
 - data/lib/initialize.rb +16 -0
 - data/lib/loggers/base.rb +32 -0
 - data/lib/loggers/debug.rb +7 -0
 - data/lib/raisers/base.rb +18 -0
 - data/lib/raisers/passive.rb +3 -0
 - data/lib/rescuers/base.rb +15 -0
 - data/lib/testers/base.rb +18 -0
 - data/lib/testers/passive.rb +3 -0
 - data/lib/testers/truthy.rb +7 -0
 - metadata +15 -2
 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Wait
         
     | 
| 
      
 2 
     | 
    
         
            +
              class BaseCounter
         
     | 
| 
      
 3 
     | 
    
         
            +
                attr_reader :attempt
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(logger, total)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @logger = logger
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # Attempt to prevent causing an infinite loop by being very strict about
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # the value passed.
         
     | 
| 
      
 9 
     | 
    
         
            +
                  unless total.is_a?(Fixnum) and total > 0
         
     | 
| 
      
 10 
     | 
    
         
            +
                    raise(ArgumentError, "invalid number of attempts: #{total.inspect}")
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  @total = total
         
     | 
| 
      
 14 
     | 
    
         
            +
                  reset
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                # Called before all attempts to reset the counter.
         
     | 
| 
      
 18 
     | 
    
         
            +
                def reset
         
     | 
| 
      
 19 
     | 
    
         
            +
                  @attempt = 0
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                # Called before each attempt to increment the counter.
         
     | 
| 
      
 23 
     | 
    
         
            +
                def increment
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @attempt += 1
         
     | 
| 
      
 25 
     | 
    
         
            +
                  log
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                # Returns +true+ if this is the last attempt.
         
     | 
| 
      
 29 
     | 
    
         
            +
                def last_attempt?
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @attempt == @total
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                # Logs the current attempt count.
         
     | 
| 
      
 34 
     | 
    
         
            +
                def log
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @logger.debug "[Counter] attempt #{self}"
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                # Returns a string representation of the current count.
         
     | 
| 
      
 39 
     | 
    
         
            +
                def to_s
         
     | 
| 
      
 40 
     | 
    
         
            +
                  [@attempt, @total].join("/")
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end # BaseCounter
         
     | 
| 
      
 43 
     | 
    
         
            +
            end # Wait
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Wait
         
     | 
| 
      
 2 
     | 
    
         
            +
              class BaseDelayer
         
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize(logger, initial_delay)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @logger = logger
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @delay  = initial_delay
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                # Called before a reattempt to sleep a certain about of time.
         
     | 
| 
      
 9 
     | 
    
         
            +
                def sleep
         
     | 
| 
      
 10 
     | 
    
         
            +
                  log_delay
         
     | 
| 
      
 11 
     | 
    
         
            +
                  Kernel.sleep(@delay)
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                # Logs how long the delay is.
         
     | 
| 
      
 15 
     | 
    
         
            +
                def log_delay
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @logger.debug "[Delayer] delaying for #{self}"
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                # Returns a string representation of the delay.
         
     | 
| 
      
 20 
     | 
    
         
            +
                def to_s
         
     | 
| 
      
 21 
     | 
    
         
            +
                  "#{@delay}s"
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end # BaseDelayer
         
     | 
| 
      
 24 
     | 
    
         
            +
            end # Wait
         
     | 
    
        data/lib/initialize.rb
    ADDED
    
    | 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "timeout"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "logger"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "forwardable"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require File.expand_path("../loggers/base",         __FILE__)
         
     | 
| 
      
 6 
     | 
    
         
            +
            require File.expand_path("../loggers/debug",        __FILE__)
         
     | 
| 
      
 7 
     | 
    
         
            +
            require File.expand_path("../counters/base",        __FILE__)
         
     | 
| 
      
 8 
     | 
    
         
            +
            require File.expand_path("../delayers/base",        __FILE__)
         
     | 
| 
      
 9 
     | 
    
         
            +
            require File.expand_path("../delayers/regular",     __FILE__)
         
     | 
| 
      
 10 
     | 
    
         
            +
            require File.expand_path("../delayers/exponential", __FILE__)
         
     | 
| 
      
 11 
     | 
    
         
            +
            require File.expand_path("../testers/base",         __FILE__)
         
     | 
| 
      
 12 
     | 
    
         
            +
            require File.expand_path("../testers/passive",      __FILE__)
         
     | 
| 
      
 13 
     | 
    
         
            +
            require File.expand_path("../testers/truthy",       __FILE__)
         
     | 
| 
      
 14 
     | 
    
         
            +
            require File.expand_path("../rescuers/base",        __FILE__)
         
     | 
| 
      
 15 
     | 
    
         
            +
            require File.expand_path("../raisers/base",         __FILE__)
         
     | 
| 
      
 16 
     | 
    
         
            +
            require File.expand_path("../raisers/passive",      __FILE__)
         
     | 
    
        data/lib/loggers/base.rb
    ADDED
    
    | 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Wait
         
     | 
| 
      
 2 
     | 
    
         
            +
              class BaseLogger
         
     | 
| 
      
 3 
     | 
    
         
            +
                extend Forwardable
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                attr_reader :logger
         
     | 
| 
      
 6 
     | 
    
         
            +
                def_delegators :logger, :fatal,
         
     | 
| 
      
 7 
     | 
    
         
            +
                                       :error,
         
     | 
| 
      
 8 
     | 
    
         
            +
                                       :warn,
         
     | 
| 
      
 9 
     | 
    
         
            +
                                       :info,
         
     | 
| 
      
 10 
     | 
    
         
            +
                                       :debug
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @logger           = ::Logger.new(STDOUT)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @logger.level     = level
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @logger.formatter = formatter
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def level
         
     | 
| 
      
 19 
     | 
    
         
            +
                  ::Logger::WARN
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def formatter
         
     | 
| 
      
 23 
     | 
    
         
            +
                  proc do |severity, datetime, program_name, message|
         
     | 
| 
      
 24 
     | 
    
         
            +
                    [severity.ljust(5), message].join(" ") + "\n"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def backtrace(backtrace)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  backtrace.map { |line| (" " * 25) + line }.join("\n")
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end # Logger
         
     | 
| 
      
 32 
     | 
    
         
            +
            end # Wait
         
     | 
    
        data/lib/raisers/base.rb
    ADDED
    
    | 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Wait
         
     | 
| 
      
 2 
     | 
    
         
            +
              class BaseRaiser
         
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize(logger, exception)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @logger    = logger
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @exception = exception
         
     | 
| 
      
 6 
     | 
    
         
            +
                  log
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                # Returns +true+ if an exception ought to be raised.
         
     | 
| 
      
 10 
     | 
    
         
            +
                def raise?
         
     | 
| 
      
 11 
     | 
    
         
            +
                  false
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def log
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @logger.debug "[Raiser] raise? #{@exception.class.name}: #{raise?}"
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end # BaseRaiser
         
     | 
| 
      
 18 
     | 
    
         
            +
            end # Wait
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Wait
         
     | 
| 
      
 2 
     | 
    
         
            +
              class BaseRescuer
         
     | 
| 
      
 3 
     | 
    
         
            +
                attr_reader :exceptions
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(logger, *exceptions)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @logger     = logger
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @exceptions = Array(exceptions).flatten
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                # Logs an exception.
         
     | 
| 
      
 11 
     | 
    
         
            +
                def log(exception)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @logger.debug "[Rescuer] rescued: #{exception.class.name}: #{exception.message}\n#{@logger.backtrace(exception.backtrace)}"
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end # BaseRescuer
         
     | 
| 
      
 15 
     | 
    
         
            +
            end # Wait
         
     | 
    
        data/lib/testers/base.rb
    ADDED
    
    | 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Wait
         
     | 
| 
      
 2 
     | 
    
         
            +
              class BaseTester
         
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize(logger, result)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @logger = logger
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @result = result
         
     | 
| 
      
 6 
     | 
    
         
            +
                  log
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                # Returns +true+ if a result if valid.
         
     | 
| 
      
 10 
     | 
    
         
            +
                def valid?
         
     | 
| 
      
 11 
     | 
    
         
            +
                  true
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def log
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @logger.debug "[Tester] result: #{@result.inspect}"
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end # BaseTester
         
     | 
| 
      
 18 
     | 
    
         
            +
            end # Wait
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: wait
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.1
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2013-01- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2013-01-09 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       14 
14 
     | 
    
         
             
            description: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            email: todd@paperlesspost.com
         
     | 
| 
         @@ -17,6 +17,19 @@ executables: [] 
     | 
|
| 
       17 
17 
     | 
    
         
             
            extensions: []
         
     | 
| 
       18 
18 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       19 
19 
     | 
    
         
             
            files:
         
     | 
| 
      
 20 
     | 
    
         
            +
            - lib/counters/base.rb
         
     | 
| 
      
 21 
     | 
    
         
            +
            - lib/delayers/base.rb
         
     | 
| 
      
 22 
     | 
    
         
            +
            - lib/delayers/exponential.rb
         
     | 
| 
      
 23 
     | 
    
         
            +
            - lib/delayers/regular.rb
         
     | 
| 
      
 24 
     | 
    
         
            +
            - lib/initialize.rb
         
     | 
| 
      
 25 
     | 
    
         
            +
            - lib/loggers/base.rb
         
     | 
| 
      
 26 
     | 
    
         
            +
            - lib/loggers/debug.rb
         
     | 
| 
      
 27 
     | 
    
         
            +
            - lib/raisers/base.rb
         
     | 
| 
      
 28 
     | 
    
         
            +
            - lib/raisers/passive.rb
         
     | 
| 
      
 29 
     | 
    
         
            +
            - lib/rescuers/base.rb
         
     | 
| 
      
 30 
     | 
    
         
            +
            - lib/testers/base.rb
         
     | 
| 
      
 31 
     | 
    
         
            +
            - lib/testers/passive.rb
         
     | 
| 
      
 32 
     | 
    
         
            +
            - lib/testers/truthy.rb
         
     | 
| 
       20 
33 
     | 
    
         
             
            - lib/wait.rb
         
     | 
| 
       21 
34 
     | 
    
         
             
            homepage: http://github.com/paperlesspost/wait
         
     | 
| 
       22 
35 
     | 
    
         
             
            licenses: []
         
     |