kalendor 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +34 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/MIT-LICENSE.txt +22 -0
  6. data/README.md +31 -0
  7. data/Rakefile +2 -0
  8. data/kalendor.gemspec +25 -0
  9. data/lib/kalendor.rb +9 -0
  10. data/lib/kalendor/annual.rb +15 -0
  11. data/lib/kalendor/date_helper.rb +85 -0
  12. data/lib/kalendor/date_list.rb +9 -0
  13. data/lib/kalendor/factory.rb +57 -0
  14. data/lib/kalendor/instance.rb +4 -0
  15. data/lib/kalendor/instance/annual.rb +10 -0
  16. data/lib/kalendor/instance/composite.rb +7 -0
  17. data/lib/kalendor/instance/date_list.rb +11 -0
  18. data/lib/kalendor/instance/intersect.rb +6 -0
  19. data/lib/kalendor/instance/interval.rb +10 -0
  20. data/lib/kalendor/instance/month.rb +10 -0
  21. data/lib/kalendor/instance/store.rb +12 -0
  22. data/lib/kalendor/instance/subtract.rb +10 -0
  23. data/lib/kalendor/instance/union.rb +6 -0
  24. data/lib/kalendor/instance/weekday.rb +9 -0
  25. data/lib/kalendor/intersect.rb +6 -0
  26. data/lib/kalendor/interval.rb +8 -0
  27. data/lib/kalendor/month.rb +18 -0
  28. data/lib/kalendor/named.rb +7 -0
  29. data/lib/kalendor/subtract.rb +11 -0
  30. data/lib/kalendor/union.rb +6 -0
  31. data/lib/kalendor/version.rb +3 -0
  32. data/lib/kalendor/weekday.rb +21 -0
  33. data/spec/annual_spec.rb +35 -0
  34. data/spec/date_list_spec.rb +22 -0
  35. data/spec/date_spec.rb +245 -0
  36. data/spec/examples.txt +34 -0
  37. data/spec/intersect_spec.rb +20 -0
  38. data/spec/interval_spec.rb +48 -0
  39. data/spec/month_spec.rb +57 -0
  40. data/spec/spec_helper.rb +87 -0
  41. data/spec/subtract_spec.rb +26 -0
  42. data/spec/union_spec.rb +27 -0
  43. data/spec/weekday_spec.rb +27 -0
  44. data/todo.txt +98 -0
  45. 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
@@ -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
@@ -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
@@ -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