whenever 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +32 -5
- data/Appraisals +19 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile +1 -1
- data/README.md +16 -12
- data/gemfiles/activesupport4.1.gemfile +3 -1
- data/gemfiles/activesupport4.2.gemfile +3 -1
- data/gemfiles/activesupport5.0.gemfile +7 -0
- data/gemfiles/activesupport5.1.gemfile +7 -0
- data/gemfiles/activesupport5.2.gemfile +7 -0
- data/lib/whenever/capistrano/v3/tasks/whenever.rake +2 -2
- data/lib/whenever/command_line.rb +1 -1
- data/lib/whenever/cron.rb +16 -9
- data/lib/whenever/numeric.rb +1 -1
- data/lib/whenever/version.rb +1 -1
- data/test/unit/cron_test.rb +48 -0
- data/whenever.gemspec +1 -0
- metadata +21 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: be14a26bff8c588b4e5828582a552f4a10e056b08581f4d28b2f44ae6726c694
         | 
| 4 | 
            +
              data.tar.gz: 6e8db042c4c070b52f85bf958b73673b2445663ca102ecb306ac4aa654e8cb37
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 30fc22be58c8cccdf2da369fd9103aedd5c4da0ac7abb6736abf166958c5d79f67029634a0ceb36aa0babcf66c41e092ae4a965b17b1459c2f22cc4c655e9abf
         | 
| 7 | 
            +
              data.tar.gz: ebfb02153d52c3df836e50f3ef286ebdaefad889fded4d35664afbe70a46e6910842d96a83f8df6006adadc1b30c2b96f2d17deb3c7c8cf01cfab8999a991cc3
         | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -2,20 +2,47 @@ language: ruby | |
| 2 2 |  | 
| 3 3 | 
             
            before_install:
         | 
| 4 4 | 
             
              - gem install bundler
         | 
| 5 | 
            -
             | 
| 5 | 
            +
              - unset _JAVA_OPTIONS
         | 
| 6 6 | 
             
            rvm:
         | 
| 7 7 | 
             
              - 1.9.3
         | 
| 8 8 | 
             
              - 2.0.0
         | 
| 9 9 | 
             
              - 2.1.10
         | 
| 10 | 
            -
              - 2.2. | 
| 11 | 
            -
              - 2.3. | 
| 12 | 
            -
              - 2.4. | 
| 10 | 
            +
              - 2.2.10
         | 
| 11 | 
            +
              - 2.3.8
         | 
| 12 | 
            +
              - 2.4.5
         | 
| 13 | 
            +
              - 2.5.3
         | 
| 13 14 | 
             
              - jruby-9.1.9.0
         | 
| 15 | 
            +
            matrix:
         | 
| 16 | 
            +
              exclude:
         | 
| 17 | 
            +
                # activesupport 5 only supports ruby 2.2.2 and later
         | 
| 18 | 
            +
                - gemfile: gemfiles/activesupport5.0.gemfile
         | 
| 19 | 
            +
                  rvm: 1.9.3
         | 
| 20 | 
            +
                - gemfile: gemfiles/activesupport5.1.gemfile
         | 
| 21 | 
            +
                  rvm: 1.9.3
         | 
| 22 | 
            +
                - gemfile: gemfiles/activesupport5.2.gemfile
         | 
| 23 | 
            +
                  rvm: 1.9.3
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                - gemfile: gemfiles/activesupport5.0.gemfile
         | 
| 26 | 
            +
                  rvm: 2.0.0
         | 
| 27 | 
            +
                - gemfile: gemfiles/activesupport5.1.gemfile
         | 
| 28 | 
            +
                  rvm: 2.0.0
         | 
| 29 | 
            +
                - gemfile: gemfiles/activesupport5.2.gemfile
         | 
| 30 | 
            +
                  rvm: 2.0.0
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                - gemfile: gemfiles/activesupport5.0.gemfile
         | 
| 33 | 
            +
                  rvm: 2.1.10
         | 
| 34 | 
            +
                - gemfile: gemfiles/activesupport5.1.gemfile
         | 
| 35 | 
            +
                  rvm: 2.1.10
         | 
| 36 | 
            +
                - gemfile: gemfiles/activesupport5.2.gemfile
         | 
| 37 | 
            +
                  rvm: 2.1.10
         | 
| 14 38 |  | 
| 15 39 | 
             
            gemfile:
         | 
| 16 | 
            -
              - Gemfile
         | 
| 17 40 | 
             
              - gemfiles/activesupport4.1.gemfile
         | 
| 18 41 | 
             
              - gemfiles/activesupport4.2.gemfile
         | 
| 42 | 
            +
              - gemfiles/activesupport5.0.gemfile
         | 
| 43 | 
            +
              - gemfiles/activesupport5.1.gemfile
         | 
| 44 | 
            +
              - gemfiles/activesupport5.2.gemfile
         | 
| 45 | 
            +
             | 
| 19 46 | 
             
            env:
         | 
| 20 47 | 
             
              global:
         | 
| 21 48 | 
             
                - JRUBY_OPTS=--debug
         | 
    
        data/Appraisals
    ADDED
    
    | @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            appraise 'activesupport4.1' do
         | 
| 2 | 
            +
              gem "activesupport", "~> 4.1.0"
         | 
| 3 | 
            +
            end
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            appraise 'activesupport4.2' do
         | 
| 6 | 
            +
              gem "activesupport", "~> 4.2.0"
         | 
| 7 | 
            +
            end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            appraise 'activesupport5.0' do
         | 
| 10 | 
            +
              gem "activesupport", "~> 5.0.0"
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            appraise 'activesupport5.1' do
         | 
| 14 | 
            +
              gem "activesupport", "~> 5.1.0"
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            appraise 'activesupport5.2' do
         | 
| 18 | 
            +
              gem "activesupport", "~> 5.2.0beta2"
         | 
| 19 | 
            +
            end
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,15 @@ | |
| 1 1 | 
             
            ### develop
         | 
| 2 2 |  | 
| 3 | 
            +
            ### 0.11.0 / April 23, 2019
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Add support for mapping Range objects to cron range syntax [Tim Craft](https://github.com/javan/whenever/pull/725)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Bugfix: Avoid modifying Capistrano `default_env` when setting the whenever environment. [ta1kt0me](https://github.com/javan/whenever/pull/728)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            * Enable to execute whenever's task independently without setting :release_path or :whenever_path [ta1kt0me](https://github.com/javan/whenever/pull/729)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            * Make error message clearer when parsing cron syntax fails due to a trailing space [ignisf](https://github.com/javan/whenever/pull/744)
         | 
| 12 | 
            +
             | 
| 3 13 | 
             
            ### 0.10.0 / November 19, 2017
         | 
| 4 14 |  | 
| 5 15 | 
             
            * Modify wheneverize to allow for the creating of 'config' directory when not present
         | 
| @@ -14,6 +24,8 @@ | |
| 14 24 |  | 
| 15 25 | 
             
            * Allow configuring an alternative schedule file in Capistrano. [Shinichi Okamoto](https://github.com/javan/whenever/pull/666)
         | 
| 16 26 |  | 
| 27 | 
            +
            * Add customizing email recipient option with the MAILTO environment variable. [Chikahiro Tokoro](https://github.com/javan/whenever/pull/678)
         | 
| 28 | 
            +
             | 
| 17 29 | 
             
            ### 0.9.7 / June 14, 2016
         | 
| 18 30 |  | 
| 19 31 | 
             
            * Restore compatibility with Capistrano v3; it has a bug which we have to work around [Ben Langfeld, Chris Gunther, Shohei Yamasaki]
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -9,7 +9,7 @@ $ gem install whenever | |
| 9 9 | 
             
            Or with Bundler in your Gemfile.
         | 
| 10 10 |  | 
| 11 11 | 
             
            ```ruby
         | 
| 12 | 
            -
            gem 'whenever', : | 
| 12 | 
            +
            gem 'whenever', require: false
         | 
| 13 13 | 
             
            ```
         | 
| 14 14 |  | 
| 15 15 | 
             
            ### Getting started
         | 
| @@ -54,15 +54,19 @@ every 3.hours do # 1.minute 1.day 1.week 1.month 1.year is also supported | |
| 54 54 | 
             
              command "/usr/bin/my_great_command"
         | 
| 55 55 | 
             
            end
         | 
| 56 56 |  | 
| 57 | 
            -
            every 1.day, : | 
| 57 | 
            +
            every 1.day, at: '4:30 am' do
         | 
| 58 58 | 
             
              runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
         | 
| 59 59 | 
             
            end
         | 
| 60 60 |  | 
| 61 | 
            +
            every 1.day, at: ['4:30 am', '6:00 pm'] do
         | 
| 62 | 
            +
              runner "Mymodel.task_to_run_in_two_times_every_day"
         | 
| 63 | 
            +
            end
         | 
| 64 | 
            +
             | 
| 61 65 | 
             
            every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
         | 
| 62 66 | 
             
              runner "SomeModel.ladeeda"
         | 
| 63 67 | 
             
            end
         | 
| 64 68 |  | 
| 65 | 
            -
            every :sunday, : | 
| 69 | 
            +
            every :sunday, at: '12pm' do # Use any day of the week or :weekend, :weekday
         | 
| 66 70 | 
             
              runner "Task.do_something_great"
         | 
| 67 71 | 
             
            end
         | 
| 68 72 |  | 
| @@ -72,7 +76,7 @@ end | |
| 72 76 |  | 
| 73 77 | 
             
            # run this task only on servers with the :app role in Capistrano
         | 
| 74 78 | 
             
            # see Capistrano roles section below
         | 
| 75 | 
            -
            every :day, : | 
| 79 | 
            +
            every :day, at: '12:20am', roles: [:app] do
         | 
| 76 80 | 
             
              rake "app_server:task"
         | 
| 77 81 | 
             
            end
         | 
| 78 82 | 
             
            ```
         | 
| @@ -87,7 +91,7 @@ For example: | |
| 87 91 | 
             
            job_type :awesome, '/usr/local/bin/awesome :task :fun_level'
         | 
| 88 92 |  | 
| 89 93 | 
             
            every 2.hours do
         | 
| 90 | 
            -
              awesome "party", : | 
| 94 | 
            +
              awesome "party", fun_level: "extreme"
         | 
| 91 95 | 
             
            end
         | 
| 92 96 | 
             
            ```
         | 
| 93 97 |  | 
| @@ -129,10 +133,10 @@ You can set your custom Chronic configuration if the defaults don't fit you. | |
| 129 133 | 
             
            For example, to assume a 24 hour clock instead of the default 12 hour clock:
         | 
| 130 134 |  | 
| 131 135 | 
             
            ```ruby
         | 
| 132 | 
            -
            set :chronic_options, : | 
| 136 | 
            +
            set :chronic_options, hours24: true
         | 
| 133 137 |  | 
| 134 138 | 
             
            # By default this would run the job every day at 3am
         | 
| 135 | 
            -
            every 1.day, : | 
| 139 | 
            +
            every 1.day, at: '3:00' do
         | 
| 136 140 | 
             
              runner "MyModel.nightly_archive_job"
         | 
| 137 141 | 
             
            end
         | 
| 138 142 | 
             
            ```
         | 
| @@ -240,7 +244,7 @@ When you define a job in your schedule.rb file, by default it will be deployed t | |
| 240 244 | 
             
            all servers in the whenever_roles list (which defaults to `[:db]`).
         | 
| 241 245 |  | 
| 242 246 | 
             
            However, if you want to restrict certain jobs to only run on subset of servers,
         | 
| 243 | 
            -
            you can add a  | 
| 247 | 
            +
            you can add a `roles: [...]` argument to their definitions. **Make sure to add
         | 
| 244 248 | 
             
            that role to the whenever_roles list in your deploy.rb.**
         | 
| 245 249 |  | 
| 246 250 | 
             
            When you run `cap deploy`, jobs with a :roles list specified will only be added to
         | 
| @@ -253,7 +257,7 @@ So, for example, with the default whenever_roles of `[:db]`, a job like this wou | |
| 253 257 | 
             
            deployed to all servers with the `:db` role:
         | 
| 254 258 |  | 
| 255 259 | 
             
            ```ruby
         | 
| 256 | 
            -
            every :day, : | 
| 260 | 
            +
            every :day, at: '12:20am' do
         | 
| 257 261 | 
             
              rake 'foo:bar'
         | 
| 258 262 | 
             
            end
         | 
| 259 263 | 
             
            ```
         | 
| @@ -262,15 +266,15 @@ If we set whenever_roles to `[:db, :app]` in deploy.rb, and have the following | |
| 262 266 | 
             
            jobs in schedule.rb:
         | 
| 263 267 |  | 
| 264 268 | 
             
            ```ruby
         | 
| 265 | 
            -
            every :day, : | 
| 269 | 
            +
            every :day, at: '1:37pm', roles: [:app] do
         | 
| 266 270 | 
             
              rake 'app:task' # will only be added to crontabs of :app servers
         | 
| 267 271 | 
             
            end
         | 
| 268 272 |  | 
| 269 | 
            -
            every :hour, : | 
| 273 | 
            +
            every :hour, roles: [:db] do
         | 
| 270 274 | 
             
              rake 'db:task' # will only be added to crontabs of :db servers
         | 
| 271 275 | 
             
            end
         | 
| 272 276 |  | 
| 273 | 
            -
            every :day, : | 
| 277 | 
            +
            every :day, at: '12:02am' do
         | 
| 274 278 | 
             
              command "run_this_everywhere" # will be deployed to :db and :app servers
         | 
| 275 279 | 
             
            end
         | 
| 276 280 | 
             
            ```
         | 
| @@ -44,13 +44,13 @@ namespace :load do | |
| 44 44 | 
             
              task :defaults do
         | 
| 45 45 | 
             
                set :whenever_roles,        ->{ :db }
         | 
| 46 46 | 
             
                set :whenever_command,      ->{ [:bundle, :exec, :whenever] }
         | 
| 47 | 
            -
                set :whenever_command_environment_variables, ->{ fetch(:default_env).merge | 
| 47 | 
            +
                set :whenever_command_environment_variables, ->{ fetch(:default_env).merge(rails_env: fetch(:whenever_environment)) }
         | 
| 48 48 | 
             
                set :whenever_identifier,   ->{ fetch :application }
         | 
| 49 49 | 
             
                set :whenever_environment,  ->{ fetch :rails_env, fetch(:stage, "production") }
         | 
| 50 50 | 
             
                set :whenever_variables,    ->{ "environment=#{fetch :whenever_environment}" }
         | 
| 51 51 | 
             
                set :whenever_load_file,    ->{ nil }
         | 
| 52 52 | 
             
                set :whenever_update_flags, ->{ "--update-crontab #{fetch :whenever_identifier} --set #{fetch :whenever_variables}" }
         | 
| 53 53 | 
             
                set :whenever_clear_flags,  ->{ "--clear-crontab #{fetch :whenever_identifier}" }
         | 
| 54 | 
            -
                set :whenever_path,         ->{  | 
| 54 | 
            +
                set :whenever_path,         ->{ release_path }
         | 
| 55 55 | 
             
              end
         | 
| 56 56 | 
             
            end
         | 
| @@ -102,7 +102,7 @@ module Whenever | |
| 102 102 | 
             
                    exit(1)
         | 
| 103 103 | 
             
                  end
         | 
| 104 104 |  | 
| 105 | 
            -
                  # If an existing  | 
| 105 | 
            +
                  # If an existing identifier block is found, replace it with the new cron entries
         | 
| 106 106 | 
             
                  if read_crontab =~ Regexp.new("^#{comment_open_regex}\s*$") && read_crontab =~ Regexp.new("^#{comment_close_regex}\s*$")
         | 
| 107 107 | 
             
                    # If the existing crontab file contains backslashes they get lost going through gsub.
         | 
| 108 108 | 
             
                    # .gsub('\\', '\\\\\\') preserves them. Go figure.
         | 
    
        data/lib/whenever/cron.rb
    CHANGED
    
    | @@ -96,15 +96,13 @@ module Whenever | |
| 96 96 | 
             
                        timing[0] = comma_separated_timing(minute_frequency, 59, @at || 0)
         | 
| 97 97 | 
             
                      when Whenever.seconds(1, :hour)...Whenever.seconds(1, :day)
         | 
| 98 98 | 
             
                        hour_frequency = (@time / 60 / 60).round
         | 
| 99 | 
            -
                        timing[0] = @at.is_a?(Time) ? @at.min : @at
         | 
| 99 | 
            +
                        timing[0] = @at.is_a?(Time) ? @at.min : range_or_integer(@at, 0..59, 'Minute')
         | 
| 100 100 | 
             
                        timing[1] = comma_separated_timing(hour_frequency, 23)
         | 
| 101 | 
            -
                        raise ArgumentError, "Minute must be between 0-59, #{timing[0]} given" unless (0..59).include?(timing[0])
         | 
| 102 101 | 
             
                      when Whenever.seconds(1, :day)...Whenever.seconds(1, :month)
         | 
| 103 102 | 
             
                        day_frequency = (@time / 24 / 60 / 60).round
         | 
| 104 103 | 
             
                        timing[0] = @at.is_a?(Time) ? @at.min  : 0
         | 
| 105 | 
            -
                        timing[1] = @at.is_a?(Time) ? @at.hour : @at
         | 
| 104 | 
            +
                        timing[1] = @at.is_a?(Time) ? @at.hour : range_or_integer(@at, 0..23, 'Hour')
         | 
| 106 105 | 
             
                        timing[2] = comma_separated_timing(day_frequency, 31, 1)
         | 
| 107 | 
            -
                        raise ArgumentError, "Hour must be between 0-23, #{timing[1]} given" unless (0..23).include?(timing[1])
         | 
| 108 106 | 
             
                      when Whenever.seconds(1, :month)...Whenever.seconds(1, :year)
         | 
| 109 107 | 
             
                        month_frequency = (@time / 30 / 24 / 60 / 60).round
         | 
| 110 108 | 
             
                        timing[0] = @at.is_a?(Time) ? @at.min  : 0
         | 
| @@ -112,10 +110,9 @@ module Whenever | |
| 112 110 | 
             
                        timing[2] = if @at.is_a?(Time)
         | 
| 113 111 | 
             
                          day_given? ? @at.day : 1
         | 
| 114 112 | 
             
                        else
         | 
| 115 | 
            -
                          @at | 
| 113 | 
            +
                          @at == 0 ? 1 : range_or_integer(@at, 1..31, 'Day')
         | 
| 116 114 | 
             
                        end
         | 
| 117 115 | 
             
                        timing[3] = comma_separated_timing(month_frequency, 12, 1)
         | 
| 118 | 
            -
                        raise ArgumentError, "Day must be between 1-31, #{timing[2]} given" unless (1..31).include?(timing[2])
         | 
| 119 116 | 
             
                      when Whenever.seconds(1, :year)
         | 
| 120 117 | 
             
                        timing[0] = @at.is_a?(Time) ? @at.min  : 0
         | 
| 121 118 | 
             
                        timing[1] = @at.is_a?(Time) ? @at.hour : 0
         | 
| @@ -127,9 +124,8 @@ module Whenever | |
| 127 124 | 
             
                        timing[3] = if @at.is_a?(Time)
         | 
| 128 125 | 
             
                          day_given? ? @at.month : 1
         | 
| 129 126 | 
             
                        else
         | 
| 130 | 
            -
                          @at | 
| 127 | 
            +
                          @at == 0 ? 1 : range_or_integer(@at, 1..12, 'Month')
         | 
| 131 128 | 
             
                        end
         | 
| 132 | 
            -
                        raise ArgumentError, "Month must be between 1-12, #{timing[3]} given" unless (1..12).include?(timing[3])
         | 
| 133 129 | 
             
                      else
         | 
| 134 130 | 
             
                        return parse_as_string
         | 
| 135 131 | 
             
                    end
         | 
| @@ -151,7 +147,18 @@ module Whenever | |
| 151 147 | 
             
                      return (timing << i) * " " if string.downcase.index(day)
         | 
| 152 148 | 
             
                    end
         | 
| 153 149 |  | 
| 154 | 
            -
                    raise ArgumentError, "Couldn't parse: #{@time}"
         | 
| 150 | 
            +
                    raise ArgumentError, "Couldn't parse: #{@time.inspect}"
         | 
| 151 | 
            +
                  end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                  def range_or_integer(at, valid_range, name)
         | 
| 154 | 
            +
                    must_be_between = "#{name} must be between #{valid_range.min}-#{valid_range.max}"
         | 
| 155 | 
            +
                    if at.is_a?(Range)
         | 
| 156 | 
            +
                      raise ArgumentError, "#{must_be_between}, #{at.min} given" unless valid_range.include?(at.min)
         | 
| 157 | 
            +
                      raise ArgumentError, "#{must_be_between}, #{at.max} given" unless valid_range.include?(at.max)
         | 
| 158 | 
            +
                      return "#{at.min}-#{at.max}"
         | 
| 159 | 
            +
                    end
         | 
| 160 | 
            +
                    raise ArgumentError, "#{must_be_between}, #{at} given" unless valid_range.include?(at)
         | 
| 161 | 
            +
                    at
         | 
| 155 162 | 
             
                  end
         | 
| 156 163 |  | 
| 157 164 | 
             
                  def comma_separated_timing(frequency, max, start = 0)
         | 
    
        data/lib/whenever/numeric.rb
    CHANGED
    
    
    
        data/lib/whenever/version.rb
    CHANGED
    
    
    
        data/test/unit/cron_test.rb
    CHANGED
    
    | @@ -78,6 +78,10 @@ class CronParseHoursTest < Whenever::TestCase | |
| 78 78 | 
             
                assert_minutes_equals "30", '6:30', :chronic_options => { :hours24 => false }
         | 
| 79 79 | 
             
              end
         | 
| 80 80 |  | 
| 81 | 
            +
              should "parse correctly when given an 'at' with minutes as a Range" do
         | 
| 82 | 
            +
                assert_minutes_equals "15-30", 15..30
         | 
| 83 | 
            +
              end
         | 
| 84 | 
            +
             | 
| 81 85 | 
             
              should "raise an exception when given an 'at' with an invalid minute value" do
         | 
| 82 86 | 
             
                assert_raises ArgumentError do
         | 
| 83 87 | 
             
                  parse_time(Whenever.seconds(1, :hour), nil, 60)
         | 
| @@ -86,6 +90,14 @@ class CronParseHoursTest < Whenever::TestCase | |
| 86 90 | 
             
                assert_raises ArgumentError do
         | 
| 87 91 | 
             
                  parse_time(Whenever.seconds(1, :hour), nil, -1)
         | 
| 88 92 | 
             
                end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                assert_raises ArgumentError do
         | 
| 95 | 
            +
                  parse_time(Whenever.seconds(1, :hour), nil, 0..60)
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                assert_raises ArgumentError do
         | 
| 99 | 
            +
                  parse_time(Whenever.seconds(1, :hour), nil, -1..59)
         | 
| 100 | 
            +
                end
         | 
| 89 101 | 
             
              end
         | 
| 90 102 | 
             
            end
         | 
| 91 103 |  | 
| @@ -130,6 +142,10 @@ class CronParseDaysTest < Whenever::TestCase | |
| 130 142 | 
             
                assert_hours_and_minutes_equals %w(23 0), 23
         | 
| 131 143 | 
             
              end
         | 
| 132 144 |  | 
| 145 | 
            +
              should "parse correctly when given an 'at' with hours as a Range" do
         | 
| 146 | 
            +
                assert_hours_and_minutes_equals %w(3-23 0), 3..23
         | 
| 147 | 
            +
              end
         | 
| 148 | 
            +
             | 
| 133 149 | 
             
              should "raise an exception when given an 'at' with an invalid hour value" do
         | 
| 134 150 | 
             
                assert_raises ArgumentError do
         | 
| 135 151 | 
             
                  parse_time(Whenever.seconds(1, :day), nil, 24)
         | 
| @@ -138,6 +154,14 @@ class CronParseDaysTest < Whenever::TestCase | |
| 138 154 | 
             
                assert_raises ArgumentError do
         | 
| 139 155 | 
             
                  parse_time(Whenever.seconds(1, :day), nil, -1)
         | 
| 140 156 | 
             
                end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                assert_raises ArgumentError do
         | 
| 159 | 
            +
                  parse_time(Whenever.seconds(1, :day), nil, 0..24)
         | 
| 160 | 
            +
                end
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                assert_raises ArgumentError do
         | 
| 163 | 
            +
                  parse_time(Whenever.seconds(1, :day), nil, -1..23)
         | 
| 164 | 
            +
                end
         | 
| 141 165 | 
             
              end
         | 
| 142 166 | 
             
            end
         | 
| 143 167 |  | 
| @@ -197,6 +221,10 @@ class CronParseMonthsTest < Whenever::TestCase | |
| 197 221 | 
             
                assert_days_and_hours_and_minutes_equals %w(29 0 0), 29
         | 
| 198 222 | 
             
              end
         | 
| 199 223 |  | 
| 224 | 
            +
              should "parse correctly when given an 'at' with days as a Range" do
         | 
| 225 | 
            +
                assert_days_and_hours_and_minutes_equals %w(1-7 0 0), 1..7
         | 
| 226 | 
            +
              end
         | 
| 227 | 
            +
             | 
| 200 228 | 
             
              should "raise an exception when given an 'at' with an invalid day value" do
         | 
| 201 229 | 
             
                assert_raises ArgumentError do
         | 
| 202 230 | 
             
                  parse_time(Whenever.seconds(1, :month), nil, 32)
         | 
| @@ -205,6 +233,14 @@ class CronParseMonthsTest < Whenever::TestCase | |
| 205 233 | 
             
                assert_raises ArgumentError do
         | 
| 206 234 | 
             
                  parse_time(Whenever.seconds(1, :month), nil, -1)
         | 
| 207 235 | 
             
                end
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                assert_raises ArgumentError do
         | 
| 238 | 
            +
                  parse_time(Whenever.seconds(1, :month), nil, 0..30)
         | 
| 239 | 
            +
                end
         | 
| 240 | 
            +
             | 
| 241 | 
            +
                assert_raises ArgumentError do
         | 
| 242 | 
            +
                  parse_time(Whenever.seconds(1, :month), nil, 1..32)
         | 
| 243 | 
            +
                end
         | 
| 208 244 | 
             
              end
         | 
| 209 245 | 
             
            end
         | 
| 210 246 |  | 
| @@ -254,6 +290,10 @@ class CronParseYearTest < Whenever::TestCase | |
| 254 290 | 
             
                assert_months_and_days_and_hours_and_minutes_equals %w(12 1 0 0), 12
         | 
| 255 291 | 
             
              end
         | 
| 256 292 |  | 
| 293 | 
            +
              should "parse correctly when given an 'at' with month as a Range" do
         | 
| 294 | 
            +
                assert_months_and_days_and_hours_and_minutes_equals %w(1-3 1 0 0), 1..3
         | 
| 295 | 
            +
              end
         | 
| 296 | 
            +
             | 
| 257 297 | 
             
              should "raise an exception when given an 'at' with an invalid month value" do
         | 
| 258 298 | 
             
                assert_raises ArgumentError do
         | 
| 259 299 | 
             
                  parse_time(Whenever.seconds(1, :year), nil, 13)
         | 
| @@ -262,6 +302,14 @@ class CronParseYearTest < Whenever::TestCase | |
| 262 302 | 
             
                assert_raises ArgumentError do
         | 
| 263 303 | 
             
                  parse_time(Whenever.seconds(1, :year), nil, -1)
         | 
| 264 304 | 
             
                end
         | 
| 305 | 
            +
             | 
| 306 | 
            +
                assert_raises ArgumentError do
         | 
| 307 | 
            +
                  parse_time(Whenever.seconds(1, :year), nil, 0..12)
         | 
| 308 | 
            +
                end
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                assert_raises ArgumentError do
         | 
| 311 | 
            +
                  parse_time(Whenever.seconds(1, :year), nil, 1..13)
         | 
| 312 | 
            +
                end
         | 
| 265 313 | 
             
              end
         | 
| 266 314 | 
             
            end
         | 
| 267 315 |  | 
    
        data/whenever.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: whenever
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.11.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Javan Makhmali
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2019-04-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: chronic
         | 
| @@ -80,6 +80,20 @@ dependencies: | |
| 80 80 | 
             
                - - ">="
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 82 | 
             
                    version: '0'
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: appraisal
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - ">="
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :development
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - ">="
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: '0'
         | 
| 83 97 | 
             
            description: Clean ruby syntax for writing and deploying cron jobs.
         | 
| 84 98 | 
             
            email:
         | 
| 85 99 | 
             
            - javan@javan.us
         | 
| @@ -91,6 +105,7 @@ extra_rdoc_files: [] | |
| 91 105 | 
             
            files:
         | 
| 92 106 | 
             
            - ".gitignore"
         | 
| 93 107 | 
             
            - ".travis.yml"
         | 
| 108 | 
            +
            - Appraisals
         | 
| 94 109 | 
             
            - CHANGELOG.md
         | 
| 95 110 | 
             
            - Gemfile
         | 
| 96 111 | 
             
            - LICENSE
         | 
| @@ -100,6 +115,9 @@ files: | |
| 100 115 | 
             
            - bin/wheneverize
         | 
| 101 116 | 
             
            - gemfiles/activesupport4.1.gemfile
         | 
| 102 117 | 
             
            - gemfiles/activesupport4.2.gemfile
         | 
| 118 | 
            +
            - gemfiles/activesupport5.0.gemfile
         | 
| 119 | 
            +
            - gemfiles/activesupport5.1.gemfile
         | 
| 120 | 
            +
            - gemfiles/activesupport5.2.gemfile
         | 
| 103 121 | 
             
            - lib/whenever.rb
         | 
| 104 122 | 
             
            - lib/whenever/capistrano.rb
         | 
| 105 123 | 
             
            - lib/whenever/capistrano/v2/hooks.rb
         | 
| @@ -151,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 151 169 | 
             
                  version: '0'
         | 
| 152 170 | 
             
            requirements: []
         | 
| 153 171 | 
             
            rubyforge_project: 
         | 
| 154 | 
            -
            rubygems_version: 2. | 
| 172 | 
            +
            rubygems_version: 2.7.3
         | 
| 155 173 | 
             
            signing_key: 
         | 
| 156 174 | 
             
            specification_version: 4
         | 
| 157 175 | 
             
            summary: Cron jobs in ruby.
         |