repeatable 1.0.0 → 1.1.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 +4 -4
- data/.github/workflows/ci.yml +72 -0
- data/CHANGELOG.md +18 -1
- data/CODE_OF_CONDUCT.md +128 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +24 -5
- data/README.md +27 -8
- data/Rakefile +5 -1
- data/lib/repeatable/conversions.rb +5 -1
- data/lib/repeatable/expression/base.rb +21 -11
- data/lib/repeatable/expression/biweekly.rb +14 -6
- data/lib/repeatable/expression/date.rb +10 -6
- data/lib/repeatable/expression/day_in_month.rb +4 -0
- data/lib/repeatable/expression/difference.rb +14 -5
- data/lib/repeatable/expression/exact_date.rb +5 -1
- data/lib/repeatable/expression/intersection.rb +6 -2
- data/lib/repeatable/expression/range_in_year.rb +33 -9
- data/lib/repeatable/expression/set.rb +15 -5
- data/lib/repeatable/expression/union.rb +5 -1
- data/lib/repeatable/expression/weekday.rb +4 -0
- data/lib/repeatable/expression/weekday_in_month.rb +14 -1
- data/lib/repeatable/expression.rb +1 -0
- data/lib/repeatable/last_date_of_month.rb +4 -0
- data/lib/repeatable/parse_error.rb +1 -0
- data/lib/repeatable/parser.rb +7 -1
- data/lib/repeatable/schedule.rb +18 -4
- data/lib/repeatable/types.rb +6 -0
- data/lib/repeatable/version.rb +2 -1
- data/lib/repeatable.rb +4 -0
- data/rbi/repeatable.rbi +310 -0
- data/repeatable.gemspec +3 -0
- data/sorbet/config +3 -0
- data/sorbet/rbi/gems/ast.rbi +49 -0
- data/sorbet/rbi/gems/coderay.rbi +285 -0
- data/sorbet/rbi/gems/commander.rbi +197 -0
- data/sorbet/rbi/gems/docile.rbi +36 -0
- data/sorbet/rbi/gems/highline.rbi +577 -0
- data/sorbet/rbi/gems/method_source.rbi +64 -0
- data/sorbet/rbi/gems/parallel.rbi +83 -0
- data/sorbet/rbi/gems/parlour.rbi +840 -0
- data/sorbet/rbi/gems/parser.rbi +1950 -0
- data/sorbet/rbi/gems/pry.rbi +1898 -0
- data/sorbet/rbi/gems/rainbow.rbi +118 -0
- data/sorbet/rbi/gems/rake.rbi +646 -0
- data/sorbet/rbi/gems/regexp_parser.rbi +926 -0
- data/sorbet/rbi/gems/repeatable.rbi +13 -0
- data/sorbet/rbi/gems/rexml.rbi +583 -0
- data/sorbet/rbi/gems/rspec-core.rbi +1919 -0
- data/sorbet/rbi/gems/rspec-expectations.rbi +1150 -0
- data/sorbet/rbi/gems/rspec-mocks.rbi +1100 -0
- data/sorbet/rbi/gems/rspec-support.rbi +280 -0
- data/sorbet/rbi/gems/rspec.rbi +15 -0
- data/sorbet/rbi/gems/rubocop-ast.rbi +1356 -0
- data/sorbet/rbi/gems/rubocop-performance.rbi +487 -0
- data/sorbet/rbi/gems/rubocop.rbi +7923 -0
- data/sorbet/rbi/gems/ruby-progressbar.rbi +304 -0
- data/sorbet/rbi/gems/simplecov-html.rbi +35 -0
- data/sorbet/rbi/gems/simplecov.rbi +419 -0
- data/sorbet/rbi/gems/simplecov_json_formatter.rbi +47 -0
- data/sorbet/rbi/gems/standard.rbi +130 -0
- data/sorbet/rbi/gems/unicode-display_width.rbi +20 -0
- data/sorbet/rbi/hidden-definitions/errors.txt +4273 -0
- data/sorbet/rbi/hidden-definitions/hidden.rbi +9013 -0
- data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +276 -0
- data/sorbet/rbi/sorbet-typed/lib/rake/all/rake.rbi +645 -0
- data/sorbet/rbi/sorbet-typed/lib/rspec-core/all/rspec-core.rbi +24 -0
- data/sorbet/rbi/sorbet-typed/lib/rubocop/>=1.8/rubocop.rbi +12 -0
- data/sorbet/rbi/sorbet-typed/lib/rubocop-performance/~>1.6/rubocop-performance.rbi +149 -0
- metadata +61 -6
- data/.travis.yml +0 -18
@@ -1,11 +1,15 @@
|
|
1
|
+
# typed: strict
|
1
2
|
module Repeatable
|
2
3
|
module Expression
|
3
4
|
class Intersection < Set
|
5
|
+
sig { params(elements: T.any(Expression::Base, T::Array[Expression::Base])).void }
|
4
6
|
def initialize(*elements)
|
5
|
-
|
6
|
-
|
7
|
+
other_intersections, not_intersections = elements.partition { |e| e.is_a?(self.class) }
|
8
|
+
other_intersections = T.cast(other_intersections, T::Array[Expression::Intersection])
|
9
|
+
super(other_intersections.flat_map(&:elements).concat(not_intersections))
|
7
10
|
end
|
8
11
|
|
12
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
9
13
|
def include?(date)
|
10
14
|
elements.all? { |e| e.include?(date) }
|
11
15
|
end
|
@@ -1,6 +1,15 @@
|
|
1
|
+
# typed: strict
|
1
2
|
module Repeatable
|
2
3
|
module Expression
|
3
4
|
class RangeInYear < Date
|
5
|
+
sig do
|
6
|
+
params(
|
7
|
+
start_month: Integer,
|
8
|
+
end_month: Integer,
|
9
|
+
start_day: Integer,
|
10
|
+
end_day: Integer
|
11
|
+
).void
|
12
|
+
end
|
4
13
|
def initialize(start_month:, end_month: start_month, start_day: 0, end_day: 0)
|
5
14
|
@start_month = start_month
|
6
15
|
@end_month = end_month
|
@@ -8,6 +17,7 @@ module Repeatable
|
|
8
17
|
@end_day = end_day
|
9
18
|
end
|
10
19
|
|
20
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
11
21
|
def include?(date)
|
12
22
|
return true if months_include?(date)
|
13
23
|
|
@@ -18,29 +28,43 @@ module Repeatable
|
|
18
28
|
end
|
19
29
|
end
|
20
30
|
|
21
|
-
def to_h
|
22
|
-
args = {start_month: start_month}
|
23
|
-
args[:end_month] = end_month unless end_month == start_month
|
24
|
-
args[:start_day] = start_day unless start_day.zero?
|
25
|
-
args[:end_day] = end_day unless end_day.zero?
|
26
|
-
{range_in_year: args}
|
27
|
-
end
|
28
|
-
|
29
31
|
private
|
30
32
|
|
31
|
-
|
33
|
+
sig { returns(Integer) }
|
34
|
+
attr_reader :start_month
|
35
|
+
|
36
|
+
sig { returns(Integer) }
|
37
|
+
attr_reader :end_month
|
32
38
|
|
39
|
+
sig { returns(Integer) }
|
40
|
+
attr_reader :start_day
|
41
|
+
|
42
|
+
sig { returns(Integer) }
|
43
|
+
attr_reader :end_day
|
44
|
+
|
45
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
33
46
|
def months_include?(date)
|
34
47
|
date.month > start_month && date.month < end_month
|
35
48
|
end
|
36
49
|
|
50
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
37
51
|
def start_month_include?(date)
|
38
52
|
date.month == start_month && (start_day == 0 || date.day >= start_day)
|
39
53
|
end
|
40
54
|
|
55
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
41
56
|
def end_month_include?(date)
|
42
57
|
date.month == end_month && (end_day == 0 || date.day <= end_day)
|
43
58
|
end
|
59
|
+
|
60
|
+
sig { override.returns(T::Hash[Symbol, Integer]) }
|
61
|
+
def hash_value
|
62
|
+
args = {start_month: start_month}
|
63
|
+
args[:end_month] = end_month unless end_month == start_month
|
64
|
+
args[:start_day] = start_day unless start_day.zero?
|
65
|
+
args[:end_day] = end_day unless end_day.zero?
|
66
|
+
args
|
67
|
+
end
|
44
68
|
end
|
45
69
|
end
|
46
70
|
end
|
@@ -1,26 +1,36 @@
|
|
1
|
+
# typed: strict
|
1
2
|
module Repeatable
|
2
3
|
module Expression
|
3
4
|
class Set < Base
|
5
|
+
abstract!
|
6
|
+
|
7
|
+
sig { returns(T::Array[Expression::Base]) }
|
4
8
|
attr_reader :elements
|
5
9
|
|
10
|
+
sig { params(elements: T.any(Expression::Base, T::Array[Expression::Base])).void }
|
6
11
|
def initialize(*elements)
|
7
|
-
@elements = elements.flatten.uniq
|
12
|
+
@elements = T.let(elements.flatten.uniq, T::Array[Expression::Base])
|
8
13
|
end
|
9
14
|
|
15
|
+
sig { params(element: T.untyped).returns(Repeatable::Expression::Set) }
|
10
16
|
def <<(element)
|
11
17
|
elements << element unless elements.include?(element)
|
12
18
|
self
|
13
19
|
end
|
14
20
|
|
15
|
-
|
16
|
-
Hash[hash_key, elements.map(&:to_h)]
|
17
|
-
end
|
18
|
-
|
21
|
+
sig { params(other: Object).returns(T::Boolean) }
|
19
22
|
def ==(other)
|
20
23
|
other.is_a?(self.class) &&
|
21
24
|
elements.size == other.elements.size &&
|
22
25
|
other.elements.all? { |e| elements.include?(e) }
|
23
26
|
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
sig { override.returns(T::Array[Types::SymbolHash]) }
|
31
|
+
def hash_value
|
32
|
+
elements.map(&:to_h)
|
33
|
+
end
|
24
34
|
end
|
25
35
|
end
|
26
36
|
end
|
@@ -1,11 +1,15 @@
|
|
1
|
+
# typed: strict
|
1
2
|
module Repeatable
|
2
3
|
module Expression
|
3
4
|
class Union < Set
|
5
|
+
sig { params(elements: T.any(Expression::Base, T::Array[Expression::Base])).void }
|
4
6
|
def initialize(*elements)
|
5
7
|
other_unions, not_unions = elements.partition { |e| e.is_a?(self.class) }
|
6
|
-
|
8
|
+
other_unions = T.cast(other_unions, T::Array[Expression::Union])
|
9
|
+
super(other_unions.flat_map(&:elements).concat(not_unions))
|
7
10
|
end
|
8
11
|
|
12
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
9
13
|
def include?(date)
|
10
14
|
elements.any? { |e| e.include?(date) }
|
11
15
|
end
|
@@ -1,16 +1,20 @@
|
|
1
|
+
# typed: strict
|
1
2
|
module Repeatable
|
2
3
|
module Expression
|
3
4
|
class Weekday < Date
|
5
|
+
sig { params(weekday: Integer).void }
|
4
6
|
def initialize(weekday:)
|
5
7
|
@weekday = weekday
|
6
8
|
end
|
7
9
|
|
10
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
8
11
|
def include?(date)
|
9
12
|
date.wday == weekday
|
10
13
|
end
|
11
14
|
|
12
15
|
private
|
13
16
|
|
17
|
+
sig { returns(Integer) }
|
14
18
|
attr_reader :weekday
|
15
19
|
end
|
16
20
|
end
|
@@ -1,25 +1,34 @@
|
|
1
|
+
# typed: strict
|
1
2
|
module Repeatable
|
2
3
|
module Expression
|
3
4
|
class WeekdayInMonth < Date
|
4
5
|
include LastDateOfMonth
|
5
6
|
|
7
|
+
sig { params(weekday: Integer, count: Integer).void }
|
6
8
|
def initialize(weekday:, count:)
|
7
9
|
@weekday = weekday
|
8
10
|
@count = count
|
9
11
|
end
|
10
12
|
|
13
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
11
14
|
def include?(date)
|
12
15
|
day_matches?(date) && week_matches?(date)
|
13
16
|
end
|
14
17
|
|
15
18
|
private
|
16
19
|
|
17
|
-
|
20
|
+
sig { returns(Integer) }
|
21
|
+
attr_reader :weekday
|
18
22
|
|
23
|
+
sig { returns(Integer) }
|
24
|
+
attr_reader :count
|
25
|
+
|
26
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
19
27
|
def day_matches?(date)
|
20
28
|
date.wday == weekday
|
21
29
|
end
|
22
30
|
|
31
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
23
32
|
def week_matches?(date)
|
24
33
|
if negative_count?
|
25
34
|
week_from_end(date) == count
|
@@ -28,18 +37,22 @@ module Repeatable
|
|
28
37
|
end
|
29
38
|
end
|
30
39
|
|
40
|
+
sig { params(date: ::Date).returns(Integer) }
|
31
41
|
def week_from_beginning(date)
|
32
42
|
week_in_month(date.day - 1)
|
33
43
|
end
|
34
44
|
|
45
|
+
sig { params(date: ::Date).returns(Integer) }
|
35
46
|
def week_from_end(date)
|
36
47
|
-week_in_month(last_date_of_month(date).day - date.day)
|
37
48
|
end
|
38
49
|
|
50
|
+
sig { params(zero_indexed_day: Integer).returns(Integer) }
|
39
51
|
def week_in_month(zero_indexed_day)
|
40
52
|
(zero_indexed_day / 7) + 1
|
41
53
|
end
|
42
54
|
|
55
|
+
sig { returns(T::Boolean) }
|
43
56
|
def negative_count?
|
44
57
|
count < 0
|
45
58
|
end
|
data/lib/repeatable/parser.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
|
+
# typed: false
|
1
2
|
module Repeatable
|
2
3
|
class Parser
|
4
|
+
extend T::Sig
|
5
|
+
|
6
|
+
sig { params(hash: T::Hash[T.any(String, Symbol), T.untyped]).void }
|
3
7
|
def initialize(hash)
|
4
8
|
@hash = hash
|
5
9
|
end
|
6
10
|
|
11
|
+
sig { params(hash: T::Hash[T.any(String, Symbol), T.untyped]).returns(Expression::Base) }
|
7
12
|
def self.call(hash)
|
8
13
|
new(hash).call
|
9
14
|
end
|
10
15
|
|
16
|
+
sig { returns(Expression::Base) }
|
11
17
|
def call
|
12
18
|
build_expression(hash)
|
13
19
|
end
|
@@ -50,7 +56,7 @@ module Repeatable
|
|
50
56
|
def expression_klass(string)
|
51
57
|
camel_cased_string = string
|
52
58
|
.capitalize
|
53
|
-
.gsub(/(?:_)(?<word>[a-z\d]+)/i) { Regexp.last_match[:word]
|
59
|
+
.gsub(/(?:_)(?<word>[a-z\d]+)/i) { T.must(Regexp.last_match)[:word]&.capitalize }
|
54
60
|
Repeatable::Expression.const_get(camel_cased_string)
|
55
61
|
rescue NameError => e
|
56
62
|
raise if e.name && e.name.to_s != camel_cased_string
|
data/lib/repeatable/schedule.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
+
# typed: strict
|
1
2
|
module Repeatable
|
2
3
|
class Schedule
|
4
|
+
extend T::Sig
|
5
|
+
|
6
|
+
sig { params(arg: Object).void }
|
3
7
|
def initialize(arg)
|
4
8
|
case arg
|
5
9
|
when Repeatable::Expression::Base
|
6
|
-
@expression = arg
|
10
|
+
@expression = T.let(arg, Expression::Base)
|
7
11
|
when Hash
|
8
12
|
@expression = Parser.call(arg)
|
9
13
|
else
|
@@ -11,6 +15,7 @@ module Repeatable
|
|
11
15
|
end
|
12
16
|
end
|
13
17
|
|
18
|
+
sig { params(start_date: Object, end_date: Object).returns(T::Array[::Date]) }
|
14
19
|
def occurrences(start_date, end_date)
|
15
20
|
start_date = Conversions::Date(start_date)
|
16
21
|
end_date = Conversions::Date(end_date)
|
@@ -20,34 +25,43 @@ module Repeatable
|
|
20
25
|
(start_date..end_date).select { |date| include?(date) }
|
21
26
|
end
|
22
27
|
|
28
|
+
sig { params(start_date: Object, include_start: T::Boolean, limit: Integer).returns(T.nilable(::Date)) }
|
23
29
|
def next_occurrence(start_date = Date.today, include_start: false, limit: 36525)
|
24
30
|
date = Conversions::Date(start_date)
|
25
31
|
|
26
32
|
return date if include_start && include?(date)
|
27
33
|
|
28
|
-
|
34
|
+
result = T.let(nil, T.nilable(Date))
|
35
|
+
1.step(limit) do |i|
|
29
36
|
date = date.next_day
|
30
37
|
|
31
|
-
|
32
|
-
|
38
|
+
if include?(date)
|
39
|
+
result = date
|
40
|
+
break
|
41
|
+
end
|
33
42
|
end
|
43
|
+
result
|
34
44
|
end
|
35
45
|
|
46
|
+
sig { params(date: Object).returns(T::Boolean) }
|
36
47
|
def include?(date = Date.today)
|
37
48
|
date = Conversions::Date(date)
|
38
49
|
expression.include?(date)
|
39
50
|
end
|
40
51
|
|
52
|
+
sig { returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
41
53
|
def to_h
|
42
54
|
expression.to_h
|
43
55
|
end
|
44
56
|
|
57
|
+
sig { params(other: Object).returns(T::Boolean) }
|
45
58
|
def ==(other)
|
46
59
|
other.is_a?(self.class) && expression == other.expression
|
47
60
|
end
|
48
61
|
|
49
62
|
protected
|
50
63
|
|
64
|
+
sig { returns(Expression::Base) }
|
51
65
|
attr_reader :expression
|
52
66
|
end
|
53
67
|
end
|
data/lib/repeatable/version.rb
CHANGED
data/lib/repeatable.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
# typed: strict
|
1
2
|
require "date"
|
3
|
+
require "sorbet-runtime"
|
2
4
|
|
3
5
|
require "repeatable/version"
|
4
6
|
|
@@ -7,6 +9,8 @@ end
|
|
7
9
|
|
8
10
|
require "repeatable/parse_error"
|
9
11
|
|
12
|
+
require "repeatable/types"
|
13
|
+
|
10
14
|
require "repeatable/conversions"
|
11
15
|
require "repeatable/last_date_of_month"
|
12
16
|
|
data/rbi/repeatable.rbi
ADDED
@@ -0,0 +1,310 @@
|
|
1
|
+
# typed: strong
|
2
|
+
module Repeatable
|
3
|
+
VERSION = "1.1.0"
|
4
|
+
|
5
|
+
module Conversions
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
sig { params(arg: Object).returns(::Date) }
|
9
|
+
def Date(arg); end
|
10
|
+
end
|
11
|
+
|
12
|
+
module LastDateOfMonth
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
sig { params(date: ::Date).returns(::Date) }
|
16
|
+
def last_date_of_month(date); end
|
17
|
+
end
|
18
|
+
|
19
|
+
class ParseError < StandardError
|
20
|
+
end
|
21
|
+
|
22
|
+
class Parser
|
23
|
+
extend T::Sig
|
24
|
+
|
25
|
+
sig { params(hash: T::Hash[T.any(String, Symbol), T.untyped]).void }
|
26
|
+
def initialize(hash); end
|
27
|
+
|
28
|
+
sig { params(hash: T::Hash[T.any(String, Symbol), T.untyped]).returns(Expression::Base) }
|
29
|
+
def self.call(hash); end
|
30
|
+
|
31
|
+
sig { returns(Expression::Base) }
|
32
|
+
def call; end
|
33
|
+
|
34
|
+
sig { returns(T.untyped) }
|
35
|
+
attr_reader :hash
|
36
|
+
|
37
|
+
sig { params(hash: T.untyped).returns(T.untyped) }
|
38
|
+
def build_expression(hash); end
|
39
|
+
|
40
|
+
sig { params(key: T.untyped, value: T.untyped).returns(T.untyped) }
|
41
|
+
def expression_for(key, value); end
|
42
|
+
|
43
|
+
sig { params(hash: T.untyped).returns(T.untyped) }
|
44
|
+
def symbolize_keys(hash); end
|
45
|
+
|
46
|
+
sig { params(string: T.untyped).returns(T.untyped) }
|
47
|
+
def expression_klass(string); end
|
48
|
+
end
|
49
|
+
|
50
|
+
class Schedule
|
51
|
+
extend T::Sig
|
52
|
+
|
53
|
+
sig { params(arg: Object).void }
|
54
|
+
def initialize(arg); end
|
55
|
+
|
56
|
+
sig { params(start_date: Object, end_date: Object).returns(T::Array[::Date]) }
|
57
|
+
def occurrences(start_date, end_date); end
|
58
|
+
|
59
|
+
sig { params(start_date: Object, include_start: T::Boolean, limit: Integer).returns(T.nilable(::Date)) }
|
60
|
+
def next_occurrence(start_date = Date.today, include_start: false, limit: 36525); end
|
61
|
+
|
62
|
+
sig { params(date: Object).returns(T::Boolean) }
|
63
|
+
def include?(date = Date.today); end
|
64
|
+
|
65
|
+
sig { returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
66
|
+
def to_h; end
|
67
|
+
|
68
|
+
sig { params(other: Object).returns(T::Boolean) }
|
69
|
+
def ==(other); end
|
70
|
+
|
71
|
+
sig { returns(Expression::Base) }
|
72
|
+
attr_reader :expression
|
73
|
+
end
|
74
|
+
|
75
|
+
module Types
|
76
|
+
SymbolHash = T.type_alias { T::Hash[Symbol, T.untyped] }
|
77
|
+
end
|
78
|
+
|
79
|
+
module Expression
|
80
|
+
class Base
|
81
|
+
abstract!
|
82
|
+
|
83
|
+
extend T::Sig
|
84
|
+
extend T::Helpers
|
85
|
+
|
86
|
+
sig { params(other: Object).returns(T::Boolean) }
|
87
|
+
def self.===(other); end
|
88
|
+
|
89
|
+
sig { abstract.params(date: ::Date).returns(T::Boolean) }
|
90
|
+
def include?(date); end
|
91
|
+
|
92
|
+
sig { returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
93
|
+
def to_h; end
|
94
|
+
|
95
|
+
sig { params(other: Expression::Base).returns(Expression::Union) }
|
96
|
+
def union(other); end
|
97
|
+
|
98
|
+
sig { params(other: Expression::Base).returns(Expression::Intersection) }
|
99
|
+
def intersection(other); end
|
100
|
+
|
101
|
+
sig { params(other: T.untyped).returns(Expression::Difference) }
|
102
|
+
def difference(other); end
|
103
|
+
|
104
|
+
sig { returns(Symbol) }
|
105
|
+
def hash_key; end
|
106
|
+
|
107
|
+
sig { abstract.returns(T.any(Types::SymbolHash, T::Array[Types::SymbolHash])) }
|
108
|
+
def hash_value; end
|
109
|
+
end
|
110
|
+
|
111
|
+
class Biweekly < Date
|
112
|
+
sig { params(weekday: Integer, start_after: Object).void }
|
113
|
+
def initialize(weekday:, start_after: ::Date.today); end
|
114
|
+
|
115
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
116
|
+
def include?(date); end
|
117
|
+
|
118
|
+
sig { returns(Integer) }
|
119
|
+
attr_reader :weekday
|
120
|
+
|
121
|
+
sig { returns(::Date) }
|
122
|
+
attr_reader :start_after
|
123
|
+
|
124
|
+
sig { returns(::Date) }
|
125
|
+
attr_reader :_first_occurrence
|
126
|
+
|
127
|
+
sig { returns(::Date) }
|
128
|
+
def find_first_occurrence; end
|
129
|
+
end
|
130
|
+
|
131
|
+
class Date < Base
|
132
|
+
abstract!
|
133
|
+
|
134
|
+
sig { params(other: Object).returns(T::Boolean) }
|
135
|
+
def ==(other); end
|
136
|
+
|
137
|
+
sig { returns(Integer) }
|
138
|
+
def hash; end
|
139
|
+
|
140
|
+
sig { returns(Types::SymbolHash) }
|
141
|
+
def attributes; end
|
142
|
+
|
143
|
+
sig { params(value: BasicObject).returns(T.untyped) }
|
144
|
+
def normalize_attribute_value(value); end
|
145
|
+
end
|
146
|
+
|
147
|
+
class DayInMonth < Date
|
148
|
+
include LastDateOfMonth
|
149
|
+
|
150
|
+
sig { params(day: Integer).void }
|
151
|
+
def initialize(day:); end
|
152
|
+
|
153
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
154
|
+
def include?(date); end
|
155
|
+
|
156
|
+
sig { returns(Integer) }
|
157
|
+
attr_reader :day
|
158
|
+
end
|
159
|
+
|
160
|
+
class Difference < Base
|
161
|
+
sig { params(included: Expression::Base, excluded: Expression::Base).void }
|
162
|
+
def initialize(included:, excluded:); end
|
163
|
+
|
164
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
165
|
+
def include?(date); end
|
166
|
+
|
167
|
+
sig { params(other: Object).returns(T::Boolean) }
|
168
|
+
def ==(other); end
|
169
|
+
|
170
|
+
sig { returns(Expression::Base) }
|
171
|
+
attr_reader :included
|
172
|
+
|
173
|
+
sig { returns(Expression::Base) }
|
174
|
+
attr_reader :excluded
|
175
|
+
|
176
|
+
sig { override.returns(Types::SymbolHash) }
|
177
|
+
def hash_value; end
|
178
|
+
end
|
179
|
+
|
180
|
+
class ExactDate < Date
|
181
|
+
sig { params(date: Object).void }
|
182
|
+
def initialize(date:); end
|
183
|
+
|
184
|
+
sig { override.params(other_date: ::Date).returns(T::Boolean) }
|
185
|
+
def include?(other_date); end
|
186
|
+
|
187
|
+
sig { returns(::Date) }
|
188
|
+
attr_reader :date
|
189
|
+
end
|
190
|
+
|
191
|
+
class Intersection < Set
|
192
|
+
sig { params(elements: T.any(Expression::Base, T::Array[Expression::Base])).void }
|
193
|
+
def initialize(*elements); end
|
194
|
+
|
195
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
196
|
+
def include?(date); end
|
197
|
+
end
|
198
|
+
|
199
|
+
class RangeInYear < Date
|
200
|
+
sig do
|
201
|
+
params(
|
202
|
+
start_month: Integer,
|
203
|
+
end_month: Integer,
|
204
|
+
start_day: Integer,
|
205
|
+
end_day: Integer
|
206
|
+
).void
|
207
|
+
end
|
208
|
+
def initialize(start_month:, end_month: start_month, start_day: 0, end_day: 0); end
|
209
|
+
|
210
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
211
|
+
def include?(date); end
|
212
|
+
|
213
|
+
sig { returns(Integer) }
|
214
|
+
attr_reader :start_month
|
215
|
+
|
216
|
+
sig { returns(Integer) }
|
217
|
+
attr_reader :end_month
|
218
|
+
|
219
|
+
sig { returns(Integer) }
|
220
|
+
attr_reader :start_day
|
221
|
+
|
222
|
+
sig { returns(Integer) }
|
223
|
+
attr_reader :end_day
|
224
|
+
|
225
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
226
|
+
def months_include?(date); end
|
227
|
+
|
228
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
229
|
+
def start_month_include?(date); end
|
230
|
+
|
231
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
232
|
+
def end_month_include?(date); end
|
233
|
+
|
234
|
+
sig { override.returns(T::Hash[Symbol, Integer]) }
|
235
|
+
def hash_value; end
|
236
|
+
end
|
237
|
+
|
238
|
+
class Set < Base
|
239
|
+
abstract!
|
240
|
+
|
241
|
+
sig { returns(T::Array[Expression::Base]) }
|
242
|
+
attr_reader :elements
|
243
|
+
|
244
|
+
sig { params(elements: T.any(Expression::Base, T::Array[Expression::Base])).void }
|
245
|
+
def initialize(*elements); end
|
246
|
+
|
247
|
+
sig { params(element: T.untyped).returns(Repeatable::Expression::Set) }
|
248
|
+
def <<(element); end
|
249
|
+
|
250
|
+
sig { params(other: Object).returns(T::Boolean) }
|
251
|
+
def ==(other); end
|
252
|
+
|
253
|
+
sig { override.returns(T::Array[Types::SymbolHash]) }
|
254
|
+
def hash_value; end
|
255
|
+
end
|
256
|
+
|
257
|
+
class Union < Set
|
258
|
+
sig { params(elements: T.any(Expression::Base, T::Array[Expression::Base])).void }
|
259
|
+
def initialize(*elements); end
|
260
|
+
|
261
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
262
|
+
def include?(date); end
|
263
|
+
end
|
264
|
+
|
265
|
+
class Weekday < Date
|
266
|
+
sig { params(weekday: Integer).void }
|
267
|
+
def initialize(weekday:); end
|
268
|
+
|
269
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
270
|
+
def include?(date); end
|
271
|
+
|
272
|
+
sig { returns(Integer) }
|
273
|
+
attr_reader :weekday
|
274
|
+
end
|
275
|
+
|
276
|
+
class WeekdayInMonth < Date
|
277
|
+
include LastDateOfMonth
|
278
|
+
|
279
|
+
sig { params(weekday: Integer, count: Integer).void }
|
280
|
+
def initialize(weekday:, count:); end
|
281
|
+
|
282
|
+
sig { override.params(date: ::Date).returns(T::Boolean) }
|
283
|
+
def include?(date); end
|
284
|
+
|
285
|
+
sig { returns(Integer) }
|
286
|
+
attr_reader :weekday
|
287
|
+
|
288
|
+
sig { returns(Integer) }
|
289
|
+
attr_reader :count
|
290
|
+
|
291
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
292
|
+
def day_matches?(date); end
|
293
|
+
|
294
|
+
sig { params(date: ::Date).returns(T::Boolean) }
|
295
|
+
def week_matches?(date); end
|
296
|
+
|
297
|
+
sig { params(date: ::Date).returns(Integer) }
|
298
|
+
def week_from_beginning(date); end
|
299
|
+
|
300
|
+
sig { params(date: ::Date).returns(Integer) }
|
301
|
+
def week_from_end(date); end
|
302
|
+
|
303
|
+
sig { params(zero_indexed_day: Integer).returns(Integer) }
|
304
|
+
def week_in_month(zero_indexed_day); end
|
305
|
+
|
306
|
+
sig { returns(T::Boolean) }
|
307
|
+
def negative_count?; end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|