resque-scheduler 2.2.0 → 2.3.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.
Potentially problematic release.
This version of resque-scheduler might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/.rubocop.yml +12 -3
- data/.travis.yml +8 -1
- data/AUTHORS.md +1 -0
- data/Gemfile +1 -1
- data/HISTORY.md +10 -0
- data/README.md +15 -5
- data/Rakefile +1 -1
- data/lib/resque/scheduler.rb +7 -4
- data/lib/resque/scheduler/lock/base.rb +3 -3
- data/lib/resque/scheduler/lock/resilient.rb +1 -1
- data/lib/resque/scheduler_locking.rb +1 -2
- data/lib/resque_scheduler.rb +2 -13
- data/lib/resque_scheduler/server.rb +2 -3
- data/lib/resque_scheduler/tasks.rb +1 -1
- data/lib/resque_scheduler/util.rb +34 -0
- data/lib/resque_scheduler/version.rb +1 -1
- data/resque-scheduler.gemspec +2 -1
- data/test/delayed_queue_test.rb +5 -8
- data/test/resque-web_test.rb +26 -8
- data/test/scheduler_test.rb +3 -3
- data/test/support/redis_instance.rb +2 -2
- data/test/test_helper.rb +8 -0
- metadata +10 -32
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            !binary "U0hBMQ==":
         | 
| 3 | 
            +
              metadata.gz: !binary |-
         | 
| 4 | 
            +
                YTM5YzMwMmUzNzYyNWJkMmY0MTJiOTc0MTIxMTA4MTBlNWY1ZWVmMw==
         | 
| 5 | 
            +
              data.tar.gz: !binary |-
         | 
| 6 | 
            +
                Zjc3ZTlmZWE5MDBjNGExYjkzZWEwZTk5NDMwYTI4NjIzNGJjM2Q5Ng==
         | 
| 7 | 
            +
            !binary "U0hBNTEy":
         | 
| 8 | 
            +
              metadata.gz: !binary |-
         | 
| 9 | 
            +
                M2I1NDI0M2VmZGRkNTAyZTNjODJjNTI4YjRiN2QyYmIxMTk1ZDk5MjIzY2Jl
         | 
| 10 | 
            +
                ZjJlMjE3MzM2MzFmMTA2ZWY3ZjdhMzY5NmQ3NWY0ODA5ZDE3ZDk4OWUzZmRh
         | 
| 11 | 
            +
                MDhiZjUxZTJlZDdjZjdhYmU0NjRmMmE0NDg1YmE5ZjQ4MDA1YjE=
         | 
| 12 | 
            +
              data.tar.gz: !binary |-
         | 
| 13 | 
            +
                ZTFlN2RhYTljYzRjOTAyMzY2NzA2YTRiMzNiNWQwMDFmOGE3OThlZTUyZTVl
         | 
| 14 | 
            +
                ODFkNDk3MDBiMmZhZmEyOTAwZDNkODgwNDQxMTEwNDRjM2QwNzk3OGI2OTYx
         | 
| 15 | 
            +
                ZWU3NGIyMTA1Y2E2NWYwMWM1YjI2ZTkzOTdhNzhiYTJjYThlODU=
         | 
    
        data/.rubocop.yml
    CHANGED
    
    | @@ -2,18 +2,21 @@ | |
| 2 2 | 
             
            # The point is for the user to remove these configuration records
         | 
| 3 3 | 
             
            # one by one as the offences are removed from the code base.
         | 
| 4 4 |  | 
| 5 | 
            -
            AccessControl:
         | 
| 6 | 
            -
              Enabled: false
         | 
| 7 | 
            -
             | 
| 8 5 | 
             
            AlignParameters:
         | 
| 9 6 | 
             
              Enabled: false
         | 
| 10 7 |  | 
| 11 8 | 
             
            AssignmentInCondition:
         | 
| 12 9 | 
             
              Enabled: false
         | 
| 13 10 |  | 
| 11 | 
            +
            BracesAroundHashParameters:
         | 
| 12 | 
            +
              Enabled: false
         | 
| 13 | 
            +
             | 
| 14 14 | 
             
            CaseEquality:
         | 
| 15 15 | 
             
              Enabled: false
         | 
| 16 16 |  | 
| 17 | 
            +
            ClassLength:
         | 
| 18 | 
            +
              Enabled: false
         | 
| 19 | 
            +
             | 
| 17 20 | 
             
            ClassVars:
         | 
| 18 21 | 
             
              Enabled: false
         | 
| 19 22 |  | 
| @@ -26,12 +29,18 @@ ColonMethodCall: | |
| 26 29 | 
             
            CommentAnnotation:
         | 
| 27 30 | 
             
              Enabled: false
         | 
| 28 31 |  | 
| 32 | 
            +
            CyclomaticComplexity:
         | 
| 33 | 
            +
              Enabled: false
         | 
| 34 | 
            +
             | 
| 29 35 | 
             
            Documentation:
         | 
| 30 36 | 
             
              Enabled: false
         | 
| 31 37 |  | 
| 32 38 | 
             
            EmptyLines:
         | 
| 33 39 | 
             
              Enabled: false
         | 
| 34 40 |  | 
| 41 | 
            +
            EmptyLinesAroundBody:
         | 
| 42 | 
            +
              Enabled: false
         | 
| 43 | 
            +
             | 
| 35 44 | 
             
            Encoding:
         | 
| 36 45 | 
             
              Enabled: false
         | 
| 37 46 |  | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -1,4 +1,3 @@ | |
| 1 | 
            -
            ---
         | 
| 2 1 | 
             
            language: ruby
         | 
| 3 2 | 
             
            rvm:
         | 
| 4 3 | 
             
            - ree
         | 
| @@ -8,3 +7,11 @@ script: bundle exec rake rubocop test | |
| 8 7 | 
             
            notifications:
         | 
| 9 8 | 
             
              email:
         | 
| 10 9 | 
             
                recipients: daniel.buch+resque-scheduler@gmail.com
         | 
| 10 | 
            +
            deploy:
         | 
| 11 | 
            +
              provider: rubygems
         | 
| 12 | 
            +
              api_key:
         | 
| 13 | 
            +
                secure: dM97lL/jTu14mEHD2Ih/vQfZ8cWJWb+DQ8UKZjkD2JfYtvwEAlkPG9RrrDkSHb5qkYxG2VAhjyx/0MZJ0TsVL6wrLMC9gcJb3yomw2Sch2Noj68tEndiSUHnxrB9gKzbhHbjLQXDqYf4Hco9/PHHQp4piFPJhLzNZRehIuTJPcA=
         | 
| 14 | 
            +
              gem: resque-scheduler
         | 
| 15 | 
            +
              on:
         | 
| 16 | 
            +
                tags: true
         | 
| 17 | 
            +
                repo: resque/resque-scheduler
         | 
    
        data/AUTHORS.md
    CHANGED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/HISTORY.md
    CHANGED
    
    | @@ -1,3 +1,13 @@ | |
| 1 | 
            +
            ## 2.3.0 (2013-11-07)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * Fix re-introduced `ThreadError` on Ruby 2
         | 
| 4 | 
            +
            * **BREAKING CHANGE**: Added `RESQUE_SCHEDULER_INTERVAL` in place of `INTERVAL`
         | 
| 5 | 
            +
            * Use `Float()` instead of `Integer()` to calculate poll sleep amount
         | 
| 6 | 
            +
            * Upgraded dependence of Resque to support 1.25
         | 
| 7 | 
            +
            * Add rufus scheduler `every` notice to README
         | 
| 8 | 
            +
            * Use `Resque.validate` instead of custom `.validate_job!`
         | 
| 9 | 
            +
            * Specify MIT license in gemspec
         | 
| 10 | 
            +
             | 
| 1 11 | 
             
            ## 2.2.0 (2013-10-13)
         | 
| 2 12 |  | 
| 3 13 | 
             
            * Locking rufus-scheduler dependency to `~> 2.0`
         | 
    
        data/README.md
    CHANGED
    
    | @@ -14,8 +14,8 @@ This table explains the version requirements for redis | |
| 14 14 |  | 
| 15 15 | 
             
            | resque-scheduler version | required redis version|
         | 
| 16 16 | 
             
            |:-------------------------|----------------------:|
         | 
| 17 | 
            -
            |  | 
| 18 | 
            -
            | >= 0.0.1                 |  | 
| 17 | 
            +
            | ~> 2.0                   | >= 3.0.0              |
         | 
| 18 | 
            +
            | >= 0.0.1                 | ~> 1.3                |
         | 
| 19 19 |  | 
| 20 20 |  | 
| 21 21 | 
             
            Job scheduling is supported in two different way: Recurring (scheduled) and
         | 
| @@ -207,6 +207,11 @@ clear_leaderboards_moderator: | |
| 207 207 | 
             
              description: "This job will check Daemon every 30 seconds after 120 seconds after start"
         | 
| 208 208 | 
             
            ```
         | 
| 209 209 |  | 
| 210 | 
            +
            IMPORTANT: Rufus `every` syntax will calculate jobs scheduling time starting from the moment of deploy,
         | 
| 211 | 
            +
            resulting in resetting schedule time on every deploy, so it's probably a good idea to use it only for
         | 
| 212 | 
            +
            frequent jobs (like every 10-30 minutes), otherwise - when you use something like `every 20h` and deploy once-twice per day -
         | 
| 213 | 
            +
            it will schedule the job for 20 hours from deploy, resulting in a job to never be run.
         | 
| 214 | 
            +
             | 
| 210 215 | 
             
            NOTE: Six parameter cron's are also supported (as they supported by
         | 
| 211 216 | 
             
            rufus-scheduler which powers the resque-scheduler process).  This allows you
         | 
| 212 217 | 
             
            to schedule jobs per second (ie: `"30 * * * * *"` would fire a job every 30
         | 
| @@ -411,10 +416,15 @@ Resque::Scheduler.logfile = nil # that means, all messages go to STDOUT | |
| 411 416 |  | 
| 412 417 | 
             
            ### Polling frequency
         | 
| 413 418 |  | 
| 414 | 
            -
            You can pass  | 
| 415 | 
            -
            The default is 5 seconds, but for a | 
| 419 | 
            +
            You can pass a `RESQUE_SCHEDULER_INTERVAL` option which is an integer or float
         | 
| 420 | 
            +
            representing the polling frequency. The default is 5 seconds, but for a
         | 
| 421 | 
            +
            semi-active app you may want to use a smaller value.
         | 
| 422 | 
            +
             | 
| 423 | 
            +
                $ RESQUE_SCHEDULER_INTERVAL=1 rake resque:scheduler
         | 
| 416 424 |  | 
| 417 | 
            -
             | 
| 425 | 
            +
            **NOTE** This value was previously `INTERVAL` but was renamed to
         | 
| 426 | 
            +
            `RESQUE_SCHEDULER_INTERVAL` to avoid clashing with the interval Resque
         | 
| 427 | 
            +
            uses for its jobs.
         | 
| 418 428 |  | 
| 419 429 | 
             
            ### Plagiarism alert
         | 
| 420 430 |  | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/lib/resque/scheduler.rb
    CHANGED
    
    | @@ -220,7 +220,7 @@ module Resque | |
| 220 220 | 
             
                    args = job_config['args'] || job_config[:args]
         | 
| 221 221 |  | 
| 222 222 | 
             
                    klass_name = job_config['class'] || job_config[:class]
         | 
| 223 | 
            -
                    klass =  | 
| 223 | 
            +
                    klass = ResqueScheduler::Util.constantize(klass_name) rescue klass_name
         | 
| 224 224 |  | 
| 225 225 | 
             
                    params = args.is_a?(Hash) ? [args] : Array(args)
         | 
| 226 226 | 
             
                    queue = job_config['queue'] || job_config[:queue] || Resque.queue_from_class(klass)
         | 
| @@ -230,7 +230,7 @@ module Resque | |
| 230 230 | 
             
                      # job class can not be constantized (via a requeue call from the web perhaps), fall
         | 
| 231 231 | 
             
                      # back to enqueing normally via Resque::Job.create.
         | 
| 232 232 | 
             
                      begin
         | 
| 233 | 
            -
                         | 
| 233 | 
            +
                        ResqueScheduler::Util.constantize(job_klass).scheduled(queue, klass_name, *params)
         | 
| 234 234 | 
             
                      rescue NameError
         | 
| 235 235 | 
             
                        # Note that the custom job class (job_config['custom_job_class']) is the one enqueued
         | 
| 236 236 | 
             
                        Resque::Job.create(queue, job_klass, *params)
         | 
| @@ -313,8 +313,11 @@ module Resque | |
| 313 313 | 
             
                    @shutdown = true
         | 
| 314 314 |  | 
| 315 315 | 
             
                    if @sleeping
         | 
| 316 | 
            -
                       | 
| 317 | 
            -
             | 
| 316 | 
            +
                      thread = Thread.new do
         | 
| 317 | 
            +
                        Resque.clean_schedules
         | 
| 318 | 
            +
                        release_master_lock!
         | 
| 319 | 
            +
                      end
         | 
| 320 | 
            +
                      thread.join
         | 
| 318 321 | 
             
                      exit
         | 
| 319 322 | 
             
                    end
         | 
| 320 323 | 
             
                  end
         | 
| @@ -14,7 +14,7 @@ module Resque | |
| 14 14 |  | 
| 15 15 | 
             
                    # Attempts to acquire the lock. Returns true if successfully acquired.
         | 
| 16 16 | 
             
                    def acquire!
         | 
| 17 | 
            -
                       | 
| 17 | 
            +
                      fail NotImplementedError
         | 
| 18 18 | 
             
                    end
         | 
| 19 19 |  | 
| 20 20 | 
             
                    def value
         | 
| @@ -23,7 +23,7 @@ module Resque | |
| 23 23 |  | 
| 24 24 | 
             
                    # Returns true if you currently hold the lock.
         | 
| 25 25 | 
             
                    def locked?
         | 
| 26 | 
            -
                       | 
| 26 | 
            +
                      fail NotImplementedError
         | 
| 27 27 | 
             
                    end
         | 
| 28 28 |  | 
| 29 29 | 
             
                    # Releases the lock.
         | 
| @@ -31,7 +31,7 @@ module Resque | |
| 31 31 | 
             
                      Resque.redis.del(key) == 1
         | 
| 32 32 | 
             
                    end
         | 
| 33 33 |  | 
| 34 | 
            -
             | 
| 34 | 
            +
                    private
         | 
| 35 35 |  | 
| 36 36 | 
             
                    # Extends the lock by `timeout` seconds.
         | 
| 37 37 | 
             
                    def extend_lock!
         | 
    
        data/lib/resque_scheduler.rb
    CHANGED
    
    | @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            require 'rubygems'
         | 
| 2 2 | 
             
            require 'resque'
         | 
| 3 3 | 
             
            require 'resque_scheduler/version'
         | 
| 4 | 
            +
            require 'resque_scheduler/util'
         | 
| 4 5 | 
             
            require 'resque/scheduler'
         | 
| 5 6 | 
             
            require 'resque_scheduler/plugin'
         | 
| 6 7 |  | 
| 7 8 | 
             
            module ResqueScheduler
         | 
| 8 | 
            -
             | 
| 9 9 | 
             
              #
         | 
| 10 10 | 
             
              # Accepts a new schedule configuration of the form:
         | 
| 11 11 | 
             
              #
         | 
| @@ -132,7 +132,7 @@ module ResqueScheduler | |
| 132 132 | 
             
              # for queueing.  Until timestamp is in the past, the job will
         | 
| 133 133 | 
             
              # sit in the schedule list.
         | 
| 134 134 | 
             
              def enqueue_at(timestamp, klass, *args)
         | 
| 135 | 
            -
                 | 
| 135 | 
            +
                validate(klass)
         | 
| 136 136 | 
             
                enqueue_at_with_queue(queue_from_class(klass), timestamp, klass, *args)
         | 
| 137 137 | 
             
              end
         | 
| 138 138 |  | 
| @@ -330,16 +330,6 @@ module ResqueScheduler | |
| 330 330 | 
             
                  end
         | 
| 331 331 | 
             
                end
         | 
| 332 332 |  | 
| 333 | 
            -
                def validate_job!(klass)
         | 
| 334 | 
            -
                  if klass.to_s.empty?
         | 
| 335 | 
            -
                    raise Resque::NoClassError.new("Jobs must be given a class.")
         | 
| 336 | 
            -
                  end
         | 
| 337 | 
            -
             | 
| 338 | 
            -
                  unless queue_from_class(klass)
         | 
| 339 | 
            -
                    raise Resque::NoQueueError.new("Jobs must be placed onto a queue.")
         | 
| 340 | 
            -
                  end
         | 
| 341 | 
            -
                end
         | 
| 342 | 
            -
             | 
| 343 333 | 
             
                def prepare_schedule(schedule_hash)
         | 
| 344 334 | 
             
                  prepared_hash = {}
         | 
| 345 335 | 
             
                  schedule_hash.each do |name, job_spec|
         | 
| @@ -349,7 +339,6 @@ module ResqueScheduler | |
| 349 339 | 
             
                  end
         | 
| 350 340 | 
             
                  prepared_hash
         | 
| 351 341 | 
             
                end
         | 
| 352 | 
            -
             | 
| 353 342 | 
             
            end
         | 
| 354 343 |  | 
| 355 344 | 
             
            Resque.extend ResqueScheduler
         | 
| @@ -1,6 +1,5 @@ | |
| 1 1 | 
             
            require 'resque_scheduler'
         | 
| 2 2 | 
             
            require 'resque/server'
         | 
| 3 | 
            -
             | 
| 4 3 | 
             
            # Extend Resque::Server to add tabs
         | 
| 5 4 | 
             
            module ResqueScheduler
         | 
| 6 5 |  | 
| @@ -16,7 +15,7 @@ module ResqueScheduler | |
| 16 15 | 
             
                      end
         | 
| 17 16 |  | 
| 18 17 | 
             
                      def queue_from_class_name(class_name)
         | 
| 19 | 
            -
                        Resque.queue_from_class( | 
| 18 | 
            +
                        Resque.queue_from_class(ResqueScheduler::Util.constantize(class_name))
         | 
| 20 19 | 
             
                      end
         | 
| 21 20 | 
             
                    end
         | 
| 22 21 |  | 
| @@ -50,7 +49,7 @@ module ResqueScheduler | |
| 50 49 | 
             
                      config_args = config_args.merge(submitted_args)
         | 
| 51 50 |  | 
| 52 51 | 
             
                      # Insert the args hash into config and queue the resque job
         | 
| 53 | 
            -
                      config = config.merge( | 
| 52 | 
            +
                      config = config.merge('args' => config_args)
         | 
| 54 53 | 
             
                      Resque::Scheduler.enqueue_from_config(config)
         | 
| 55 54 | 
             
                      redirect u("/overview")
         | 
| 56 55 | 
             
                    end
         | 
| @@ -25,7 +25,7 @@ namespace :resque do | |
| 25 25 | 
             
                Resque::Scheduler.dynamic           = true if ENV['DYNAMIC_SCHEDULE']
         | 
| 26 26 | 
             
                Resque::Scheduler.verbose           = true if ENV['VERBOSE']
         | 
| 27 27 | 
             
                Resque::Scheduler.logfile           = ENV['LOGFILE'] if ENV['LOGFILE']
         | 
| 28 | 
            -
                Resque::Scheduler.poll_sleep_amount =  | 
| 28 | 
            +
                Resque::Scheduler.poll_sleep_amount = Float(ENV['RESQUE_SCHEDULER_INTERVAL']) if ENV['RESQUE_SCHEDULER_INTERVAL']
         | 
| 29 29 | 
             
                Resque::Scheduler.run
         | 
| 30 30 | 
             
              end
         | 
| 31 31 |  | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            module ResqueScheduler
         | 
| 2 | 
            +
              class Util
         | 
| 3 | 
            +
                # In order to upgrade to resque(1.25) which has deprecated following methods ,
         | 
| 4 | 
            +
                # we just added these usefull helpers back to use in Resque Scheduler.
         | 
| 5 | 
            +
                # refer to: https://github.com/resque/resque-scheduler/pull/273
         | 
| 6 | 
            +
                
         | 
| 7 | 
            +
                def self.constantize(camel_cased_word)
         | 
| 8 | 
            +
                  camel_cased_word = camel_cased_word.to_s
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  if camel_cased_word.include?('-')
         | 
| 11 | 
            +
                    camel_cased_word = classify(camel_cased_word)
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  names = camel_cased_word.split('::')
         | 
| 15 | 
            +
                  names.shift if names.empty? || names.first.empty?
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  constant = Object
         | 
| 18 | 
            +
                  names.each do |name|
         | 
| 19 | 
            +
                    args = Module.method(:const_get).arity != 1 ? [false] : []
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    if constant.const_defined?(name, *args)
         | 
| 22 | 
            +
                      constant = constant.const_get(name)
         | 
| 23 | 
            +
                    else
         | 
| 24 | 
            +
                      constant = constant.const_missing(name)
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                  constant
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def self.classify(dashed_word)
         | 
| 31 | 
            +
                  dashed_word.split('-').each { |part| part[0] = part[0].chr.upcase }.join
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
    
        data/resque-scheduler.gemspec
    CHANGED
    
    | @@ -13,6 +13,7 @@ Gem::Specification.new do |spec| | |
| 13 13 | 
             
              spec.description = %q{Light weight job scheduling on top of Resque.
         | 
| 14 14 | 
             
                Adds methods enqueue_at/enqueue_in to schedule jobs in the future.
         | 
| 15 15 | 
             
                Also supports queueing jobs on a fixed, cron-like schedule.}
         | 
| 16 | 
            +
              spec.license = 'MIT'
         | 
| 16 17 |  | 
| 17 18 | 
             
              spec.files        = `git ls-files`.split("\n")
         | 
| 18 19 | 
             
              spec.executables  = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| @@ -27,6 +28,6 @@ Gem::Specification.new do |spec| | |
| 27 28 | 
             
              spec.add_development_dependency 'rubocop' unless RUBY_VERSION < '1.9'
         | 
| 28 29 |  | 
| 29 30 | 
             
              spec.add_runtime_dependency 'redis', '>= 3.0.0'
         | 
| 30 | 
            -
              spec.add_runtime_dependency 'resque',  | 
| 31 | 
            +
              spec.add_runtime_dependency 'resque', '~> 1.25'
         | 
| 31 32 | 
             
              spec.add_runtime_dependency 'rufus-scheduler', '~> 2.0'
         | 
| 32 33 | 
             
            end
         | 
    
        data/test/delayed_queue_test.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ context "DelayedQueue" do | |
| 9 9 |  | 
| 10 10 | 
             
              test "enqueue_at adds correct list and zset" do
         | 
| 11 11 | 
             
                timestamp = Time.now + 1
         | 
| 12 | 
            -
                encoded_job =  Resque.encode( | 
| 12 | 
            +
                encoded_job =  Resque.encode(:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob))
         | 
| 13 13 |  | 
| 14 14 | 
             
                assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
         | 
| 15 15 | 
             
                assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
         | 
| @@ -37,7 +37,7 @@ context "DelayedQueue" do | |
| 37 37 |  | 
| 38 38 | 
             
              test "enqueue_at with queue adds correct list and zset and queue" do
         | 
| 39 39 | 
             
                timestamp = Time.now + 1
         | 
| 40 | 
            -
                encoded_job =  Resque.encode( | 
| 40 | 
            +
                encoded_job =  Resque.encode(:class => SomeIvarJob.to_s, :args => ["path"], :queue => 'critical')
         | 
| 41 41 |  | 
| 42 42 | 
             
                assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
         | 
| 43 43 | 
             
                assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
         | 
| @@ -66,7 +66,7 @@ context "DelayedQueue" do | |
| 66 66 |  | 
| 67 67 | 
             
              test "a job in the future doesn't come out" do
         | 
| 68 68 | 
             
                timestamp = Time.now + 600 # 10 minutes from now (in the future, shouldn't come out)
         | 
| 69 | 
            -
                encoded_job =  Resque.encode( | 
| 69 | 
            +
                encoded_job =  Resque.encode(:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob))
         | 
| 70 70 |  | 
| 71 71 | 
             
                assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
         | 
| 72 72 | 
             
                assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
         | 
| @@ -95,7 +95,7 @@ context "DelayedQueue" do | |
| 95 95 |  | 
| 96 96 | 
             
              test "enqueue_at and enqueue_in are equivelent" do
         | 
| 97 97 | 
             
                timestamp = Time.now + 60
         | 
| 98 | 
            -
                encoded_job =  Resque.encode( | 
| 98 | 
            +
                encoded_job =  Resque.encode(:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob))
         | 
| 99 99 |  | 
| 100 100 | 
             
                Resque.enqueue_at(timestamp, SomeIvarJob, "path")
         | 
| 101 101 | 
             
                Resque.enqueue_in(timestamp - Time.now, SomeIvarJob, "path")
         | 
| @@ -267,7 +267,7 @@ context "DelayedQueue" do | |
| 267 267 |  | 
| 268 268 | 
             
              test "remove_delayed removes job and returns the count" do
         | 
| 269 269 | 
             
                t = Time.now + 120
         | 
| 270 | 
            -
                encoded_job =  Resque.encode( | 
| 270 | 
            +
                encoded_job =  Resque.encode(:class => SomeIvarJob.to_s, :args => [], :queue => Resque.queue_from_class(SomeIvarJob))
         | 
| 271 271 | 
             
                Resque.enqueue_at(t, SomeIvarJob)
         | 
| 272 272 |  | 
| 273 273 | 
             
                assert_equal(1, Resque.remove_delayed(SomeIvarJob))
         | 
| @@ -358,9 +358,6 @@ context "DelayedQueue" do | |
| 358 358 | 
             
              end
         | 
| 359 359 |  | 
| 360 360 | 
             
              test "invalid job class" do
         | 
| 361 | 
            -
                assert_raise Resque::NoClassError do
         | 
| 362 | 
            -
                  Resque.enqueue_in(10, nil)
         | 
| 363 | 
            -
                end
         | 
| 364 361 | 
             
                assert_raise Resque::NoQueueError do
         | 
| 365 362 | 
             
                  Resque.enqueue_in(10, String) # string serves as invalid Job class
         | 
| 366 363 | 
             
                end
         | 
    
        data/test/resque-web_test.rb
    CHANGED
    
    | @@ -12,8 +12,22 @@ end | |
| 12 12 | 
             
            context "on GET to /schedule with scheduled jobs" do
         | 
| 13 13 | 
             
              setup do
         | 
| 14 14 | 
             
                ENV['rails_env'] = 'production'
         | 
| 15 | 
            -
                Resque.schedule = { | 
| 16 | 
            -
             | 
| 15 | 
            +
                Resque.schedule = {
         | 
| 16 | 
            +
                  'some_ivar_job' => {
         | 
| 17 | 
            +
                    'cron' => "* * * * *",
         | 
| 18 | 
            +
                    'class' => 'SomeIvarJob',
         | 
| 19 | 
            +
                    'args' => "/tmp",
         | 
| 20 | 
            +
                    'rails_env' => 'production'
         | 
| 21 | 
            +
                  },
         | 
| 22 | 
            +
                  'some_other_job' => {
         | 
| 23 | 
            +
                    'every' => ['5m'],
         | 
| 24 | 
            +
                    'queue' => 'high',
         | 
| 25 | 
            +
                    'class' => 'SomeOtherJob',
         | 
| 26 | 
            +
                    'args' => {
         | 
| 27 | 
            +
                      'b' => 'blah'
         | 
| 28 | 
            +
                    }
         | 
| 29 | 
            +
                  }
         | 
| 30 | 
            +
                }
         | 
| 17 31 | 
             
                Resque::Scheduler.load_schedule!
         | 
| 18 32 | 
             
                get "/schedule"
         | 
| 19 33 | 
             
              end
         | 
| @@ -34,14 +48,18 @@ end | |
| 34 48 | 
             
            def resque_schedule
         | 
| 35 49 | 
             
              {
         | 
| 36 50 | 
             
                'job_without_params' => {
         | 
| 37 | 
            -
                  'cron' =>  | 
| 51 | 
            +
                  'cron' => '* * * * *',
         | 
| 38 52 | 
             
                  'class' => 'JobWithoutParams',
         | 
| 39 | 
            -
                  'args' => { | 
| 53 | 
            +
                  'args' => {
         | 
| 54 | 
            +
                    'host' => 'localhost'
         | 
| 55 | 
            +
                  },
         | 
| 40 56 | 
             
                  'rails_env' => 'production'},
         | 
| 41 57 | 
             
                'job_with_params' => {
         | 
| 42 | 
            -
                  'cron' =>  | 
| 58 | 
            +
                  'cron' => '* * * * *',
         | 
| 43 59 | 
             
                  'class' => 'JobWithParams',
         | 
| 44 | 
            -
                  'args' => { | 
| 60 | 
            +
                  'args' => {
         | 
| 61 | 
            +
                    'host' => 'localhost'
         | 
| 62 | 
            +
                  },
         | 
| 45 63 | 
             
                  'parameters' => {
         | 
| 46 64 | 
             
                    'log_level' => {
         | 
| 47 65 | 
             
                      'description' => 'The level of logging',
         | 
| @@ -99,8 +117,8 @@ context "POST /schedule/requeue_with_params" do | |
| 99 117 | 
             
                log_level = 'error'
         | 
| 100 118 |  | 
| 101 119 | 
             
                job_config = Resque.schedule[job_name]
         | 
| 102 | 
            -
                args = job_config['args'].merge( | 
| 103 | 
            -
                job_config = job_config.merge( | 
| 120 | 
            +
                args = job_config['args'].merge('log_level' => log_level)
         | 
| 121 | 
            +
                job_config = job_config.merge('args' => args)
         | 
| 104 122 |  | 
| 105 123 | 
             
                Resque::Scheduler.stubs(:enqueue_from_config).once.with(job_config)
         | 
| 106 124 |  | 
    
        data/test/scheduler_test.rb
    CHANGED
    
    | @@ -60,7 +60,7 @@ context "Resque::Scheduler" do | |
| 60 60 |  | 
| 61 61 | 
             
                Resque.redis.del(:schedules)
         | 
| 62 62 | 
             
                Resque.redis.hset(:schedules, "some_ivar_job2", Resque.encode(
         | 
| 63 | 
            -
                   | 
| 63 | 
            +
                  'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/2"
         | 
| 64 64 | 
             
                ))
         | 
| 65 65 |  | 
| 66 66 | 
             
                Resque::Scheduler.reload_schedule!
         | 
| @@ -232,7 +232,7 @@ context "Resque::Scheduler" do | |
| 232 232 |  | 
| 233 233 | 
             
              test "get_schedule returns a schedule" do
         | 
| 234 234 | 
             
                Resque.redis.hset(:schedules, "some_ivar_job2", Resque.encode(
         | 
| 235 | 
            -
                   | 
| 235 | 
            +
                  'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/33"
         | 
| 236 236 | 
             
                ))
         | 
| 237 237 | 
             
                assert_equal({'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/33"},
         | 
| 238 238 | 
             
                  Resque.get_schedule("some_ivar_job2"))
         | 
| @@ -240,7 +240,7 @@ context "Resque::Scheduler" do | |
| 240 240 |  | 
| 241 241 | 
             
              test "remove_schedule removes a schedule" do
         | 
| 242 242 | 
             
                Resque.redis.hset(:schedules, "some_ivar_job3", Resque.encode(
         | 
| 243 | 
            -
                   | 
| 243 | 
            +
                  'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/44"
         | 
| 244 244 | 
             
                ))
         | 
| 245 245 | 
             
                Resque.remove_schedule("some_ivar_job3")
         | 
| 246 246 | 
             
                assert_equal nil, Resque.redis.hget(:schedules, "some_ivar_job3")
         | 
| @@ -28,7 +28,7 @@ class RedisInstance | |
| 28 28 | 
             
                      RedisInstance.stop!
         | 
| 29 29 | 
             
                    end
         | 
| 30 30 | 
             
                  else
         | 
| 31 | 
            -
                     | 
| 31 | 
            +
                    fail "Failed to start Redis on port #{port}."
         | 
| 32 32 | 
             
                  end
         | 
| 33 33 |  | 
| 34 34 | 
             
                  @running = true
         | 
| @@ -47,7 +47,7 @@ class RedisInstance | |
| 47 47 | 
             
                  @running
         | 
| 48 48 | 
             
                end
         | 
| 49 49 |  | 
| 50 | 
            -
             | 
| 50 | 
            +
                private
         | 
| 51 51 |  | 
| 52 52 | 
             
                def wait_for_redis_boot
         | 
| 53 53 | 
             
                  Timeout::timeout(10) do
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    | @@ -84,6 +84,14 @@ class SomeRealClass | |
| 84 84 | 
             
              end
         | 
| 85 85 | 
             
            end
         | 
| 86 86 |  | 
| 87 | 
            +
            class JobWithParams
         | 
| 88 | 
            +
              def self.perform(*args)
         | 
| 89 | 
            +
                @args = args
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
            end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            JobWithoutParams = Class.new(JobWithParams)
         | 
| 94 | 
            +
             | 
| 87 95 | 
             
            def nullify_logger
         | 
| 88 96 | 
             
              Resque::Scheduler.mute    = nil
         | 
| 89 97 | 
             
              Resque::Scheduler.verbose = nil
         | 
    
        metadata
    CHANGED
    
    | @@ -1,20 +1,18 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: resque-scheduler
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 2.3.0
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - Ben VandenBos
         | 
| 9 8 | 
             
            autorequire: 
         | 
| 10 9 | 
             
            bindir: bin
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013- | 
| 11 | 
            +
            date: 2013-11-07 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 14 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 14 | 
             
              name: bundler
         | 
| 16 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            -
                none: false
         | 
| 18 16 | 
             
                requirements:
         | 
| 19 17 | 
             
                - - ~>
         | 
| 20 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -22,7 +20,6 @@ dependencies: | |
| 22 20 | 
             
              type: :development
         | 
| 23 21 | 
             
              prerelease: false
         | 
| 24 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                none: false
         | 
| 26 23 | 
             
                requirements:
         | 
| 27 24 | 
             
                - - ~>
         | 
| 28 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -30,7 +27,6 @@ dependencies: | |
| 30 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 28 | 
             
              name: mocha
         | 
| 32 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            -
                none: false
         | 
| 34 30 | 
             
                requirements:
         | 
| 35 31 | 
             
                - - ! '>='
         | 
| 36 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -38,7 +34,6 @@ dependencies: | |
| 38 34 | 
             
              type: :development
         | 
| 39 35 | 
             
              prerelease: false
         | 
| 40 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            -
                none: false
         | 
| 42 37 | 
             
                requirements:
         | 
| 43 38 | 
             
                - - ! '>='
         | 
| 44 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -46,7 +41,6 @@ dependencies: | |
| 46 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 47 42 | 
             
              name: rack-test
         | 
| 48 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            -
                none: false
         | 
| 50 44 | 
             
                requirements:
         | 
| 51 45 | 
             
                - - ! '>='
         | 
| 52 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -54,7 +48,6 @@ dependencies: | |
| 54 48 | 
             
              type: :development
         | 
| 55 49 | 
             
              prerelease: false
         | 
| 56 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            -
                none: false
         | 
| 58 51 | 
             
                requirements:
         | 
| 59 52 | 
             
                - - ! '>='
         | 
| 60 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -62,7 +55,6 @@ dependencies: | |
| 62 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 63 56 | 
             
              name: rake
         | 
| 64 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 65 | 
            -
                none: false
         | 
| 66 58 | 
             
                requirements:
         | 
| 67 59 | 
             
                - - ! '>='
         | 
| 68 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -70,7 +62,6 @@ dependencies: | |
| 70 62 | 
             
              type: :development
         | 
| 71 63 | 
             
              prerelease: false
         | 
| 72 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 | 
            -
                none: false
         | 
| 74 65 | 
             
                requirements:
         | 
| 75 66 | 
             
                - - ! '>='
         | 
| 76 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -78,7 +69,6 @@ dependencies: | |
| 78 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 79 70 | 
             
              name: rubocop
         | 
| 80 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 81 | 
            -
                none: false
         | 
| 82 72 | 
             
                requirements:
         | 
| 83 73 | 
             
                - - ! '>='
         | 
| 84 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -86,7 +76,6 @@ dependencies: | |
| 86 76 | 
             
              type: :development
         | 
| 87 77 | 
             
              prerelease: false
         | 
| 88 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 89 | 
            -
                none: false
         | 
| 90 79 | 
             
                requirements:
         | 
| 91 80 | 
             
                - - ! '>='
         | 
| 92 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -94,7 +83,6 @@ dependencies: | |
| 94 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 95 84 | 
             
              name: redis
         | 
| 96 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 97 | 
            -
                none: false
         | 
| 98 86 | 
             
                requirements:
         | 
| 99 87 | 
             
                - - ! '>='
         | 
| 100 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -102,7 +90,6 @@ dependencies: | |
| 102 90 | 
             
              type: :runtime
         | 
| 103 91 | 
             
              prerelease: false
         | 
| 104 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 105 | 
            -
                none: false
         | 
| 106 93 | 
             
                requirements:
         | 
| 107 94 | 
             
                - - ! '>='
         | 
| 108 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -110,29 +97,20 @@ dependencies: | |
| 110 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 111 98 | 
             
              name: resque
         | 
| 112 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 113 | 
            -
                none: false
         | 
| 114 100 | 
             
                requirements:
         | 
| 115 | 
            -
                - -  | 
| 116 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            -
                    version: 1.20.0
         | 
| 118 | 
            -
                - - <
         | 
| 101 | 
            +
                - - ~>
         | 
| 119 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 120 103 | 
             
                    version: '1.25'
         | 
| 121 104 | 
             
              type: :runtime
         | 
| 122 105 | 
             
              prerelease: false
         | 
| 123 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 124 | 
            -
                none: false
         | 
| 125 107 | 
             
                requirements:
         | 
| 126 | 
            -
                - -  | 
| 127 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 128 | 
            -
                    version: 1.20.0
         | 
| 129 | 
            -
                - - <
         | 
| 108 | 
            +
                - - ~>
         | 
| 130 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 131 110 | 
             
                    version: '1.25'
         | 
| 132 111 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 133 112 | 
             
              name: rufus-scheduler
         | 
| 134 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 135 | 
            -
                none: false
         | 
| 136 114 | 
             
                requirements:
         | 
| 137 115 | 
             
                - - ~>
         | 
| 138 116 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -140,7 +118,6 @@ dependencies: | |
| 140 118 | 
             
              type: :runtime
         | 
| 141 119 | 
             
              prerelease: false
         | 
| 142 120 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 143 | 
            -
                none: false
         | 
| 144 121 | 
             
                requirements:
         | 
| 145 122 | 
             
                - - ~>
         | 
| 146 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| @@ -179,6 +156,7 @@ files: | |
| 179 156 | 
             
            - lib/resque_scheduler/server/views/requeue-params.erb
         | 
| 180 157 | 
             
            - lib/resque_scheduler/server/views/scheduler.erb
         | 
| 181 158 | 
             
            - lib/resque_scheduler/tasks.rb
         | 
| 159 | 
            +
            - lib/resque_scheduler/util.rb
         | 
| 182 160 | 
             
            - lib/resque_scheduler/version.rb
         | 
| 183 161 | 
             
            - resque-scheduler.gemspec
         | 
| 184 162 | 
             
            - script/migrate_to_timestamps_set.rb
         | 
| @@ -194,28 +172,28 @@ files: | |
| 194 172 | 
             
            - test/support/redis_instance.rb
         | 
| 195 173 | 
             
            - test/test_helper.rb
         | 
| 196 174 | 
             
            homepage: http://github.com/resque/resque-scheduler
         | 
| 197 | 
            -
            licenses: | 
| 175 | 
            +
            licenses:
         | 
| 176 | 
            +
            - MIT
         | 
| 177 | 
            +
            metadata: {}
         | 
| 198 178 | 
             
            post_install_message: 
         | 
| 199 179 | 
             
            rdoc_options: []
         | 
| 200 180 | 
             
            require_paths:
         | 
| 201 181 | 
             
            - - lib
         | 
| 202 182 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 203 | 
            -
              none: false
         | 
| 204 183 | 
             
              requirements:
         | 
| 205 184 | 
             
              - - ! '>='
         | 
| 206 185 | 
             
                - !ruby/object:Gem::Version
         | 
| 207 186 | 
             
                  version: '0'
         | 
| 208 187 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 209 | 
            -
              none: false
         | 
| 210 188 | 
             
              requirements:
         | 
| 211 189 | 
             
              - - ! '>='
         | 
| 212 190 | 
             
                - !ruby/object:Gem::Version
         | 
| 213 191 | 
             
                  version: '0'
         | 
| 214 192 | 
             
            requirements: []
         | 
| 215 193 | 
             
            rubyforge_project: 
         | 
| 216 | 
            -
            rubygems_version:  | 
| 194 | 
            +
            rubygems_version: 2.0.3
         | 
| 217 195 | 
             
            signing_key: 
         | 
| 218 | 
            -
            specification_version:  | 
| 196 | 
            +
            specification_version: 4
         | 
| 219 197 | 
             
            summary: Light weight job scheduling on top of Resque
         | 
| 220 198 | 
             
            test_files:
         | 
| 221 199 | 
             
            - test/delayed_queue_test.rb
         |