rrule 0.3.1 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|