kalendor 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +34 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +2 -0
- data/kalendor.gemspec +25 -0
- data/lib/kalendor.rb +9 -0
- data/lib/kalendor/annual.rb +15 -0
- data/lib/kalendor/date_helper.rb +85 -0
- data/lib/kalendor/date_list.rb +9 -0
- data/lib/kalendor/factory.rb +57 -0
- data/lib/kalendor/instance.rb +4 -0
- data/lib/kalendor/instance/annual.rb +10 -0
- data/lib/kalendor/instance/composite.rb +7 -0
- data/lib/kalendor/instance/date_list.rb +11 -0
- data/lib/kalendor/instance/intersect.rb +6 -0
- data/lib/kalendor/instance/interval.rb +10 -0
- data/lib/kalendor/instance/month.rb +10 -0
- data/lib/kalendor/instance/store.rb +12 -0
- data/lib/kalendor/instance/subtract.rb +10 -0
- data/lib/kalendor/instance/union.rb +6 -0
- data/lib/kalendor/instance/weekday.rb +9 -0
- data/lib/kalendor/intersect.rb +6 -0
- data/lib/kalendor/interval.rb +8 -0
- data/lib/kalendor/month.rb +18 -0
- data/lib/kalendor/named.rb +7 -0
- data/lib/kalendor/subtract.rb +11 -0
- data/lib/kalendor/union.rb +6 -0
- data/lib/kalendor/version.rb +3 -0
- data/lib/kalendor/weekday.rb +21 -0
- data/spec/annual_spec.rb +35 -0
- data/spec/date_list_spec.rb +22 -0
- data/spec/date_spec.rb +245 -0
- data/spec/examples.txt +34 -0
- data/spec/intersect_spec.rb +20 -0
- data/spec/interval_spec.rb +48 -0
- data/spec/month_spec.rb +57 -0
- data/spec/spec_helper.rb +87 -0
- data/spec/subtract_spec.rb +26 -0
- data/spec/union_spec.rb +27 -0
- data/spec/weekday_spec.rb +27 -0
- data/todo.txt +98 -0
- metadata +168 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'kalendor'
|
2
|
+
require 'kalendor/instance/interval'
|
3
|
+
|
4
|
+
RSpec.describe Kalendor::Interval do
|
5
|
+
let(:interval) {
|
6
|
+
Kalendor.build { interval "2016-06-01", "2016-06-30" }
|
7
|
+
}
|
8
|
+
|
9
|
+
it "generates nothing when entirely before" do
|
10
|
+
f = date("2000-01-01")
|
11
|
+
u = date("2000-12-31")
|
12
|
+
expect(interval.get_dates(f, u).to_a).to eq []
|
13
|
+
end
|
14
|
+
|
15
|
+
it "generates some dates when overlapping before" do
|
16
|
+
f = date("2000-01-01")
|
17
|
+
u = date("2016-06-08")
|
18
|
+
expected = (1..8).map { |d| date("2016-06-0#{d}") }
|
19
|
+
expect(interval.get_dates(f, u).to_a).to eq expected
|
20
|
+
end
|
21
|
+
|
22
|
+
it "generates some dates when overlapping inside" do
|
23
|
+
f = date("2016-06-11")
|
24
|
+
u = date("2016-06-21")
|
25
|
+
expected = (11..21).map { |d| date("2016-06-#{d}") }
|
26
|
+
expect(interval.get_dates(f, u).to_a).to eq expected
|
27
|
+
end
|
28
|
+
|
29
|
+
it "generates all dates when overlapping outside" do
|
30
|
+
f = date("2016-01-01")
|
31
|
+
u = date("2016-12-31")
|
32
|
+
expected = (1..30).map { |d| date("2016-06-#{d}") }
|
33
|
+
expect(interval.get_dates(f, u).to_a).to eq expected
|
34
|
+
end
|
35
|
+
|
36
|
+
it "generates some dates when overlapping after" do
|
37
|
+
f = date("2016-06-21")
|
38
|
+
u = date("2016-12-31")
|
39
|
+
expected = (21..30).map { |d| date("2016-06-#{d}") }
|
40
|
+
expect(interval.get_dates(f, u).to_a).to eq expected
|
41
|
+
end
|
42
|
+
|
43
|
+
it "generates no dates when entirely after" do
|
44
|
+
f = date("2016-07-01")
|
45
|
+
u = date("2016-12-31")
|
46
|
+
expect(interval.get_dates(f, u).to_a).to eq []
|
47
|
+
end
|
48
|
+
end
|
data/spec/month_spec.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'kalendor'
|
2
|
+
require 'kalendor/instance/intersect'
|
3
|
+
require 'kalendor/instance/month'
|
4
|
+
require 'kalendor/instance/weekday'
|
5
|
+
|
6
|
+
RSpec.describe Kalendor::Month do
|
7
|
+
let(:november) { Kalendor.build { month 11 } }
|
8
|
+
|
9
|
+
it "generates nothing when entirely before" do
|
10
|
+
f = date("2000-01-01")
|
11
|
+
u = date("2000-10-31")
|
12
|
+
expect(november.get_dates(f, u).to_a).to eq []
|
13
|
+
end
|
14
|
+
|
15
|
+
it "generates some dates when overlapping before" do
|
16
|
+
f = date("2016-10-01")
|
17
|
+
u = date("2016-11-10")
|
18
|
+
expected = (1..10).map { |d| date("2016-11-#{d}") }
|
19
|
+
expect(november.get_dates(f, u).to_a).to eq expected
|
20
|
+
end
|
21
|
+
|
22
|
+
it "generates some dates when overlapping inside" do
|
23
|
+
f = date("2016-11-13")
|
24
|
+
u = date("2016-11-18")
|
25
|
+
expected = (13..18).map { |d| date("2016-11-#{d}") }
|
26
|
+
expect(november.get_dates(f, u).to_a).to eq expected
|
27
|
+
end
|
28
|
+
|
29
|
+
it "generates all dates when overlapping outside" do
|
30
|
+
f = date("2016-10-01")
|
31
|
+
u = date("2016-12-31")
|
32
|
+
expected = (1..30).map { |d| date("2016-11-#{d}") }
|
33
|
+
expect(november.get_dates(f, u).to_a).to eq expected
|
34
|
+
end
|
35
|
+
|
36
|
+
it "generates some dates when overlapping after" do
|
37
|
+
f = date("2016-11-21")
|
38
|
+
u = date("2016-12-31")
|
39
|
+
expected = (21..30).map { |d| date("2016-11-#{d}") }
|
40
|
+
expect(november.get_dates(f, u).to_a).to eq expected
|
41
|
+
end
|
42
|
+
|
43
|
+
it "generates no dates when entirely after" do
|
44
|
+
f = date("2016-12-01")
|
45
|
+
u = date("2017-10-31")
|
46
|
+
expect(november.get_dates(f, u).to_a).to eq []
|
47
|
+
end
|
48
|
+
|
49
|
+
it "finds the last monday of november each year" do
|
50
|
+
last_mon_nov = Kalendor.build { intersect month(11), weekday(1, -1) }
|
51
|
+
f = date("2000-01-01")
|
52
|
+
u = date("2020-12-31")
|
53
|
+
yd = (2000..2020).to_a.zip [27,26,25,24,29,28,27,26,24,30,29,28,26,25,24,30,28,27,26,25,30]
|
54
|
+
expected = yd.map { |y,d| date("#{y}-11-#{d}") }
|
55
|
+
expect(last_mon_nov.get_dates(f, u).to_a).to eq expected
|
56
|
+
end
|
57
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'kalendor'
|
2
|
+
|
3
|
+
|
4
|
+
module KalendorSpecHelper
|
5
|
+
def date str ; Date.parse(str) ; end
|
6
|
+
end
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
# rspec-expectations config goes here. You can use an alternate
|
10
|
+
# assertion/expectation library such as wrong or the stdlib/minitest
|
11
|
+
# assertions if you prefer.
|
12
|
+
config.expect_with :rspec do |expectations|
|
13
|
+
# This option will default to `true` in RSpec 4. It makes the `description`
|
14
|
+
# and `failure_message` of custom matchers include text for helper methods
|
15
|
+
# defined using `chain`, e.g.:
|
16
|
+
# be_bigger_than(2).and_smaller_than(4).description
|
17
|
+
# # => "be bigger than 2 and smaller than 4"
|
18
|
+
# ...rather than:
|
19
|
+
# # => "be bigger than 2"
|
20
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
21
|
+
end
|
22
|
+
|
23
|
+
config.include KalendorSpecHelper
|
24
|
+
|
25
|
+
# rspec-mocks config goes here. You can use an alternate test double
|
26
|
+
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
27
|
+
config.mock_with :rspec do |mocks|
|
28
|
+
# Prevents you from mocking or stubbing a method that does not exist on
|
29
|
+
# a real object. This is generally recommended, and will default to
|
30
|
+
# `true` in RSpec 4.
|
31
|
+
mocks.verify_partial_doubles = true
|
32
|
+
end
|
33
|
+
|
34
|
+
# The settings below are suggested to provide a good initial experience
|
35
|
+
# with RSpec, but feel free to customize to your heart's content.
|
36
|
+
begin
|
37
|
+
# These two settings work together to allow you to limit a spec run
|
38
|
+
# to individual examples or groups you care about by tagging them with
|
39
|
+
# `:focus` metadata. When nothing is tagged with `:focus`, all examples
|
40
|
+
# get run.
|
41
|
+
config.filter_run :focus
|
42
|
+
config.run_all_when_everything_filtered = true
|
43
|
+
|
44
|
+
# Allows RSpec to persist some state between runs in order to support
|
45
|
+
# the `--only-failures` and `--next-failure` CLI options. We recommend
|
46
|
+
# you configure your source control system to ignore this file.
|
47
|
+
config.example_status_persistence_file_path = "spec/examples.txt"
|
48
|
+
|
49
|
+
# Limits the available syntax to the non-monkey patched syntax that is
|
50
|
+
# recommended. For more details, see:
|
51
|
+
# - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
|
52
|
+
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
53
|
+
# - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
|
54
|
+
config.disable_monkey_patching!
|
55
|
+
|
56
|
+
# This setting enables warnings. It's recommended, but in some cases may
|
57
|
+
# be too noisy due to issues in dependencies.
|
58
|
+
config.warnings = true
|
59
|
+
|
60
|
+
# Many RSpec users commonly either run the entire suite or an individual
|
61
|
+
# file, and it's useful to allow more verbose output when running an
|
62
|
+
# individual spec file.
|
63
|
+
if config.files_to_run.one?
|
64
|
+
# Use the documentation formatter for detailed output,
|
65
|
+
# unless a formatter has already been configured
|
66
|
+
# (e.g. via a command-line flag).
|
67
|
+
config.default_formatter = 'doc'
|
68
|
+
end
|
69
|
+
|
70
|
+
# Print the 10 slowest examples and example groups at the
|
71
|
+
# end of the spec run, to help surface which specs are running
|
72
|
+
# particularly slow.
|
73
|
+
config.profile_examples = 10
|
74
|
+
|
75
|
+
# Run specs in random order to surface order dependencies. If you find an
|
76
|
+
# order dependency and want to debug it, you can fix the order by providing
|
77
|
+
# the seed, which is printed after each run.
|
78
|
+
# --seed 1234
|
79
|
+
config.order = :random
|
80
|
+
|
81
|
+
# Seed global randomization in this process using the `--seed` CLI option.
|
82
|
+
# Setting this allows you to use `--seed` to deterministically reproduce
|
83
|
+
# test failures related to randomization by passing the same `--seed` value
|
84
|
+
# as the one that triggered the failure.
|
85
|
+
Kernel.srand config.seed
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'kalendor'
|
2
|
+
require 'kalendor/instance/intersect'
|
3
|
+
require 'kalendor/instance/interval'
|
4
|
+
require 'kalendor/instance/annual'
|
5
|
+
require 'kalendor/instance/subtract'
|
6
|
+
require 'kalendor/instance/union'
|
7
|
+
require 'kalendor/instance/weekday'
|
8
|
+
|
9
|
+
RSpec.describe Kalendor::Subtract do
|
10
|
+
it "produces every weekend in summer 2016" do
|
11
|
+
summer_workdays = Kalendor.build {
|
12
|
+
subtract(interval("2016-06-01", "2016-08-31"),
|
13
|
+
union(union(weekday(6),
|
14
|
+
weekday(0)),
|
15
|
+
annual(14, 7),
|
16
|
+
interval("2016-08-12", "2016-08-28")))
|
17
|
+
}
|
18
|
+
|
19
|
+
workdays_in_jun_2016 = [1,2,3,6,7,8,9,10,13,14,15,16,17,20,21,22,23,24,27,28,29,30].map { |d| date("2016-06-#{d}") }
|
20
|
+
workdays_in_jul_2016 = [1,4,5,6,7,8,11,12,13,15,18,19,20,21,22,25,26,27,28,29 ].map { |d| date("2016-07-#{d}") } # skip 14th
|
21
|
+
workdays_in_aug_2016 = [1,2,3,4,5,8,9,10,11,29,30,31 ].map { |d| date("2016-08-#{d}") } # skip 12-28
|
22
|
+
workdays_in_summer_2016 = workdays_in_jun_2016 + workdays_in_jul_2016 + workdays_in_aug_2016
|
23
|
+
|
24
|
+
expect(summer_workdays.get_dates(date("1999-01-01"), date("2020-12-31")).to_a).to eq workdays_in_summer_2016
|
25
|
+
end
|
26
|
+
end
|
data/spec/union_spec.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'kalendor'
|
2
|
+
require 'kalendor/instance/annual'
|
3
|
+
require 'kalendor/instance/union'
|
4
|
+
require 'kalendor/instance/weekday'
|
5
|
+
|
6
|
+
RSpec.describe Kalendor::Union do
|
7
|
+
it "produces every weekend in oct - dec 2016" do
|
8
|
+
weekends = Kalendor.build { union weekday(6), weekday(7) }
|
9
|
+
|
10
|
+
weekends_in_oct_2016 = [1,2,8,9,15,16,22,23,29,30].map { |d| date("2016-10-#{d}") }
|
11
|
+
weekends_in_nov_2016 = [5,6,12,13,19,20,26,27 ].map { |d| date("2016-11-#{d}") }
|
12
|
+
weekends_in_dec_2016 = [3,4,10,11,17,18,24,25,31 ].map { |d| date("2016-12-#{d}") }
|
13
|
+
weekends_in_end_2016 = weekends_in_oct_2016 + weekends_in_nov_2016 + weekends_in_dec_2016
|
14
|
+
|
15
|
+
expect(weekends.get_dates date("2016-10-01"), date("2016-12-31")).to eq weekends_in_end_2016
|
16
|
+
end
|
17
|
+
|
18
|
+
it "produces birthdays and 5th wednesdays" do
|
19
|
+
mix = Kalendor.build { union weekday(3, 5), annual(12,3), annual(21,6), annual(8,6) }
|
20
|
+
|
21
|
+
w5 = %w{ 2015-04-29 2015-07-29 2015-09-30 2015-12-30 2016-03-30 2016-06-29 2016-08-31 2016-11-30 }
|
22
|
+
bd = %w{ 2015-03-12 2015-06-08 2015-06-21 2016-03-12 2016-06-08 2016-06-21 }
|
23
|
+
expected = (w5 + bd).map { |d| date d }.sort
|
24
|
+
|
25
|
+
expect(mix.get_dates date("2015-01-01"), date("2016-12-31")).to eq expected
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'kalendor'
|
2
|
+
require 'kalendor/instance/weekday'
|
3
|
+
|
4
|
+
RSpec.describe Kalendor::Weekday do
|
5
|
+
it "produces every tuesday in september 2016" do
|
6
|
+
weekly = Kalendor.build { weekday(2) }
|
7
|
+
tuesdays_in_sep_2016 = [6,13,20,27].map { |d| date("2016-09-#{d}") }
|
8
|
+
expect(weekly.get_dates date("2016-09-01"), date("2016-09-30")).to eq tuesdays_in_sep_2016
|
9
|
+
end
|
10
|
+
it "produces every monday in october 2016" do
|
11
|
+
weekly = Kalendor.build { weekday(1) }
|
12
|
+
mondays_in_oct_2016 = [3,10,17,24,31].map { |d| date("2016-10-#{d}") }
|
13
|
+
expect(weekly.get_dates date("2016-10-01"), date("2016-10-31")).to eq mondays_in_oct_2016
|
14
|
+
end
|
15
|
+
it "produces the second wednesday in every month of 2016" do
|
16
|
+
weekly = Kalendor.build { weekday(3, 2) }
|
17
|
+
second_weds_in_2016 = %w{ 01-13 02-10 03-09 04-13 05-11 06-08 07-13 08-10 09-14 10-12 11-09 12-14 }
|
18
|
+
second_weds_in_2016 = second_weds_in_2016.map { |d| date("2016-#{d}") }
|
19
|
+
expect(weekly.get_dates date("2016-01-01"), date("2016-12-31")).to eq second_weds_in_2016
|
20
|
+
end
|
21
|
+
it "produces the 3rd-last thursday in every month of 2015" do
|
22
|
+
weekly = Kalendor.build { weekday(4, -3) }
|
23
|
+
l3_thu_2015 = %w{ 01-15 02-12 03-12 04-16 05-14 06-11 07-16 08-13 09-10 10-15 11-12 12-17 }
|
24
|
+
l3_thu_2015 = l3_thu_2015.map { |d| date("2015-#{d}") }
|
25
|
+
expect(weekly.get_dates date("2015-01-01"), date("2015-12-31")).to eq l3_thu_2015
|
26
|
+
end
|
27
|
+
end
|
data/todo.txt
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
Generators:
|
2
|
+
|
3
|
+
A generator is an object that generates a sequence of dates between a given start and end date.
|
4
|
+
|
5
|
+
Examples of generators:
|
6
|
+
|
7
|
+
"Monday" # every monday
|
8
|
+
">2004-03-12<" # the 12th of march, 2004
|
9
|
+
"2004-03-12< <2005-03-11" # every day from the 12th of march, 2004 until the 11th of march, 2005
|
10
|
+
"Monday 2004-01-01< <2004-12-31" # every monday from the 1st of january, 2004 until the 31st of december, 2004
|
11
|
+
"UNION Saturday Sunday" # weekends
|
12
|
+
"2004-01-01< <2004-12-31 (NOT (UNION (Saturday) (Sunday)))" # every non-weekend day in 2004
|
13
|
+
"Tuesday/2" # second tuesday of every month
|
14
|
+
"Tuesday/-1" # last tuesday of every month
|
15
|
+
"14 July" # 14th of July every year
|
16
|
+
|
17
|
+
|
18
|
+
Generator::Base
|
19
|
+
name
|
20
|
+
type
|
21
|
+
first_day
|
22
|
+
last_day
|
23
|
+
days_of_week # array of String mon,tue,wed,thu,fri,sat,sun
|
24
|
+
weeks_of_month # array of Integer -5,-4,-3,-2,-1,0,1,2,3,4,5 (0 = every week)
|
25
|
+
repeat_number # nonzero positive integer
|
26
|
+
repeat_kind # one of day|week|month|year
|
27
|
+
|
28
|
+
has_many schedule_combinations (Union, Intersection and Not types only)
|
29
|
+
|
30
|
+
def generate(from_date, until_date) ...
|
31
|
+
|
32
|
+
module Generator::DateRange < Generator::Base
|
33
|
+
# attrs first_day, last_day, repeat_interval_number, repeat_interval_size
|
34
|
+
# def list_of_dates(from, until) -> return every Date matching constraints from first_day to last_day within from..until
|
35
|
+
|
36
|
+
module Generator::Weekday < Generator::Base
|
37
|
+
# attrs day_of_week, nth_of_month
|
38
|
+
# day_of_week is in range 0..6
|
39
|
+
# nth_of_month is in range -5..4 (-5 = 5th last ... -1 = last, 0 = every, 1 = 1st ... 3 = 3rd, 4 = 4th, 5 = 5th)
|
40
|
+
# def list_of_dates(from, until) -> return every Date matching constraints from first_day to last_day within from..until
|
41
|
+
|
42
|
+
module Generator::Birthday < Generator::Base
|
43
|
+
# attr date (year is ignored)
|
44
|
+
|
45
|
+
module Generator::Union < Generator::Base
|
46
|
+
# attr list of generators
|
47
|
+
|
48
|
+
module Generator::Intersection < Generator::Base
|
49
|
+
# attr list of generators
|
50
|
+
|
51
|
+
module Generator::Not < Generator::Base
|
52
|
+
# attr generator
|
53
|
+
|
54
|
+
|
55
|
+
ScheduleComposition
|
56
|
+
owner
|
57
|
+
schedule
|
58
|
+
|
59
|
+
module Generator::NamedSchedule < Generator::Base
|
60
|
+
name
|
61
|
+
generator
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
Course
|
66
|
+
course_start_date
|
67
|
+
course_finish_date
|
68
|
+
restrict_calendar_id
|
69
|
+
exclude_calendar_id
|
70
|
+
|
71
|
+
|
72
|
+
Group
|
73
|
+
def schedule
|
74
|
+
s.exclude(academic_year, s.union(wednesdays, weekends, holidays))
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# not directly required for course_series for now (required indirectly via restrict or exclude)
|
79
|
+
days : ( ) mon ( ) tue ( ) wed ( ) thu ( ) fri ( ) sat ( ) sun
|
80
|
+
of month : (x) every week ( ) 1st week of month ( ) 2nd week of month ( ) 3rd week of month ( ) last week of month
|
81
|
+
repeat every : _N_ _________v [days|weeks|months|years]
|
82
|
+
|
83
|
+
NamedSchedule
|
84
|
+
[add a repeating date] [add a specific date] [add a weekday]
|
85
|
+
- build weekday generator
|
86
|
+
effect : ( ) include ( ) restrict ( ) exclude
|
87
|
+
days : ( ) mon ( ) tue ( ) wed ( ) thu ( ) fri ( ) sat ( ) sun
|
88
|
+
of month : (x) every week ( ) 1st week of month ( ) 2nd week of month ( ) 3rd week of month ( ) last week of month
|
89
|
+
- build repeating generator
|
90
|
+
effect : ( ) include ( ) restrict ( ) exclude
|
91
|
+
date : ______________
|
92
|
+
repeat every : _N_ _________v [days|weeks|months|years]
|
93
|
+
- build specific generator
|
94
|
+
effect : ( ) include ( ) restrict ( ) exclude
|
95
|
+
date : ______________
|
96
|
+
|
97
|
+
|
98
|
+
.
|
metadata
ADDED
@@ -0,0 +1,168 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kalendor
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Conan Dalton
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aduki
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.9'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec_numbering_formatter
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Utility classes for generating sets of dates
|
84
|
+
email:
|
85
|
+
- conan@conandalton.net
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- Gemfile
|
93
|
+
- MIT-LICENSE.txt
|
94
|
+
- README.md
|
95
|
+
- Rakefile
|
96
|
+
- kalendor.gemspec
|
97
|
+
- lib/kalendor.rb
|
98
|
+
- lib/kalendor/annual.rb
|
99
|
+
- lib/kalendor/date_helper.rb
|
100
|
+
- lib/kalendor/date_list.rb
|
101
|
+
- lib/kalendor/factory.rb
|
102
|
+
- lib/kalendor/instance.rb
|
103
|
+
- lib/kalendor/instance/annual.rb
|
104
|
+
- lib/kalendor/instance/composite.rb
|
105
|
+
- lib/kalendor/instance/date_list.rb
|
106
|
+
- lib/kalendor/instance/intersect.rb
|
107
|
+
- lib/kalendor/instance/interval.rb
|
108
|
+
- lib/kalendor/instance/month.rb
|
109
|
+
- lib/kalendor/instance/store.rb
|
110
|
+
- lib/kalendor/instance/subtract.rb
|
111
|
+
- lib/kalendor/instance/union.rb
|
112
|
+
- lib/kalendor/instance/weekday.rb
|
113
|
+
- lib/kalendor/intersect.rb
|
114
|
+
- lib/kalendor/interval.rb
|
115
|
+
- lib/kalendor/month.rb
|
116
|
+
- lib/kalendor/named.rb
|
117
|
+
- lib/kalendor/subtract.rb
|
118
|
+
- lib/kalendor/union.rb
|
119
|
+
- lib/kalendor/version.rb
|
120
|
+
- lib/kalendor/weekday.rb
|
121
|
+
- spec/annual_spec.rb
|
122
|
+
- spec/date_list_spec.rb
|
123
|
+
- spec/date_spec.rb
|
124
|
+
- spec/examples.txt
|
125
|
+
- spec/intersect_spec.rb
|
126
|
+
- spec/interval_spec.rb
|
127
|
+
- spec/month_spec.rb
|
128
|
+
- spec/spec_helper.rb
|
129
|
+
- spec/subtract_spec.rb
|
130
|
+
- spec/union_spec.rb
|
131
|
+
- spec/weekday_spec.rb
|
132
|
+
- todo.txt
|
133
|
+
homepage: http://github.com/conanite/kalendor
|
134
|
+
licenses:
|
135
|
+
- MIT
|
136
|
+
metadata: {}
|
137
|
+
post_install_message:
|
138
|
+
rdoc_options: []
|
139
|
+
require_paths:
|
140
|
+
- lib
|
141
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
requirements: []
|
152
|
+
rubyforge_project:
|
153
|
+
rubygems_version: 2.2.2
|
154
|
+
signing_key:
|
155
|
+
specification_version: 4
|
156
|
+
summary: Utility classes for generating sets of dates
|
157
|
+
test_files:
|
158
|
+
- spec/annual_spec.rb
|
159
|
+
- spec/date_list_spec.rb
|
160
|
+
- spec/date_spec.rb
|
161
|
+
- spec/examples.txt
|
162
|
+
- spec/intersect_spec.rb
|
163
|
+
- spec/interval_spec.rb
|
164
|
+
- spec/month_spec.rb
|
165
|
+
- spec/spec_helper.rb
|
166
|
+
- spec/subtract_spec.rb
|
167
|
+
- spec/union_spec.rb
|
168
|
+
- spec/weekday_spec.rb
|