chrono 0.4.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0d252cd6e02cae1bbb12c6a310402e15de067158
4
- data.tar.gz: a8f41a68a6e85e74a05edc049cab7593f51e89e0
2
+ SHA256:
3
+ metadata.gz: 946e2892180dd9ae752e3883cd0d85de26697b48303dc46d6ef9083958faccaa
4
+ data.tar.gz: b7a7dae085130625666abe7ebcdf40e50fa5ebe040b1cea101410458fbd165ae
5
5
  SHA512:
6
- metadata.gz: 6e7cf6afc4ad77ade83fde6f5fea043dcfaa91167905cd2165e872840264f57395e93dbe22e11003568537b9998e90f42d0f066741b036b6dfac0fe57ce17f04
7
- data.tar.gz: 29f662fa1ea7aa28d9e613e1bc73c80b6869662e003e52f92f5250e4c3da5c574b59d0829c4d16f478054db219f44723dcf405083d8c51435c31f811d6cec050
6
+ metadata.gz: 45245d747c9904409700776623301c7f2ab6b4c26f93a078f7b4d84221fa6549d441a51a939ead6f0ded5b979617b8c48f21027a594769f75faecd2d17190458
7
+ data.tar.gz: b148ea5a87ff74823c69d642f9b8e5af0630b2a0720ac92abf51a49b6856347b45fa79381d33acfe1404d8c5ba39024c230394731285923ebf898f06ed367ca5
@@ -0,0 +1,22 @@
1
+ name: test
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - master
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ ruby:
15
+ - 2.7.2
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: ${{ matrix.ruby }}
21
+ bundler-cache: true
22
+ - run: bundle exec rake
data/CHANGELOG.md CHANGED
@@ -1,31 +1,83 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.6.0
6
+
7
+ ### Added
8
+
9
+ - Add last-day-of-month syntax (thx @itkrt2y).
10
+
11
+ ## 0.5.0
12
+
13
+ ### Added
14
+
15
+ - Add support for activesupport 7 (thx @unasuke).
16
+
17
+ ### Changed
18
+
19
+ - Drop support of activesupport below 5.2.
20
+
1
21
  ## 0.4.0
2
22
 
3
- - Raise ArgumentError on inifinite loop detected (thx @nurse)
23
+ ### Changed
24
+
25
+ - Raise ArgumentError on inifinite loop detected (thx @nurse).
4
26
 
5
27
  ## 0.3.0
6
- - Fix bug on day and wday specs
28
+
29
+ ### Fixed
30
+
31
+ - Fix bug on day and wday specs.
7
32
 
8
33
  ## 0.2.0
9
- - Add more strict validations
10
- - Support some alias field names
34
+
35
+ ### Added
36
+
37
+ - Support some alias field names.
38
+
39
+ ### Changed
40
+
41
+ - Add more strict validations.
11
42
 
12
43
  ## 0.1.0
13
- - Raise errors on invalid fields (thx @eagletmt)
44
+
45
+ ### Changed
46
+
47
+ - Raise errors on invalid fields (thx @eagletmt).
14
48
 
15
49
  ## 0.0.6
16
- - Support ActiveSupport 3 and 4
50
+
51
+ ### Changed
52
+
53
+ - Support ActiveSupport 3 and 4.
17
54
 
18
55
  ## 0.0.5
19
- - Fix missing version dependency on ActiveSupport 4
56
+
57
+ ### Changed
58
+
59
+ - Fix missing version dependency on ActiveSupport 4.
20
60
 
21
61
  ## 0.0.4
22
- - Add extra 1sec sleep to adjust to exact minute
62
+
63
+ ### Changed
64
+
65
+ - Add extra 1sec sleep to adjust to exact minute.
23
66
 
24
67
  ## 0.0.3
25
- - Schedule more accurate second
68
+
69
+ ### Changed
70
+
71
+ - Schedule more accurate second.
26
72
 
27
73
  ## 0.0.2
28
- - Chrono::Trigger was added
74
+
75
+ ### Added
76
+
77
+ - Chrono::Trigger was added.
29
78
 
30
79
  ## 0.0.1
31
- - Chrono::Iterator was added
80
+
81
+ ### Added
82
+
83
+ - Chrono::Iterator was added.
data/README.md CHANGED
@@ -1,4 +1,7 @@
1
- # Chrono [![Build Status](https://travis-ci.org/r7kamura/chrono.png)](https://travis-ci.org/r7kamura/chrono) [![Code Climate](https://codeclimate.com/github/r7kamura/chrono.png)](https://codeclimate.com/github/r7kamura/chrono) [![Code Climate](https://codeclimate.com/github/r7kamura/chrono/coverage.png)](https://codeclimate.com/github/r7kamura/chrono)
1
+ # Chrono
2
+
3
+ [![test](https://github.com/r7kamura/chrono/actions/workflows/test.yml/badge.svg)](https://github.com/r7kamura/chrono/actions/workflows/test.yml)
4
+ [![Gem Version](https://badge.fury.io/rb/chrono.svg)](https://rubygems.org/gems/chrono)
2
5
 
3
6
  Provides a chain of logics about chronology.
4
7
 
data/chrono.gemspec CHANGED
@@ -16,10 +16,8 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ["lib"]
18
18
 
19
- spec.add_dependency "activesupport"
19
+ spec.add_dependency "activesupport", '>= 5.2'
20
20
  spec.add_development_dependency "bundler"
21
- spec.add_development_dependency "codeclimate-test-reporter"
22
21
  spec.add_development_dependency "rake"
23
22
  spec.add_development_dependency "rspec", "~> 3.4.0"
24
- spec.add_development_dependency "simplecov"
25
23
  end
@@ -21,7 +21,7 @@ module Chrono
21
21
  fields.map(&:to_a).flatten.uniq.sort
22
22
  else
23
23
  validate!
24
- lower.step(upper, step).to_a.sort
24
+ wildcard? ? [] : lower.step(upper, step).to_a.sort
25
25
  end
26
26
  end
27
27
 
@@ -31,11 +31,21 @@ module Chrono
31
31
  source.gsub("*", "#{range.first}-#{range.last}")
32
32
  end
33
33
 
34
+ def wildcards
35
+ []
36
+ end
37
+
38
+ def wildcard?
39
+ wildcards.include?(source)
40
+ end
41
+
34
42
  def validate!
35
43
  unless match_data
36
44
  raise InvalidField.new('Unparsable field', source)
37
45
  end
38
46
 
47
+ return true if wildcard?
48
+
39
49
  if lower < range.begin || range.end < upper
40
50
  raise InvalidField.new('The field is out-of-range', source)
41
51
  end
@@ -68,7 +78,11 @@ module Chrono
68
78
  end
69
79
 
70
80
  def pattern
71
- %r<\A(\d+)(?:-(\d+))?(?:/(\d+))?\z>
81
+ ptn = %r<\A(\d+)(?:-(\d+))?(?:/(\d+))?\z>
82
+ if wildcards.any?
83
+ ptn = Regexp.union(ptn, *wildcards.map { |w| /\A#{w}\z/ })
84
+ end
85
+ ptn
72
86
  end
73
87
 
74
88
  def match_data
@@ -6,6 +6,10 @@ module Chrono
6
6
  def range
7
7
  1..31
8
8
  end
9
+
10
+ def wildcards
11
+ ['L']
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -1,13 +1,5 @@
1
+ require "active_support"
1
2
  require "active_support/core_ext/numeric/time"
2
- require "active_support/version"
3
-
4
- if ActiveSupport::VERSION::MAJOR >= 4
5
- require "active_support/core_ext/date"
6
- require "active_support/core_ext/time"
7
- else
8
- require "active_support/core_ext/date/calculations"
9
- require "active_support/core_ext/time/calculations"
10
- end
11
3
 
12
4
  module Chrono
13
5
  class NextTime
@@ -56,7 +48,9 @@ module Chrono
56
48
  end
57
49
 
58
50
  def scheduled_in_this_day?
59
- if schedule.days?
51
+ if schedule.last_day_of_month?
52
+ time.day == time.end_of_month.day
53
+ elsif schedule.days?
60
54
  if schedule.wdays?
61
55
  schedule.days.include?(time.day) || schedule.wdays.include?(time.wday)
62
56
  else
@@ -46,6 +46,10 @@ module Chrono
46
46
  fields[4] != '*'
47
47
  end
48
48
 
49
+ def last_day_of_month?
50
+ fields[2] == 'L'
51
+ end
52
+
49
53
  private
50
54
 
51
55
  def fields
@@ -1,3 +1,3 @@
1
1
  module Chrono
2
- VERSION = "0.4.0"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -25,6 +25,8 @@ describe Chrono::Iterator do
25
25
  "2000-01-01 00:00:00", "2000-01-03 00:00:00", "0 0 1,15 * 1",
26
26
  "2000-01-01 00:00:00", "2000-01-05 00:00:00", "0 0 5,15,25 * 5",
27
27
  "2000-02-29 00:00:01", "2004-02-29 00:00:00", "0 0 29 2 *",
28
+ "2000-01-01 00:00:00", "2000-01-31 00:00:00", "0 0 L * *",
29
+ "2000-01-31 00:00:00", "2000-02-29 00:00:00", "0 0 L * *",
28
30
  ].each_slice(3) do |from, to, source|
29
31
  it "ticks #{from} to #{to} by #{source}" do
30
32
  now = Time.parse(from)
@@ -124,6 +124,10 @@ describe Chrono::Schedule do
124
124
  let (:source){ '0 0 32 * *' }
125
125
  it { expect{subject}.to raise_error(Chrono::Fields::Base::InvalidField) }
126
126
  end
127
+ context 'last day of the month' do
128
+ let (:source){ '0 0 L * *' }
129
+ it { is_expected.to eq [] }
130
+ end
127
131
  end
128
132
 
129
133
  describe '#months' do
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,3 @@
1
- require "simplecov"
2
- SimpleCov.start
3
-
4
- if ENV["CI"]
5
- require "codeclimate-test-reporter"
6
- CodeClimate::TestReporter.start
7
- end
8
-
9
1
  $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
10
2
  require "chrono"
11
3
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chrono
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-10 00:00:00.000000000 Z
11
+ date: 2023-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '5.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '5.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: codeclimate-test-reporter
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,29 +66,15 @@ dependencies:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
68
  version: 3.4.0
83
- - !ruby/object:Gem::Dependency
84
- name: simplecov
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'
97
- description:
69
+ description:
98
70
  email:
99
71
  - r7kamura@gmail.com
100
72
  executables: []
101
73
  extensions: []
102
74
  extra_rdoc_files: []
103
75
  files:
76
+ - ".github/workflows/test.yml"
104
77
  - ".gitignore"
105
- - ".travis.yml"
106
78
  - CHANGELOG.md
107
79
  - Gemfile
108
80
  - LICENSE.txt
@@ -129,7 +101,7 @@ homepage: https://github.com/r7kamura/chrono
129
101
  licenses:
130
102
  - MIT
131
103
  metadata: {}
132
- post_install_message:
104
+ post_install_message:
133
105
  rdoc_options: []
134
106
  require_paths:
135
107
  - lib
@@ -144,9 +116,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
116
  - !ruby/object:Gem::Version
145
117
  version: '0'
146
118
  requirements: []
147
- rubyforge_project:
148
- rubygems_version: 2.6.11
149
- signing_key:
119
+ rubygems_version: 3.3.26
120
+ signing_key:
150
121
  specification_version: 4
151
122
  summary: Provides a chain of logics about chronology.
152
123
  test_files:
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- rvm:
2
- - 1.9.3
3
- - 2.0.0
4
- branches:
5
- only:
6
- - master
7
- env:
8
- global:
9
- secure: bzOuKK2sEcdWchOeiS5VgKIj8R6ZFZLtmlJ3aENdYAXcrrVW+1XKAGQlT3NxH5G2EloV8nNPOX8oNXbYjs81AvEEdjZGRMYUnC59GbvtL+2zQgG77yq5xI/UXypuBQIzUBhzrwFMImSAltKsdlbsrVUtl7x8Arg1HajcMbEsg9Y=