rrule 0.3.1 → 0.4.3
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/.gitignore +3 -0
- data/.rubocop.yml +28 -0
- data/.travis.yml +26 -1
- data/Appraisals +23 -0
- data/CHANGELOG.md +15 -0
- data/Gemfile +9 -0
- data/Rakefile +9 -3
- data/gemfiles/activesupport_2.3_LTS.gemfile +16 -0
- data/gemfiles/activesupport_3.gemfile +16 -0
- data/gemfiles/activesupport_4.gemfile +15 -0
- data/gemfiles/activesupport_5.gemfile +15 -0
- data/gemfiles/activesupport_6.gemfile +15 -0
- data/lib/rrule.rb +5 -0
- data/lib/rrule/context.rb +9 -7
- data/lib/rrule/filters/by_month.rb +2 -0
- data/lib/rrule/filters/by_month_day.rb +2 -0
- data/lib/rrule/filters/by_week_day.rb +5 -3
- data/lib/rrule/filters/by_week_number.rb +2 -0
- data/lib/rrule/filters/by_year_day.rb +3 -1
- data/lib/rrule/frequencies/daily.rb +2 -0
- data/lib/rrule/frequencies/frequency.rb +7 -13
- data/lib/rrule/frequencies/monthly.rb +2 -0
- data/lib/rrule/frequencies/simple_weekly.rb +14 -1
- data/lib/rrule/frequencies/weekly.rb +2 -0
- data/lib/rrule/frequencies/yearly.rb +2 -0
- data/lib/rrule/generators/all_occurrences.rb +4 -19
- data/lib/rrule/generators/by_set_position.rb +6 -15
- data/lib/rrule/generators/generator.rb +38 -0
- data/lib/rrule/rule.rb +52 -44
- data/lib/rrule/version.rb +5 -0
- data/lib/rrule/weekday.rb +4 -2
- data/rrule.gemspec +18 -11
- data/scripts/benchmark.rb +3 -1
- metadata +36 -50
- data/spec/context_spec.rb +0 -261
- data/spec/filters/by_month_day_spec.rb +0 -35
- data/spec/filters/by_month_spec.rb +0 -35
- data/spec/filters/by_week_day_spec.rb +0 -35
- data/spec/filters/by_week_number_spec.rb +0 -41
- data/spec/filters/by_year_day_spec.rb +0 -35
- data/spec/frequencies/daily_spec.rb +0 -62
- data/spec/frequencies/monthly_spec.rb +0 -63
- data/spec/frequencies/simple_weekly_spec.rb +0 -30
- data/spec/frequencies/weekly_spec.rb +0 -92
- data/spec/frequencies/yearly_spec.rb +0 -54
- data/spec/generators/all_occurrences_spec.rb +0 -44
- data/spec/generators/by_set_position_spec.rb +0 -39
- data/spec/rule_spec.rb +0 -2077
- data/spec/spec_helper.rb +0 -23
- data/spec/weekday_spec.rb +0 -34
@@ -1,9 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RRule
|
2
4
|
class SimpleWeekly < Frequency
|
3
5
|
def next_occurrences
|
6
|
+
correct_current_date_if_needed
|
4
7
|
this_occurrence = current_date
|
5
8
|
@current_date += context.options[:interval].weeks
|
6
|
-
|
9
|
+
generator.process_timeset(this_occurrence, timeset)
|
10
|
+
end
|
11
|
+
|
12
|
+
def correct_current_date_if_needed
|
13
|
+
target_wday = if context.options[:byweekday].present?
|
14
|
+
context.options[:byweekday].first.index
|
15
|
+
else
|
16
|
+
context.dtstart.wday
|
17
|
+
end
|
18
|
+
|
19
|
+
@current_date += 1.day while @current_date.wday != target_wday
|
7
20
|
end
|
8
21
|
end
|
9
22
|
end
|
@@ -1,25 +1,10 @@
|
|
1
|
-
|
2
|
-
class AllOccurrences
|
3
|
-
attr_reader :context
|
4
|
-
|
5
|
-
def initialize(context)
|
6
|
-
@context = context
|
7
|
-
end
|
1
|
+
# frozen_string_literal: true
|
8
2
|
|
3
|
+
module RRule
|
4
|
+
class AllOccurrences < Generator
|
9
5
|
def combine_dates_and_times(dayset, timeset)
|
10
6
|
dayset.compact.map { |i| context.first_day_of_year + i }.flat_map do |date|
|
11
|
-
timeset
|
12
|
-
Time.use_zone(context.tz) do
|
13
|
-
Time.zone.local(
|
14
|
-
date.year,
|
15
|
-
date.month,
|
16
|
-
date.day,
|
17
|
-
time[:hour],
|
18
|
-
time[:minute],
|
19
|
-
time[:second]
|
20
|
-
)
|
21
|
-
end
|
22
|
-
end
|
7
|
+
process_timeset(date, timeset)
|
23
8
|
end
|
24
9
|
end
|
25
10
|
end
|
@@ -1,26 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RRule
|
2
|
-
class BySetPosition
|
3
|
-
attr_reader :by_set_positions
|
4
|
+
class BySetPosition < Generator
|
5
|
+
attr_reader :by_set_positions
|
4
6
|
|
5
7
|
def initialize(by_set_positions, context)
|
6
8
|
@by_set_positions = by_set_positions
|
7
|
-
|
9
|
+
super(context)
|
8
10
|
end
|
9
11
|
|
10
12
|
def combine_dates_and_times(dayset, timeset)
|
11
13
|
valid_dates(dayset).flat_map do |date|
|
12
|
-
timeset
|
13
|
-
Time.use_zone(context.tz) do
|
14
|
-
Time.zone.local(
|
15
|
-
date.year,
|
16
|
-
date.month,
|
17
|
-
date.day,
|
18
|
-
time[:hour],
|
19
|
-
time[:minute],
|
20
|
-
time[:second]
|
21
|
-
)
|
22
|
-
end
|
23
|
-
end
|
14
|
+
process_timeset(date, timeset)
|
24
15
|
end
|
25
16
|
end
|
26
17
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RRule
|
4
|
+
class Generator
|
5
|
+
attr_reader :context
|
6
|
+
|
7
|
+
def initialize(context)
|
8
|
+
@context = context
|
9
|
+
end
|
10
|
+
|
11
|
+
def process_timeset(date, timeset)
|
12
|
+
return [date] if timeset.blank?
|
13
|
+
|
14
|
+
timeset.map do |time|
|
15
|
+
hour_sets = (
|
16
|
+
Array.wrap(time[:hour]).sort.map do |hour|
|
17
|
+
Array.wrap(time[:minute]).sort.map do |minute|
|
18
|
+
Array.wrap(time[:second]).sort.map{ |second| [hour, minute, second]}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
).flatten(2)
|
22
|
+
|
23
|
+
Time.use_zone(context.tz) do
|
24
|
+
hour_sets.map do |hour, minute, second|
|
25
|
+
Time.zone.local(
|
26
|
+
date.year,
|
27
|
+
date.month,
|
28
|
+
date.day,
|
29
|
+
hour,
|
30
|
+
minute,
|
31
|
+
second
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end.flatten
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/rrule/rule.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RRule
|
2
4
|
class Rule
|
3
5
|
include Enumerable
|
@@ -5,10 +7,11 @@ module RRule
|
|
5
7
|
attr_reader :dtstart, :tz, :exdate
|
6
8
|
|
7
9
|
def initialize(rrule, dtstart: Time.now, tzid: 'UTC', exdate: [], max_year: nil)
|
8
|
-
@dtstart = floor_to_seconds(dtstart).in_time_zone(tzid)
|
9
10
|
@tz = tzid
|
11
|
+
@dtstart = dtstart.is_a?(Date) ? dtstart : floor_to_seconds_in_timezone(dtstart)
|
10
12
|
@exdate = exdate
|
11
13
|
@options = parse_options(rrule)
|
14
|
+
@frequency_type = Frequency.for_options(options)
|
12
15
|
@max_year = max_year || 9999
|
13
16
|
@max_date = DateTime.new(@max_year)
|
14
17
|
end
|
@@ -18,54 +21,47 @@ module RRule
|
|
18
21
|
end
|
19
22
|
|
20
23
|
def between(start_date, end_date, limit: nil)
|
21
|
-
floored_start_date =
|
22
|
-
floored_end_date =
|
23
|
-
all_until(end_date: floored_end_date, limit: limit).reject { |instance| instance < floored_start_date }
|
24
|
+
floored_start_date = floor_to_seconds_in_timezone(start_date)
|
25
|
+
floored_end_date = floor_to_seconds_in_timezone(end_date)
|
26
|
+
all_until(start_date: floored_start_date, end_date: floored_end_date, limit: limit).reject { |instance| instance < floored_start_date }
|
24
27
|
end
|
25
28
|
|
26
|
-
def each
|
27
|
-
|
29
|
+
def each(floor_date: nil)
|
30
|
+
# If we have a COUNT or INTERVAL option, we have to start at dtstart, because those are relative to dtstart
|
31
|
+
floor_date = dtstart if count_or_interval_present? || floor_date.nil? || dtstart > floor_date
|
28
32
|
|
33
|
+
return enum_for(:each, floor_date: floor_date) unless block_given?
|
29
34
|
context = Context.new(options, dtstart, tz)
|
30
|
-
context.rebuild(
|
35
|
+
context.rebuild(floor_date.year, floor_date.month)
|
31
36
|
|
32
37
|
timeset = options[:timeset]
|
33
38
|
count = options[:count]
|
34
39
|
|
35
40
|
filters = []
|
36
|
-
if options[:bymonth]
|
37
|
-
filters.push(ByMonth.new(options[:bymonth], context))
|
38
|
-
end
|
41
|
+
filters.push(ByMonth.new(options[:bymonth], context)) if options[:bymonth]
|
39
42
|
|
40
|
-
if options[:byweekno]
|
41
|
-
filters.push(ByWeekNumber.new(options[:byweekno], context))
|
42
|
-
end
|
43
|
+
filters.push(ByWeekNumber.new(options[:byweekno], context)) if options[:byweekno]
|
43
44
|
|
44
|
-
if options[:byweekday]
|
45
|
-
filters.push(ByWeekDay.new(options[:byweekday], context))
|
46
|
-
end
|
45
|
+
filters.push(ByWeekDay.new(options[:byweekday], context)) if options[:byweekday]
|
47
46
|
|
48
|
-
if options[:byyearday]
|
49
|
-
filters.push(ByYearDay.new(options[:byyearday], context))
|
50
|
-
end
|
47
|
+
filters.push(ByYearDay.new(options[:byyearday], context)) if options[:byyearday]
|
51
48
|
|
52
|
-
if options[:bymonthday]
|
53
|
-
filters.push(ByMonthDay.new(options[:bymonthday], context))
|
54
|
-
end
|
49
|
+
filters.push(ByMonthDay.new(options[:bymonthday], context)) if options[:bymonthday]
|
55
50
|
|
56
|
-
if options[:bysetpos]
|
57
|
-
|
51
|
+
generator = if options[:bysetpos]
|
52
|
+
BySetPosition.new(options[:bysetpos], context)
|
58
53
|
else
|
59
|
-
|
54
|
+
AllOccurrences.new(context)
|
60
55
|
end
|
61
56
|
|
62
|
-
frequency = Frequency.for_options(options).new(context, filters, generator, timeset)
|
57
|
+
frequency = Frequency.for_options(options).new(context, filters, generator, timeset, start_date: floor_date)
|
63
58
|
|
64
59
|
loop do
|
65
60
|
return if frequency.current_date.year > max_year
|
66
61
|
|
67
62
|
frequency.next_occurrences.each do |this_result|
|
68
63
|
next if this_result < dtstart
|
64
|
+
next if floor_date.present? && this_result < floor_date
|
69
65
|
return if options[:until] && this_result > options[:until]
|
70
66
|
return if count && (count -= 1) < 0
|
71
67
|
yield this_result unless exdate.include?(this_result)
|
@@ -79,21 +75,21 @@ module RRule
|
|
79
75
|
|
80
76
|
private
|
81
77
|
|
82
|
-
attr_reader :options, :max_year, :max_date
|
78
|
+
attr_reader :options, :max_year, :max_date, :frequency_type
|
83
79
|
|
84
|
-
def
|
80
|
+
def floor_to_seconds_in_timezone(date)
|
85
81
|
# This removes all sub-second and floors it to the second level.
|
86
82
|
# Sub-second level calculations breaks a lot of assumptions in this
|
87
83
|
# library and rounding it may also cause unexpected inequalities.
|
88
|
-
Time.at(date.to_i)
|
84
|
+
Time.at(date.to_i).in_time_zone(tz)
|
89
85
|
end
|
90
86
|
|
91
87
|
def enumerator
|
92
88
|
@enumerator ||= to_enum
|
93
89
|
end
|
94
90
|
|
95
|
-
def all_until(end_date: max_date, limit: nil)
|
96
|
-
limit ? take(limit) : take_while { |date| date <= end_date }
|
91
|
+
def all_until(start_date: nil, end_date: max_date, limit: nil)
|
92
|
+
limit ? take(limit) : each(floor_date: start_date).take_while { |date| date <= end_date }
|
97
93
|
end
|
98
94
|
|
99
95
|
def parse_options(rule)
|
@@ -110,22 +106,30 @@ module RRule
|
|
110
106
|
i = begin
|
111
107
|
Integer(value)
|
112
108
|
rescue ArgumentError
|
113
|
-
raise InvalidRRule,
|
109
|
+
raise InvalidRRule, 'COUNT must be a non-negative integer'
|
114
110
|
end
|
115
|
-
raise InvalidRRule,
|
111
|
+
raise InvalidRRule, 'COUNT must be a non-negative integer' if i < 0
|
116
112
|
options[:count] = i
|
117
113
|
when 'UNTIL'
|
118
|
-
|
114
|
+
# The value of the UNTIL rule part MUST have the same
|
115
|
+
# value type as the "DTSTART" property.
|
116
|
+
options[:until] = @dtstart.is_a?(Date) ? Date.parse(value) : Time.parse(value)
|
119
117
|
when 'INTERVAL'
|
120
118
|
i = Integer(value) rescue 0
|
121
|
-
raise InvalidRRule,
|
119
|
+
raise InvalidRRule, 'INTERVAL must be a positive integer' unless i > 0
|
122
120
|
options[:interval] = i
|
121
|
+
when 'BYHOUR'
|
122
|
+
options[:byhour] = value.split(',').compact.map(&:to_i)
|
123
|
+
when 'BYMINUTE'
|
124
|
+
options[:byminute] = value.split(',').compact.map(&:to_i)
|
125
|
+
when 'BYSECOND'
|
126
|
+
options[:bysecond] = value.split(',').compact.map(&:to_i)
|
123
127
|
when 'BYDAY'
|
124
128
|
options[:byweekday] = value.split(',').map { |day| Weekday.parse(day) }
|
125
129
|
when 'BYSETPOS'
|
126
130
|
options[:bysetpos] = value.split(',').map(&:to_i)
|
127
131
|
when 'WKST'
|
128
|
-
options[:wkst] =
|
132
|
+
options[:wkst] = RRule::WEEKDAYS.index(value)
|
129
133
|
when 'BYMONTH'
|
130
134
|
options[:bymonth] = value.split(',').compact.map(&:to_i)
|
131
135
|
when 'BYMONTHDAY'
|
@@ -137,12 +141,10 @@ module RRule
|
|
137
141
|
end
|
138
142
|
end
|
139
143
|
|
140
|
-
|
144
|
+
unless options[:byweekno] || options[:byyearday] || options[:bymonthday] || options[:byweekday]
|
141
145
|
case options[:freq]
|
142
146
|
when 'YEARLY'
|
143
|
-
unless options[:bymonth]
|
144
|
-
options[:bymonth] = [dtstart.month]
|
145
|
-
end
|
147
|
+
options[:bymonth] = [dtstart.month] unless options[:bymonth]
|
146
148
|
options[:bymonthday] = [dtstart.day]
|
147
149
|
when 'MONTHLY'
|
148
150
|
options[:bymonthday] = [dtstart.day]
|
@@ -152,13 +154,19 @@ module RRule
|
|
152
154
|
end
|
153
155
|
end
|
154
156
|
|
155
|
-
unless options[:byweekday].nil?
|
156
|
-
options[:byweekday], options[:bynweekday] = options[:byweekday].partition { |wday| wday.ordinal.nil? }
|
157
|
-
end
|
157
|
+
options[:byweekday], options[:bynweekday] = options[:byweekday].partition { |wday| wday.ordinal.nil? } unless options[:byweekday].nil?
|
158
158
|
|
159
|
-
|
159
|
+
# The BYSECOND, BYMINUTE and BYHOUR rule parts MUST NOT be specified
|
160
|
+
# when the associated "DTSTART" property has a DATE value type.
|
161
|
+
# These rule parts MUST be ignored in RECUR value that violate the
|
162
|
+
# above requirement
|
163
|
+
options[:timeset] = [{ hour: (options[:byhour].presence || dtstart.hour), minute: (options[:byminute].presence || dtstart.min), second: (options[:bysecond].presence || dtstart.sec) }] unless dtstart.is_a?(Date)
|
160
164
|
|
161
165
|
options
|
162
166
|
end
|
167
|
+
|
168
|
+
def count_or_interval_present?
|
169
|
+
options[:count].present? || (options[:interval].present? && options[:interval] > 1)
|
170
|
+
end
|
163
171
|
end
|
164
172
|
end
|
data/lib/rrule/weekday.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RRule
|
2
4
|
class Weekday
|
3
5
|
attr_reader :index, :ordinal
|
@@ -8,8 +10,8 @@ module RRule
|
|
8
10
|
end
|
9
11
|
|
10
12
|
def self.parse(weekday)
|
11
|
-
match = /([+-]?\d)?([A-Z]{2})/.match(weekday)
|
12
|
-
index =
|
13
|
+
match = /([+-]?\d+)?([A-Z]{2})/.match(weekday)
|
14
|
+
index = RRule::WEEKDAYS.index(match[2])
|
13
15
|
ordinal = match[1] ? match[1].to_i : nil
|
14
16
|
new(index, ordinal)
|
15
17
|
end
|
data/rrule.gemspec
CHANGED
@@ -1,20 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'rrule/version'
|
6
|
+
|
1
7
|
Gem::Specification.new do |s|
|
2
8
|
s.name = 'rrule'
|
3
|
-
s.version =
|
4
|
-
s.date = '2018-04-24'
|
9
|
+
s.version = RRule::VERSION
|
5
10
|
s.summary = 'RRule expansion'
|
6
11
|
s.description = 'A gem for expanding dates according to the RRule specification'
|
7
12
|
s.authors = ['Ryan Mitchell']
|
8
13
|
s.email = 'rmitchell@squareup.com'
|
9
|
-
s.files = `git ls-files`.split(
|
10
|
-
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
14
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
11
15
|
s.require_paths = ['lib']
|
12
|
-
s.homepage = '
|
16
|
+
s.homepage = 'https://rubygems.org/gems/rrule'
|
17
|
+
s.metadata = {
|
18
|
+
'homepage' => 'https://rubygems.org/gems/rrule',
|
19
|
+
'source_code_uri' => 'https://github.com/square/ruby-rrule',
|
20
|
+
'bug_tracker_uri' => 'https://github.com/square/ruby-rrule/issues',
|
21
|
+
'changelog_uri' => 'https://github.com/square/ruby-rrule/blob/master/CHANGELOG.md'
|
22
|
+
}
|
13
23
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
s.required_ruby_version = '>= 1.9.2'
|
18
|
-
s.add_runtime_dependency 'activesupport', '>= 4.1'
|
19
|
-
s.add_development_dependency 'rspec', '~> 3.4'
|
24
|
+
s.required_ruby_version = '>= 2.6.0'
|
25
|
+
s.add_runtime_dependency 'activesupport', '>= 2.3', '< 7'
|
26
|
+
s.add_development_dependency 'appraisal'
|
20
27
|
end
|
data/scripts/benchmark.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rrule
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Mitchell
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,28 +16,34 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.3'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '7'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
29
|
+
version: '2.3'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '7'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
34
|
+
name: appraisal
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
39
|
+
version: '0'
|
34
40
|
type: :development
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- - "
|
44
|
+
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
46
|
+
version: '0'
|
41
47
|
description: A gem for expanding dates according to the RRule specification
|
42
48
|
email: rmitchell@squareup.com
|
43
49
|
executables: []
|
@@ -45,13 +51,20 @@ extensions: []
|
|
45
51
|
extra_rdoc_files: []
|
46
52
|
files:
|
47
53
|
- ".gitignore"
|
54
|
+
- ".rubocop.yml"
|
48
55
|
- ".travis.yml"
|
56
|
+
- Appraisals
|
49
57
|
- CHANGELOG.md
|
50
58
|
- CONTRIBUTING.md
|
51
59
|
- Gemfile
|
52
60
|
- LICENSE.txt
|
53
61
|
- README.md
|
54
62
|
- Rakefile
|
63
|
+
- gemfiles/activesupport_2.3_LTS.gemfile
|
64
|
+
- gemfiles/activesupport_3.gemfile
|
65
|
+
- gemfiles/activesupport_4.gemfile
|
66
|
+
- gemfiles/activesupport_5.gemfile
|
67
|
+
- gemfiles/activesupport_6.gemfile
|
55
68
|
- lib/rrule.rb
|
56
69
|
- lib/rrule/context.rb
|
57
70
|
- lib/rrule/filters/by_month.rb
|
@@ -67,31 +80,21 @@ files:
|
|
67
80
|
- lib/rrule/frequencies/yearly.rb
|
68
81
|
- lib/rrule/generators/all_occurrences.rb
|
69
82
|
- lib/rrule/generators/by_set_position.rb
|
83
|
+
- lib/rrule/generators/generator.rb
|
70
84
|
- lib/rrule/rule.rb
|
85
|
+
- lib/rrule/version.rb
|
71
86
|
- lib/rrule/weekday.rb
|
72
87
|
- rrule.gemspec
|
73
88
|
- scripts/benchmark.rb
|
74
89
|
- scripts/history.txt
|
75
|
-
|
76
|
-
- spec/filters/by_month_day_spec.rb
|
77
|
-
- spec/filters/by_month_spec.rb
|
78
|
-
- spec/filters/by_week_day_spec.rb
|
79
|
-
- spec/filters/by_week_number_spec.rb
|
80
|
-
- spec/filters/by_year_day_spec.rb
|
81
|
-
- spec/frequencies/daily_spec.rb
|
82
|
-
- spec/frequencies/monthly_spec.rb
|
83
|
-
- spec/frequencies/simple_weekly_spec.rb
|
84
|
-
- spec/frequencies/weekly_spec.rb
|
85
|
-
- spec/frequencies/yearly_spec.rb
|
86
|
-
- spec/generators/all_occurrences_spec.rb
|
87
|
-
- spec/generators/by_set_position_spec.rb
|
88
|
-
- spec/rule_spec.rb
|
89
|
-
- spec/spec_helper.rb
|
90
|
-
- spec/weekday_spec.rb
|
91
|
-
homepage: http://rubygems.org/gems/rrule
|
90
|
+
homepage: https://rubygems.org/gems/rrule
|
92
91
|
licenses: []
|
93
|
-
metadata:
|
94
|
-
|
92
|
+
metadata:
|
93
|
+
homepage: https://rubygems.org/gems/rrule
|
94
|
+
source_code_uri: https://github.com/square/ruby-rrule
|
95
|
+
bug_tracker_uri: https://github.com/square/ruby-rrule/issues
|
96
|
+
changelog_uri: https://github.com/square/ruby-rrule/blob/master/CHANGELOG.md
|
97
|
+
post_install_message:
|
95
98
|
rdoc_options: []
|
96
99
|
require_paths:
|
97
100
|
- lib
|
@@ -99,32 +102,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
102
|
requirements:
|
100
103
|
- - ">="
|
101
104
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
105
|
+
version: 2.6.0
|
103
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
107
|
requirements:
|
105
108
|
- - ">="
|
106
109
|
- !ruby/object:Gem::Version
|
107
110
|
version: '0'
|
108
111
|
requirements: []
|
109
|
-
|
110
|
-
|
111
|
-
signing_key:
|
112
|
+
rubygems_version: 3.1.4
|
113
|
+
signing_key:
|
112
114
|
specification_version: 4
|
113
115
|
summary: RRule expansion
|
114
|
-
test_files:
|
115
|
-
- spec/context_spec.rb
|
116
|
-
- spec/filters/by_month_day_spec.rb
|
117
|
-
- spec/filters/by_month_spec.rb
|
118
|
-
- spec/filters/by_week_day_spec.rb
|
119
|
-
- spec/filters/by_week_number_spec.rb
|
120
|
-
- spec/filters/by_year_day_spec.rb
|
121
|
-
- spec/frequencies/daily_spec.rb
|
122
|
-
- spec/frequencies/monthly_spec.rb
|
123
|
-
- spec/frequencies/simple_weekly_spec.rb
|
124
|
-
- spec/frequencies/weekly_spec.rb
|
125
|
-
- spec/frequencies/yearly_spec.rb
|
126
|
-
- spec/generators/all_occurrences_spec.rb
|
127
|
-
- spec/generators/by_set_position_spec.rb
|
128
|
-
- spec/rule_spec.rb
|
129
|
-
- spec/spec_helper.rb
|
130
|
-
- spec/weekday_spec.rb
|
116
|
+
test_files: []
|