sidekiq-cron 0.6.3 → 1.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -2
- data/Gemfile +1 -1
- data/README.md +17 -11
- data/VERSION +1 -1
- data/lib/sidekiq/cron/job.rb +23 -17
- data/lib/sidekiq/cron/locales/ja.yml +18 -0
- data/lib/sidekiq/cron/locales/zh-CN.yml +19 -0
- data/lib/sidekiq/cron/poller.rb +2 -0
- data/sidekiq-cron.gemspec +72 -70
- data/test/integration/performance_test.rb +5 -5
- data/test/unit/job_test.rb +13 -11
- data/test/unit/poller_test.rb +21 -20
- metadata +10 -8
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: ded0af6d28d26842c24c57d59d6c91b413ee4a72
         | 
| 4 | 
            +
              data.tar.gz: 8602e4d3bb9a992382549dbfbfa3f12b0f9c5170
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9430905a4b17f3186e8b7f6275f14c308e3f9bb308964861b92d78376493c7d445d2218ec1818a514df16f284fed206cf9c4e4ab1330a13eb48b5095b33c6ec7
         | 
| 7 | 
            +
              data.tar.gz: 8d095e03c1568ba9a5231a1a0c6c49e96d1427bf64e54aa2f19c8dc242e76e0aea50eae8bf676be8a01bb281ef0ce560fdfe0f2f2153d5fb675f498e41fc2f61
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            Sidekiq-Cron [](http://badge.fury.io/rb/sidekiq-cron) [](https://travis-ci.org/ondrejbartas/sidekiq-cron) [](https://coveralls.io/ | 
| 1 | 
            +
            Sidekiq-Cron [](http://badge.fury.io/rb/sidekiq-cron) [](https://travis-ci.org/ondrejbartas/sidekiq-cron) [](https://coveralls.io/github/ondrejbartas/sidekiq-cron?branch=master)
         | 
| 2 2 | 
             
            ================================================================================================================================================================================================================================================================================================================================================================================================================================================
         | 
| 3 3 |  | 
| 4 4 | 
             
            [](https://gitter.im/ondrejbartas/sidekiq-cron?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
         | 
| @@ -7,11 +7,11 @@ Sidekiq-Cron [](http:// | |
| 7 7 |  | 
| 8 8 | 
             
            A scheduling add-on for [Sidekiq](http://sidekiq.org).
         | 
| 9 9 |  | 
| 10 | 
            -
            Runs a thread alongside Sidekiq workers to schedule jobs at specified times (using cron notation `* * * * *` parsed by [ | 
| 10 | 
            +
            Runs a thread alongside Sidekiq workers to schedule jobs at specified times (using cron notation `* * * * *` parsed by [Fugit](https://github.com/floraison/fugit), more about [cron notation](http://www.nncron.ru/help/EN/working/cron-format.htm).
         | 
| 11 11 |  | 
| 12 | 
            -
            Checks for new jobs to schedule every  | 
| 12 | 
            +
            Checks for new jobs to schedule every 30 seconds and doesn't schedule the same job multiple times when more than one Sidekiq worker is running.
         | 
| 13 13 |  | 
| 14 | 
            -
            Scheduling jobs are added only when at least one Sidekiq process is running.
         | 
| 14 | 
            +
            Scheduling jobs are added only when at least one Sidekiq process is running, but it is safe to use Sidekiq-Cron in environments where multiple Sidekiq processes or nodes are running.
         | 
| 15 15 |  | 
| 16 16 | 
             
            If you want to know how scheduling work, check out [under the hood](#under-the-hood)
         | 
| 17 17 |  | 
| @@ -37,7 +37,7 @@ Installation | |
| 37 37 |  | 
| 38 38 | 
             
            or add to your `Gemfile`
         | 
| 39 39 |  | 
| 40 | 
            -
                gem "sidekiq-cron", "~> 0. | 
| 40 | 
            +
                gem "sidekiq-cron", "~> 0.6.3"
         | 
| 41 41 |  | 
| 42 42 |  | 
| 43 43 | 
             
            Getting Started
         | 
| @@ -64,11 +64,15 @@ _Job properties_: | |
| 64 64 |  | 
| 65 65 | 
             
            ### Time, cron and sidekiq-cron
         | 
| 66 66 |  | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 67 | 
            +
            For testing your cron notation you can use [crontab.guru](https://crontab.guru).
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            sidekiq-cron uses [Fugit](https://github.com/floraison/fugit) to parse the cronline.
         | 
| 70 | 
            +
            If using Rails, this is evaluated against the timezone configured in Rails, otherwise the default is UTC.
         | 
| 71 | 
            +
             | 
| 69 72 | 
             
            If you want to have your jobs enqueued based on a different time zone you can specify a timezone in the cronline,
         | 
| 70 73 | 
             
            like this `'0 22 * * 1-5 America/Chicago'`.
         | 
| 71 | 
            -
             | 
| 74 | 
            +
             | 
| 75 | 
            +
            See [rufus-scheduler documentation](https://github.com/jmettraux/rufus-scheduler#a-note-about-timezones) for more information. (note. Rufus scheduler is using Fugit under the hood, so documentation for Rufus Scheduler can help you also)
         | 
| 72 76 |  | 
| 73 77 | 
             
            ### What objects/classes can be scheduled
         | 
| 74 78 | 
             
            #### Sidekiq Worker
         | 
| @@ -192,7 +196,7 @@ second_job: | |
| 192 196 | 
             
            #initializers/sidekiq.rb
         | 
| 193 197 | 
             
            schedule_file = "config/schedule.yml"
         | 
| 194 198 |  | 
| 195 | 
            -
            if File. | 
| 199 | 
            +
            if File.exist?(schedule_file) && Sidekiq.server?
         | 
| 196 200 | 
             
              Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
         | 
| 197 201 | 
             
            end
         | 
| 198 202 | 
             
            ```
         | 
| @@ -263,13 +267,13 @@ before the process forks, causing the following exception | |
| 263 267 |  | 
| 264 268 | 
             
                Redis::InheritedError: Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking.
         | 
| 265 269 |  | 
| 266 | 
            -
            to  | 
| 270 | 
            +
            to occur. To avoid this, wrap your job creation in the call to `Sidekiq.configure_server`:
         | 
| 267 271 |  | 
| 268 272 | 
             
            ```ruby
         | 
| 269 273 | 
             
            Sidekiq.configure_server do |config|
         | 
| 270 274 | 
             
              schedule_file = "config/schedule.yml"
         | 
| 271 275 |  | 
| 272 | 
            -
              if File. | 
| 276 | 
            +
              if File.exist?(schedule_file)
         | 
| 273 277 | 
             
                Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
         | 
| 274 278 | 
             
              end
         | 
| 275 279 | 
             
            end
         | 
| @@ -288,6 +292,8 @@ Sidekiq-Cron is checking jobs to be enqueued every 30s by default, you can chang | |
| 288 292 | 
             
            Sidekiq.options[:poll_interval] = 10
         | 
| 289 293 | 
             
            ```
         | 
| 290 294 |  | 
| 295 | 
            +
            Sidekiq-Cron is safe to use with multiple sidekiq processes or nodes. It uses a Redis sorted set to determine that only the first process who asks can enqueue scheduled jobs into the queue.
         | 
| 296 | 
            +
             | 
| 291 297 | 
             
            ## Thanks to
         | 
| 292 298 | 
             
            * [@7korobi](https://github.com/7korobi)
         | 
| 293 299 | 
             
            * [@antulik](https://github.com/antulik)
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0. | 
| 1 | 
            +
            1.0.1
         | 
    
        data/lib/sidekiq/cron/job.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 | 
            +
            require 'fugit'
         | 
| 1 2 | 
             
            require 'sidekiq'
         | 
| 2 3 | 
             
            require 'sidekiq/util'
         | 
| 3 | 
            -
            require 'rufus-scheduler'
         | 
| 4 4 | 
             
            require 'sidekiq/cron/support'
         | 
| 5 5 |  | 
| 6 6 | 
             
            module Sidekiq
         | 
| @@ -12,6 +12,7 @@ module Sidekiq | |
| 12 12 |  | 
| 13 13 | 
             
                  #how long we would like to store informations about previous enqueues
         | 
| 14 14 | 
             
                  REMEMBER_THRESHOLD = 24 * 60 * 60
         | 
| 15 | 
            +
                  LAST_ENQUEUE_TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
         | 
| 15 16 |  | 
| 16 17 | 
             
                  #crucial part of whole enquing job
         | 
| 17 18 | 
             
                  def should_enque? time
         | 
| @@ -46,7 +47,7 @@ module Sidekiq | |
| 46 47 |  | 
| 47 48 | 
             
                  #enque cron job to queue
         | 
| 48 49 | 
             
                  def enque! time = Time.now.utc
         | 
| 49 | 
            -
                    @last_enqueue_time = time
         | 
| 50 | 
            +
                    @last_enqueue_time = time.strftime(LAST_ENQUEUE_TIME_FORMAT)
         | 
| 50 51 |  | 
| 51 52 | 
             
                    klass_const =
         | 
| 52 53 | 
             
                        begin
         | 
| @@ -123,6 +124,7 @@ module Sidekiq | |
| 123 124 | 
             
                  def active_job_message
         | 
| 124 125 | 
             
                    {
         | 
| 125 126 | 
             
                      'class'        => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
         | 
| 127 | 
            +
                      'wrapped'      => @klass,
         | 
| 126 128 | 
             
                      'queue'        => @queue_name_with_prefix,
         | 
| 127 129 | 
             
                      'description'  => @description,
         | 
| 128 130 | 
             
                      'args'         => [{
         | 
| @@ -273,7 +275,7 @@ module Sidekiq | |
| 273 275 |  | 
| 274 276 | 
             
                    #set last enqueue time - from args or from existing job
         | 
| 275 277 | 
             
                    if args['last_enqueue_time'] && !args['last_enqueue_time'].empty?
         | 
| 276 | 
            -
                      @last_enqueue_time =  | 
| 278 | 
            +
                      @last_enqueue_time = parse_enqueue_time(args['last_enqueue_time'])
         | 
| 277 279 | 
             
                    else
         | 
| 278 280 | 
             
                      @last_enqueue_time = last_enqueue_time_from_redis
         | 
| 279 281 | 
             
                    end
         | 
| @@ -362,7 +364,7 @@ module Sidekiq | |
| 362 364 | 
             
                    out = nil
         | 
| 363 365 | 
             
                    if fetch_missing_args
         | 
| 364 366 | 
             
                      Sidekiq.redis do |conn|
         | 
| 365 | 
            -
                        out =  | 
| 367 | 
            +
                        out = parse_enqueue_time(conn.hget(redis_key, "last_enqueue_time")) rescue nil
         | 
| 366 368 | 
             
                      end
         | 
| 367 369 | 
             
                    end
         | 
| 368 370 | 
             
                    out
         | 
| @@ -390,7 +392,7 @@ module Sidekiq | |
| 390 392 | 
             
                  end
         | 
| 391 393 |  | 
| 392 394 | 
             
                  def valid?
         | 
| 393 | 
            -
                    #clear  | 
| 395 | 
            +
                    #clear previous errors
         | 
| 394 396 | 
             
                    @errors = []
         | 
| 395 397 |  | 
| 396 398 | 
             
                    errors << "'name' must be set" if @name.nil? || @name.size == 0
         | 
| @@ -398,21 +400,15 @@ module Sidekiq | |
| 398 400 | 
             
                      errors << "'cron' must be set"
         | 
| 399 401 | 
             
                    else
         | 
| 400 402 | 
             
                      begin
         | 
| 401 | 
            -
                         | 
| 402 | 
            -
             | 
| 403 | 
            -
             | 
| 404 | 
            -
                        #fix for different versions of cron-parser
         | 
| 405 | 
            -
                        if e.message == "Bad Vixie-style specification bad"
         | 
| 406 | 
            -
                          errors << "'cron' -> #{@cron}: not a valid cronline"
         | 
| 407 | 
            -
                        else
         | 
| 408 | 
            -
                          errors << "'cron' -> #{@cron}: #{e.message}"
         | 
| 409 | 
            -
                        end
         | 
| 403 | 
            +
                        @parsed_cron = Fugit.do_parse_cron(@cron)
         | 
| 404 | 
            +
                      rescue => e
         | 
| 405 | 
            +
                        errors << "'cron' -> #{@cron.inspect} -> #{e.class}: #{e.message}"
         | 
| 410 406 | 
             
                      end
         | 
| 411 407 | 
             
                    end
         | 
| 412 408 |  | 
| 413 409 | 
             
                    errors << "'klass' (or class) must be set" unless klass_valid
         | 
| 414 410 |  | 
| 415 | 
            -
                     | 
| 411 | 
            +
                    errors.empty?
         | 
| 416 412 | 
             
                  end
         | 
| 417 413 |  | 
| 418 414 | 
             
                  def klass_valid
         | 
| @@ -496,7 +492,7 @@ module Sidekiq | |
| 496 492 | 
             
                  # Parse cron specification '* * * * *' and returns
         | 
| 497 493 | 
             
                  # time when last run should be performed
         | 
| 498 494 | 
             
                  def last_time now = Time.now.utc
         | 
| 499 | 
            -
                     | 
| 495 | 
            +
                    parsed_cron.previous_time(now.utc).utc
         | 
| 500 496 | 
             
                  end
         | 
| 501 497 |  | 
| 502 498 | 
             
                  def formated_enqueue_time now = Time.now.utc
         | 
| @@ -525,6 +521,10 @@ module Sidekiq | |
| 525 521 |  | 
| 526 522 | 
             
                  private
         | 
| 527 523 |  | 
| 524 | 
            +
                  def parsed_cron
         | 
| 525 | 
            +
                    @parsed_cron ||= Fugit.parse_cron(@cron)
         | 
| 526 | 
            +
                  end
         | 
| 527 | 
            +
             | 
| 528 528 | 
             
                  def not_enqueued_after?(time)
         | 
| 529 529 | 
             
                    @last_enqueue_time.nil? || @last_enqueue_time.to_i < last_time(time).to_i
         | 
| 530 530 | 
             
                  end
         | 
| @@ -550,8 +550,14 @@ module Sidekiq | |
| 550 550 | 
             
                    end
         | 
| 551 551 | 
             
                  end
         | 
| 552 552 |  | 
| 553 | 
            +
                  def parse_enqueue_time(timestamp)
         | 
| 554 | 
            +
                    DateTime.strptime(timestamp, LAST_ENQUEUE_TIME_FORMAT).to_time.utc
         | 
| 555 | 
            +
                  end
         | 
| 556 | 
            +
             | 
| 553 557 | 
             
                  def not_past_scheduled_time?(current_time)
         | 
| 554 | 
            -
                    last_cron_time =  | 
| 558 | 
            +
                    last_cron_time = parsed_cron.previous_time(current_time).utc
         | 
| 559 | 
            +
                      # or could it be?
         | 
| 560 | 
            +
                    #last_cron_time = last_time(current_time)
         | 
| 555 561 | 
             
                    return false if (current_time.to_i - last_cron_time.to_i) > 60
         | 
| 556 562 | 
             
                    true
         | 
| 557 563 | 
             
                  end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            ja:
         | 
| 2 | 
            +
              Job: ジョブ
         | 
| 3 | 
            +
              Cron: Cron
         | 
| 4 | 
            +
              CronJobs: Cronジョブ
         | 
| 5 | 
            +
              EnqueueNow: すぐにキューに入れる
         | 
| 6 | 
            +
              EnableAll: すべて有効にする
         | 
| 7 | 
            +
              DisableAll: すべて無効にする
         | 
| 8 | 
            +
              EnqueueAll: すべてキューに入れる
         | 
| 9 | 
            +
              DeleteAll: すべて削除
         | 
| 10 | 
            +
              'Cron string': Cron
         | 
| 11 | 
            +
              AreYouSureDeleteCronJobs: 本当にすべてのcronジョブを削除しますか?
         | 
| 12 | 
            +
              AreYouSureDeleteCronJob: 本当に%{job}のcronジョブを削除しますか?
         | 
| 13 | 
            +
              NoCronJobsFound: Cronジョブが見つかりませんでした
         | 
| 14 | 
            +
              Enable: 有効にする
         | 
| 15 | 
            +
              Disable: 無効にする
         | 
| 16 | 
            +
              'Last enque': 最後のキュー
         | 
| 17 | 
            +
              disabled: 無効
         | 
| 18 | 
            +
              enabled: 有効
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            zh-CN:
         | 
| 2 | 
            +
              Job: 任务
         | 
| 3 | 
            +
              Cron: 定时任务
         | 
| 4 | 
            +
              CronJobs: 定时任务列表
         | 
| 5 | 
            +
              EnqueueNow: 立刻执行
         | 
| 6 | 
            +
              EnableAll: 启用所有
         | 
| 7 | 
            +
              DisableAll: 禁用所有
         | 
| 8 | 
            +
              EnqueueAll: 执行所有
         | 
| 9 | 
            +
              DeleteAll: 删除所有
         | 
| 10 | 
            +
              'Cron string': 定时策略
         | 
| 11 | 
            +
              AreYouSureDeleteCronJobs: 你确定删除所有的定时任务吗?
         | 
| 12 | 
            +
              AreYouSureDeleteCronJob: 你确定删除定时任务(%{job})吗?
         | 
| 13 | 
            +
              NoCronJobsFound: 没有定时任务
         | 
| 14 | 
            +
              Enable: 启用
         | 
| 15 | 
            +
              Disable: 禁用
         | 
| 16 | 
            +
              'Last enque': 放入队列时间
         | 
| 17 | 
            +
              disabled: 已禁用
         | 
| 18 | 
            +
              enabled: 已启用
         | 
| 19 | 
            +
             | 
    
        data/lib/sidekiq/cron/poller.rb
    CHANGED
    
    | @@ -19,6 +19,7 @@ module Sidekiq | |
| 19 19 | 
             
                    # Punt and try again at the next interval
         | 
| 20 20 | 
             
                    logger.error ex.message
         | 
| 21 21 | 
             
                    logger.error ex.backtrace.first
         | 
| 22 | 
            +
                    handle_exception(ex) if respond_to?(:handle_exception)
         | 
| 22 23 | 
             
                  end
         | 
| 23 24 |  | 
| 24 25 | 
             
                  private
         | 
| @@ -29,6 +30,7 @@ module Sidekiq | |
| 29 30 | 
             
                    # problem somewhere in one job
         | 
| 30 31 | 
             
                    logger.error "CRON JOB: #{ex.message}"
         | 
| 31 32 | 
             
                    logger.error "CRON JOB: #{ex.backtrace.first}"
         | 
| 33 | 
            +
                    handle_exception(ex) if respond_to?(:handle_exception)
         | 
| 32 34 | 
             
                  end
         | 
| 33 35 |  | 
| 34 36 | 
             
                  def poll_interval_average
         | 
    
        data/sidekiq-cron.gemspec
    CHANGED
    
    | @@ -2,18 +2,18 @@ | |
| 2 2 | 
             
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 3 | 
             
            # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
         | 
| 4 4 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 5 | 
            -
            # stub: sidekiq-cron 0. | 
| 5 | 
            +
            # stub: sidekiq-cron 1.0.1 ruby lib
         | 
| 6 6 |  | 
| 7 7 | 
             
            Gem::Specification.new do |s|
         | 
| 8 | 
            -
              s.name = "sidekiq-cron"
         | 
| 9 | 
            -
              s.version = "0. | 
| 8 | 
            +
              s.name = "sidekiq-cron".freeze
         | 
| 9 | 
            +
              s.version = "1.0.1"
         | 
| 10 10 |  | 
| 11 | 
            -
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 12 | 
            -
              s.require_paths = ["lib"]
         | 
| 13 | 
            -
              s.authors = ["Ondrej Bartas"]
         | 
| 14 | 
            -
              s.date = " | 
| 15 | 
            -
              s.description = "Enables to set jobs to be run in specified time (using CRON notation)"
         | 
| 16 | 
            -
              s.email = "ondrej@bartas.cz"
         | 
| 11 | 
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
         | 
| 12 | 
            +
              s.require_paths = ["lib".freeze]
         | 
| 13 | 
            +
              s.authors = ["Ondrej Bartas".freeze]
         | 
| 14 | 
            +
              s.date = "2018-08-15"
         | 
| 15 | 
            +
              s.description = "Enables to set jobs to be run in specified time (using CRON notation)".freeze
         | 
| 16 | 
            +
              s.email = "ondrej@bartas.cz".freeze
         | 
| 17 17 | 
             
              s.extra_rdoc_files = [
         | 
| 18 18 | 
             
                "LICENSE.txt",
         | 
| 19 19 | 
             
                "README.md"
         | 
| @@ -37,7 +37,9 @@ Gem::Specification.new do |s| | |
| 37 37 | 
             
                "lib/sidekiq/cron/launcher.rb",
         | 
| 38 38 | 
             
                "lib/sidekiq/cron/locales/de.yml",
         | 
| 39 39 | 
             
                "lib/sidekiq/cron/locales/en.yml",
         | 
| 40 | 
            +
                "lib/sidekiq/cron/locales/ja.yml",
         | 
| 40 41 | 
             
                "lib/sidekiq/cron/locales/ru.yml",
         | 
| 42 | 
            +
                "lib/sidekiq/cron/locales/zh-CN.yml",
         | 
| 41 43 | 
             
                "lib/sidekiq/cron/poller.rb",
         | 
| 42 44 | 
             
                "lib/sidekiq/cron/support.rb",
         | 
| 43 45 | 
             
                "lib/sidekiq/cron/views/cron.erb",
         | 
| @@ -51,75 +53,75 @@ Gem::Specification.new do |s| | |
| 51 53 | 
             
                "test/unit/poller_test.rb",
         | 
| 52 54 | 
             
                "test/unit/web_extension_test.rb"
         | 
| 53 55 | 
             
              ]
         | 
| 54 | 
            -
              s.homepage = "http://github.com/ondrejbartas/sidekiq-cron"
         | 
| 55 | 
            -
              s.licenses = ["MIT"]
         | 
| 56 | 
            -
              s.rubygems_version = "2.5.1"
         | 
| 57 | 
            -
              s.summary = "Sidekiq Cron helps to add repeated scheduled jobs"
         | 
| 56 | 
            +
              s.homepage = "http://github.com/ondrejbartas/sidekiq-cron".freeze
         | 
| 57 | 
            +
              s.licenses = ["MIT".freeze]
         | 
| 58 | 
            +
              s.rubygems_version = "2.5.2.1".freeze
         | 
| 59 | 
            +
              s.summary = "Sidekiq Cron helps to add repeated scheduled jobs".freeze
         | 
| 58 60 |  | 
| 59 61 | 
             
              if s.respond_to? :specification_version then
         | 
| 60 62 | 
             
                s.specification_version = 4
         | 
| 61 63 |  | 
| 62 64 | 
             
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| 63 | 
            -
                  s.add_runtime_dependency(%q<sidekiq | 
| 64 | 
            -
                  s.add_runtime_dependency(%q< | 
| 65 | 
            -
                  s.add_development_dependency(%q<bundler | 
| 66 | 
            -
                  s.add_development_dependency(%q<simplecov | 
| 67 | 
            -
                  s.add_development_dependency(%q<redis-namespace | 
| 68 | 
            -
                  s.add_development_dependency(%q<shoulda-context | 
| 69 | 
            -
                  s.add_development_dependency(%q<rack | 
| 70 | 
            -
                  s.add_development_dependency(%q<rack-test | 
| 71 | 
            -
                  s.add_development_dependency(%q<jeweler | 
| 72 | 
            -
                  s.add_development_dependency(%q<minitest | 
| 73 | 
            -
                  s.add_development_dependency(%q<test-unit | 
| 74 | 
            -
                  s.add_development_dependency(%q<sdoc | 
| 75 | 
            -
                  s.add_development_dependency(%q<slim | 
| 76 | 
            -
                  s.add_development_dependency(%q<sinatra | 
| 77 | 
            -
                  s.add_development_dependency(%q<mocha | 
| 78 | 
            -
                  s.add_development_dependency(%q<coveralls | 
| 79 | 
            -
                  s.add_development_dependency(%q<shotgun | 
| 80 | 
            -
                  s.add_development_dependency(%q<guard | 
| 81 | 
            -
                  s.add_development_dependency(%q<guard-minitest | 
| 65 | 
            +
                  s.add_runtime_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
         | 
| 66 | 
            +
                  s.add_runtime_dependency(%q<fugit>.freeze, ["~> 1.1"])
         | 
| 67 | 
            +
                  s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
         | 
| 68 | 
            +
                  s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
         | 
| 69 | 
            +
                  s.add_development_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
         | 
| 70 | 
            +
                  s.add_development_dependency(%q<shoulda-context>.freeze, [">= 0"])
         | 
| 71 | 
            +
                  s.add_development_dependency(%q<rack>.freeze, [">= 0"])
         | 
| 72 | 
            +
                  s.add_development_dependency(%q<rack-test>.freeze, [">= 0"])
         | 
| 73 | 
            +
                  s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
         | 
| 74 | 
            +
                  s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
         | 
| 75 | 
            +
                  s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
         | 
| 76 | 
            +
                  s.add_development_dependency(%q<sdoc>.freeze, [">= 0"])
         | 
| 77 | 
            +
                  s.add_development_dependency(%q<slim>.freeze, [">= 0"])
         | 
| 78 | 
            +
                  s.add_development_dependency(%q<sinatra>.freeze, [">= 0"])
         | 
| 79 | 
            +
                  s.add_development_dependency(%q<mocha>.freeze, [">= 0"])
         | 
| 80 | 
            +
                  s.add_development_dependency(%q<coveralls>.freeze, [">= 0"])
         | 
| 81 | 
            +
                  s.add_development_dependency(%q<shotgun>.freeze, [">= 0"])
         | 
| 82 | 
            +
                  s.add_development_dependency(%q<guard>.freeze, [">= 0"])
         | 
| 83 | 
            +
                  s.add_development_dependency(%q<guard-minitest>.freeze, [">= 0"])
         | 
| 82 84 | 
             
                else
         | 
| 83 | 
            -
                  s.add_dependency(%q<sidekiq | 
| 84 | 
            -
                  s.add_dependency(%q< | 
| 85 | 
            -
                  s.add_dependency(%q<bundler | 
| 86 | 
            -
                  s.add_dependency(%q<simplecov | 
| 87 | 
            -
                  s.add_dependency(%q<redis-namespace | 
| 88 | 
            -
                  s.add_dependency(%q<shoulda-context | 
| 89 | 
            -
                  s.add_dependency(%q<rack | 
| 90 | 
            -
                  s.add_dependency(%q<rack-test | 
| 91 | 
            -
                  s.add_dependency(%q<jeweler | 
| 92 | 
            -
                  s.add_dependency(%q<minitest | 
| 93 | 
            -
                  s.add_dependency(%q<test-unit | 
| 94 | 
            -
                  s.add_dependency(%q<sdoc | 
| 95 | 
            -
                  s.add_dependency(%q<slim | 
| 96 | 
            -
                  s.add_dependency(%q<sinatra | 
| 97 | 
            -
                  s.add_dependency(%q<mocha | 
| 98 | 
            -
                  s.add_dependency(%q<coveralls | 
| 99 | 
            -
                  s.add_dependency(%q<shotgun | 
| 100 | 
            -
                  s.add_dependency(%q<guard | 
| 101 | 
            -
                  s.add_dependency(%q<guard-minitest | 
| 85 | 
            +
                  s.add_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
         | 
| 86 | 
            +
                  s.add_dependency(%q<fugit>.freeze, ["~> 1.1"])
         | 
| 87 | 
            +
                  s.add_dependency(%q<bundler>.freeze, [">= 0"])
         | 
| 88 | 
            +
                  s.add_dependency(%q<simplecov>.freeze, [">= 0"])
         | 
| 89 | 
            +
                  s.add_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
         | 
| 90 | 
            +
                  s.add_dependency(%q<shoulda-context>.freeze, [">= 0"])
         | 
| 91 | 
            +
                  s.add_dependency(%q<rack>.freeze, [">= 0"])
         | 
| 92 | 
            +
                  s.add_dependency(%q<rack-test>.freeze, [">= 0"])
         | 
| 93 | 
            +
                  s.add_dependency(%q<jeweler>.freeze, [">= 0"])
         | 
| 94 | 
            +
                  s.add_dependency(%q<minitest>.freeze, [">= 0"])
         | 
| 95 | 
            +
                  s.add_dependency(%q<test-unit>.freeze, [">= 0"])
         | 
| 96 | 
            +
                  s.add_dependency(%q<sdoc>.freeze, [">= 0"])
         | 
| 97 | 
            +
                  s.add_dependency(%q<slim>.freeze, [">= 0"])
         | 
| 98 | 
            +
                  s.add_dependency(%q<sinatra>.freeze, [">= 0"])
         | 
| 99 | 
            +
                  s.add_dependency(%q<mocha>.freeze, [">= 0"])
         | 
| 100 | 
            +
                  s.add_dependency(%q<coveralls>.freeze, [">= 0"])
         | 
| 101 | 
            +
                  s.add_dependency(%q<shotgun>.freeze, [">= 0"])
         | 
| 102 | 
            +
                  s.add_dependency(%q<guard>.freeze, [">= 0"])
         | 
| 103 | 
            +
                  s.add_dependency(%q<guard-minitest>.freeze, [">= 0"])
         | 
| 102 104 | 
             
                end
         | 
| 103 105 | 
             
              else
         | 
| 104 | 
            -
                s.add_dependency(%q<sidekiq | 
| 105 | 
            -
                s.add_dependency(%q< | 
| 106 | 
            -
                s.add_dependency(%q<bundler | 
| 107 | 
            -
                s.add_dependency(%q<simplecov | 
| 108 | 
            -
                s.add_dependency(%q<redis-namespace | 
| 109 | 
            -
                s.add_dependency(%q<shoulda-context | 
| 110 | 
            -
                s.add_dependency(%q<rack | 
| 111 | 
            -
                s.add_dependency(%q<rack-test | 
| 112 | 
            -
                s.add_dependency(%q<jeweler | 
| 113 | 
            -
                s.add_dependency(%q<minitest | 
| 114 | 
            -
                s.add_dependency(%q<test-unit | 
| 115 | 
            -
                s.add_dependency(%q<sdoc | 
| 116 | 
            -
                s.add_dependency(%q<slim | 
| 117 | 
            -
                s.add_dependency(%q<sinatra | 
| 118 | 
            -
                s.add_dependency(%q<mocha | 
| 119 | 
            -
                s.add_dependency(%q<coveralls | 
| 120 | 
            -
                s.add_dependency(%q<shotgun | 
| 121 | 
            -
                s.add_dependency(%q<guard | 
| 122 | 
            -
                s.add_dependency(%q<guard-minitest | 
| 106 | 
            +
                s.add_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
         | 
| 107 | 
            +
                s.add_dependency(%q<fugit>.freeze, ["~> 1.1"])
         | 
| 108 | 
            +
                s.add_dependency(%q<bundler>.freeze, [">= 0"])
         | 
| 109 | 
            +
                s.add_dependency(%q<simplecov>.freeze, [">= 0"])
         | 
| 110 | 
            +
                s.add_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
         | 
| 111 | 
            +
                s.add_dependency(%q<shoulda-context>.freeze, [">= 0"])
         | 
| 112 | 
            +
                s.add_dependency(%q<rack>.freeze, [">= 0"])
         | 
| 113 | 
            +
                s.add_dependency(%q<rack-test>.freeze, [">= 0"])
         | 
| 114 | 
            +
                s.add_dependency(%q<jeweler>.freeze, [">= 0"])
         | 
| 115 | 
            +
                s.add_dependency(%q<minitest>.freeze, [">= 0"])
         | 
| 116 | 
            +
                s.add_dependency(%q<test-unit>.freeze, [">= 0"])
         | 
| 117 | 
            +
                s.add_dependency(%q<sdoc>.freeze, [">= 0"])
         | 
| 118 | 
            +
                s.add_dependency(%q<slim>.freeze, [">= 0"])
         | 
| 119 | 
            +
                s.add_dependency(%q<sinatra>.freeze, [">= 0"])
         | 
| 120 | 
            +
                s.add_dependency(%q<mocha>.freeze, [">= 0"])
         | 
| 121 | 
            +
                s.add_dependency(%q<coveralls>.freeze, [">= 0"])
         | 
| 122 | 
            +
                s.add_dependency(%q<shotgun>.freeze, [">= 0"])
         | 
| 123 | 
            +
                s.add_dependency(%q<guard>.freeze, [">= 0"])
         | 
| 124 | 
            +
                s.add_dependency(%q<guard-minitest>.freeze, [">= 0"])
         | 
| 123 125 | 
             
              end
         | 
| 124 126 | 
             
            end
         | 
| 125 127 |  | 
| @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            require './test/test_helper'
         | 
| 3 3 | 
             
            require 'benchmark'
         | 
| 4 4 |  | 
| 5 | 
            -
            describe ' | 
| 5 | 
            +
            describe 'Performance Poller' do
         | 
| 6 6 | 
             
              X = 10000
         | 
| 7 7 | 
             
              before do
         | 
| 8 8 | 
             
                Sidekiq.redis = REDIS
         | 
| @@ -28,8 +28,8 @@ describe 'Perfromance Poller' do | |
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| 30 30 | 
             
                @poller = Sidekiq::Cron::Poller.new
         | 
| 31 | 
            -
                now = Time.now.utc
         | 
| 32 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 31 | 
            +
                now = Time.now.utc + 3600
         | 
| 32 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 10, 5)
         | 
| 33 33 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 34 34 | 
             
              end
         | 
| 35 35 |  | 
| @@ -46,7 +46,7 @@ describe 'Perfromance Poller' do | |
| 46 46 | 
             
                  assert_equal X, conn.llen("queue:default"), 'Queue should be full'
         | 
| 47 47 | 
             
                end
         | 
| 48 48 |  | 
| 49 | 
            -
                puts " | 
| 50 | 
            -
                assert_operator  | 
| 49 | 
            +
                puts "Performance test finished in #{bench.real}"
         | 
| 50 | 
            +
                assert_operator bench.real, :<, 30
         | 
| 51 51 | 
             
              end
         | 
| 52 52 | 
             
            end
         | 
    
        data/test/unit/job_test.rb
    CHANGED
    
    | @@ -210,24 +210,24 @@ describe "Cron Job" do | |
| 210 210 |  | 
| 211 211 | 
             
                it "return previous minute" do
         | 
| 212 212 | 
             
                  @job.cron = "* * * * *"
         | 
| 213 | 
            -
                  time = Time. | 
| 213 | 
            +
                  time = Time.new(2018, 8, 10, 13, 24, 56).utc
         | 
| 214 214 | 
             
                  assert_equal @job.last_time(time).strftime("%Y-%m-%d-%H-%M-%S"), time.strftime("%Y-%m-%d-%H-%M-00")
         | 
| 215 215 | 
             
                end
         | 
| 216 216 |  | 
| 217 217 | 
             
                it "return previous hour" do
         | 
| 218 218 | 
             
                  @job.cron = "1 * * * *"
         | 
| 219 | 
            -
                  time = Time. | 
| 219 | 
            +
                  time = Time.new(2018, 8, 10, 13, 24, 56).utc
         | 
| 220 220 | 
             
                  assert_equal @job.last_time(time).strftime("%Y-%m-%d-%H-%M-%S"), time.strftime("%Y-%m-%d-%H-01-00")
         | 
| 221 221 | 
             
                end
         | 
| 222 222 |  | 
| 223 223 | 
             
                it "return previous day" do
         | 
| 224 224 | 
             
                  @job.cron = "1 2 * * * Etc/GMT"
         | 
| 225 | 
            -
                  time = Time. | 
| 225 | 
            +
                  time = Time.new(2018, 8, 10, 13, 24, 56).utc
         | 
| 226 226 |  | 
| 227 227 | 
             
                  if time.hour >= 2
         | 
| 228 228 | 
             
                    assert_equal @job.last_time(time).strftime("%Y-%m-%d-%H-%M-%S"), time.strftime("%Y-%m-%d-02-01-00")
         | 
| 229 229 | 
             
                  else
         | 
| 230 | 
            -
                    yesterday =  | 
| 230 | 
            +
                    yesterday = time - 1.day
         | 
| 231 231 | 
             
                    assert_equal @job.last_time(time).strftime("%Y-%m-%d-%H-%M-%S"), yesterday.strftime("%Y-%m-%d-02-01-00")
         | 
| 232 232 | 
             
                  end
         | 
| 233 233 | 
             
                end
         | 
| @@ -299,6 +299,7 @@ describe "Cron Job" do | |
| 299 299 | 
             
                it 'should return valid payload for Sidekiq::Client' do
         | 
| 300 300 | 
             
                  payload = {
         | 
| 301 301 | 
             
                    'class'       => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
         | 
| 302 | 
            +
                    'wrapped'     => 'ActiveJobCronTestClass',
         | 
| 302 303 | 
             
                    'queue'       => 'super_queue',
         | 
| 303 304 | 
             
                    'description' => nil,
         | 
| 304 305 | 
             
                    'args'        => [{
         | 
| @@ -330,10 +331,11 @@ describe "Cron Job" do | |
| 330 331 |  | 
| 331 332 | 
             
                it 'should return valid payload for Sidekiq::Client' do
         | 
| 332 333 | 
             
                  payload = {
         | 
| 333 | 
            -
                    'class' | 
| 334 | 
            -
                    ' | 
| 334 | 
            +
                    'class'       => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
         | 
| 335 | 
            +
                    'wrapped'     => 'ActiveJobCronTestClass',
         | 
| 336 | 
            +
                    'queue'       => 'prefix_super_queue',
         | 
| 335 337 | 
             
                    'description' => nil,
         | 
| 336 | 
            -
                    'args' | 
| 338 | 
            +
                    'args'        => [{
         | 
| 337 339 | 
             
                      'job_class'  => 'ActiveJobCronTestClass',
         | 
| 338 340 | 
             
                      'job_id'     => 'XYZ',
         | 
| 339 341 | 
             
                      'queue_name' => 'prefix_super_queue',
         | 
| @@ -522,7 +524,6 @@ describe "Cron Job" do | |
| 522 524 | 
             
                  assert @job.save
         | 
| 523 525 | 
             
                end
         | 
| 524 526 |  | 
| 525 | 
            -
             | 
| 526 527 | 
             
                it "be saved and found by name" do
         | 
| 527 528 | 
             
                  assert @job.save, "not saved"
         | 
| 528 529 | 
             
                  assert Sidekiq::Cron::Job.find("Test").is_a?(Sidekiq::Cron::Job)
         | 
| @@ -600,13 +601,14 @@ describe "Cron Job" do | |
| 600 601 | 
             
                it "last_enqueue_time shouldn't be rewritten after save" do
         | 
| 601 602 | 
             
                  #adding last_enqueue_time to initialize is only for test purpose
         | 
| 602 603 | 
             
                  last_enqueue_time = '2013-01-01 23:59:59'
         | 
| 604 | 
            +
                  expected_enqueue_time = DateTime.parse(last_enqueue_time).to_time.utc
         | 
| 603 605 | 
             
                  Sidekiq::Cron::Job.create(@args.merge('last_enqueue_time' => last_enqueue_time))
         | 
| 604 606 | 
             
                  job = Sidekiq::Cron::Job.find(@args)
         | 
| 605 | 
            -
                  assert_equal job.last_enqueue_time,  | 
| 607 | 
            +
                  assert_equal job.last_enqueue_time, expected_enqueue_time
         | 
| 606 608 |  | 
| 607 609 | 
             
                  Sidekiq::Cron::Job.create(@args)
         | 
| 608 610 | 
             
                  job = Sidekiq::Cron::Job.find(@args)
         | 
| 609 | 
            -
                  assert_equal job.last_enqueue_time,  | 
| 611 | 
            +
                  assert_equal job.last_enqueue_time, expected_enqueue_time, "after second create should have same time"
         | 
| 610 612 | 
             
                end
         | 
| 611 613 | 
             
              end
         | 
| 612 614 |  | 
| @@ -883,7 +885,7 @@ describe "Cron Job" do | |
| 883 885 | 
             
                    @jobs_hash['name_of_job']['cron'] = "bad cron"
         | 
| 884 886 | 
             
                    out = Sidekiq::Cron::Job.load_from_hash @jobs_hash
         | 
| 885 887 | 
             
                    assert_equal 1, out.size, "should have 1 error"
         | 
| 886 | 
            -
                    assert_equal ({"name_of_job"=>["'cron' -> bad cron: not a  | 
| 888 | 
            +
                    assert_equal ({"name_of_job"=>["'cron' -> \"bad cron\" -> ArgumentError: not a cron string \"bad cron\""]}), out
         | 
| 887 889 | 
             
                    assert_equal 1, Sidekiq::Cron::Job.all.size, "Should have only 1 job after load"
         | 
| 888 890 | 
             
                  end
         | 
| 889 891 |  | 
    
        data/test/unit/poller_test.rb
    CHANGED
    
    | @@ -28,8 +28,8 @@ describe 'Cron Poller' do | |
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 30 | 
             
              it 'not enqueue any job - new jobs' do
         | 
| 31 | 
            -
                now = Time.now.utc
         | 
| 32 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 31 | 
            +
                now = Time.now.utc + 3600
         | 
| 32 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 5, 1)
         | 
| 33 33 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 34 34 | 
             
                #new jobs!
         | 
| 35 35 | 
             
                Sidekiq::Cron::Job.create(@args)
         | 
| @@ -43,19 +43,20 @@ describe 'Cron Poller' do | |
| 43 43 | 
             
                end
         | 
| 44 44 |  | 
| 45 45 | 
             
                #30 seconds after!
         | 
| 46 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 46 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 5, 30)
         | 
| 47 47 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 48 | 
            -
                  @poller.enqueue
         | 
| 49 48 |  | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
                   | 
| 49 | 
            +
                @poller.enqueue
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                Sidekiq.redis do |conn|
         | 
| 52 | 
            +
                  assert_equal 0, conn.llen("queue:default")
         | 
| 53 | 
            +
                  assert_equal 0, conn.llen("queue:super")
         | 
| 54 | 
            +
                end
         | 
| 54 55 | 
             
              end
         | 
| 55 56 |  | 
| 56 57 | 
             
              it 'should enqueue only job with cron */2' do
         | 
| 57 | 
            -
                now = Time.now.utc
         | 
| 58 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 58 | 
            +
                now = Time.now.utc + 3600
         | 
| 59 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 5, 1)
         | 
| 59 60 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 60 61 | 
             
                #new jobs!
         | 
| 61 62 | 
             
                Sidekiq::Cron::Job.create(@args)
         | 
| @@ -68,7 +69,7 @@ describe 'Cron Poller' do | |
| 68 69 | 
             
                  assert_equal 0, conn.llen("queue:super")
         | 
| 69 70 | 
             
                end
         | 
| 70 71 |  | 
| 71 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 72 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 6, 1)
         | 
| 72 73 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 73 74 | 
             
                @poller.enqueue
         | 
| 74 75 |  | 
| @@ -79,8 +80,8 @@ describe 'Cron Poller' do | |
| 79 80 | 
             
              end
         | 
| 80 81 |  | 
| 81 82 | 
             
              it 'should enqueue both jobs' do
         | 
| 82 | 
            -
                now = Time.now.utc
         | 
| 83 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 83 | 
            +
                now = Time.now.utc + 3600
         | 
| 84 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 8, 1)
         | 
| 84 85 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 85 86 | 
             
                #new jobs!
         | 
| 86 87 | 
             
                Sidekiq::Cron::Job.create(@args)
         | 
| @@ -93,7 +94,7 @@ describe 'Cron Poller' do | |
| 93 94 | 
             
                  assert_equal 0, conn.llen("queue:super")
         | 
| 94 95 | 
             
                end
         | 
| 95 96 |  | 
| 96 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 97 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 10, 5)
         | 
| 97 98 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 98 99 | 
             
                @poller.enqueue
         | 
| 99 100 |  | 
| @@ -104,8 +105,8 @@ describe 'Cron Poller' do | |
| 104 105 | 
             
              end
         | 
| 105 106 |  | 
| 106 107 | 
             
              it 'should enqueue both jobs but only one time each' do
         | 
| 107 | 
            -
                now = Time.now.utc
         | 
| 108 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 108 | 
            +
                now = Time.now.utc + 3600
         | 
| 109 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 8, 1)
         | 
| 109 110 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 110 111 | 
             
                #new jobs!
         | 
| 111 112 | 
             
                Sidekiq::Cron::Job.create(@args)
         | 
| @@ -118,7 +119,7 @@ describe 'Cron Poller' do | |
| 118 119 | 
             
                  assert_equal 0, conn.llen("queue:super")
         | 
| 119 120 | 
             
                end
         | 
| 120 121 |  | 
| 121 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 122 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 20, 1)
         | 
| 122 123 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 123 124 | 
             
                @poller.enqueue
         | 
| 124 125 | 
             
                Sidekiq.redis do |conn|
         | 
| @@ -126,7 +127,7 @@ describe 'Cron Poller' do | |
| 126 127 | 
             
                  assert_equal 1, conn.llen("queue:super")
         | 
| 127 128 | 
             
                end
         | 
| 128 129 |  | 
| 129 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 130 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 20, 2)
         | 
| 130 131 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 131 132 | 
             
                @poller.enqueue
         | 
| 132 133 | 
             
                Sidekiq.redis do |conn|
         | 
| @@ -134,7 +135,7 @@ describe 'Cron Poller' do | |
| 134 135 | 
             
                  assert_equal 1, conn.llen("queue:super")
         | 
| 135 136 | 
             
                end
         | 
| 136 137 |  | 
| 137 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 138 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 20, 20)
         | 
| 138 139 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 139 140 | 
             
                @poller.enqueue
         | 
| 140 141 | 
             
                Sidekiq.redis do |conn|
         | 
| @@ -142,7 +143,7 @@ describe 'Cron Poller' do | |
| 142 143 | 
             
                  assert_equal 1, conn.llen("queue:super")
         | 
| 143 144 | 
             
                end
         | 
| 144 145 |  | 
| 145 | 
            -
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour | 
| 146 | 
            +
                enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 20, 50)
         | 
| 146 147 | 
             
                Time.stubs(:now).returns(enqueued_time)
         | 
| 147 148 | 
             
                @poller.enqueue
         | 
| 148 149 | 
             
                Sidekiq.redis do |conn|
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sidekiq-cron
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ondrej Bartas
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2018-08-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: sidekiq
         | 
| @@ -25,19 +25,19 @@ dependencies: | |
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: 4.2.1
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              name:  | 
| 28 | 
            +
              name: fugit
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 | 
            -
                - - " | 
| 31 | 
            +
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: '1.1'
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 | 
            -
                - - " | 
| 38 | 
            +
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version:  | 
| 40 | 
            +
                    version: '1.1'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: bundler
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -302,7 +302,9 @@ files: | |
| 302 302 | 
             
            - lib/sidekiq/cron/launcher.rb
         | 
| 303 303 | 
             
            - lib/sidekiq/cron/locales/de.yml
         | 
| 304 304 | 
             
            - lib/sidekiq/cron/locales/en.yml
         | 
| 305 | 
            +
            - lib/sidekiq/cron/locales/ja.yml
         | 
| 305 306 | 
             
            - lib/sidekiq/cron/locales/ru.yml
         | 
| 307 | 
            +
            - lib/sidekiq/cron/locales/zh-CN.yml
         | 
| 306 308 | 
             
            - lib/sidekiq/cron/poller.rb
         | 
| 307 309 | 
             
            - lib/sidekiq/cron/support.rb
         | 
| 308 310 | 
             
            - lib/sidekiq/cron/views/cron.erb
         | 
| @@ -335,7 +337,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 335 337 | 
             
                  version: '0'
         | 
| 336 338 | 
             
            requirements: []
         | 
| 337 339 | 
             
            rubyforge_project: 
         | 
| 338 | 
            -
            rubygems_version: 2.5.1
         | 
| 340 | 
            +
            rubygems_version: 2.5.2.1
         | 
| 339 341 | 
             
            signing_key: 
         | 
| 340 342 | 
             
            specification_version: 4
         | 
| 341 343 | 
             
            summary: Sidekiq Cron helps to add repeated scheduled jobs
         |