kalendor 0.0.1

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.
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