timeboss 0.0.6 → 0.1.0

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +23 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  4. data/.gitignore +2 -0
  5. data/.travis.yml +4 -1
  6. data/.yardopts +1 -0
  7. data/CODE_OF_CONDUCT.md +76 -0
  8. data/README.md +30 -18
  9. data/bin/tbsh +15 -0
  10. data/doc/TimeBoss.html +146 -0
  11. data/doc/TimeBoss/Calendar.html +137 -0
  12. data/doc/TimeBoss/Calendar/Day.html +594 -0
  13. data/doc/TimeBoss/Calendar/Half.html +396 -0
  14. data/doc/TimeBoss/Calendar/Month.html +396 -0
  15. data/doc/TimeBoss/Calendar/Parser.html +386 -0
  16. data/doc/TimeBoss/Calendar/Period.html +841 -0
  17. data/doc/TimeBoss/Calendar/Quarter.html +396 -0
  18. data/doc/TimeBoss/Calendar/Support.html +131 -0
  19. data/doc/TimeBoss/Calendar/Support/Formatter.html +459 -0
  20. data/doc/TimeBoss/Calendar/Support/MonthBased.html +591 -0
  21. data/doc/TimeBoss/Calendar/Support/MonthBasis.html +437 -0
  22. data/doc/TimeBoss/Calendar/Support/MonthlyUnit.html +591 -0
  23. data/doc/TimeBoss/Calendar/Support/Navigable.html +723 -0
  24. data/doc/TimeBoss/Calendar/Support/Shiftable.html +138 -0
  25. data/doc/TimeBoss/Calendar/Support/Unit.html +1299 -0
  26. data/doc/TimeBoss/Calendar/Waypoints.html +155 -0
  27. data/doc/TimeBoss/Calendar/Waypoints/Absolute.html +1378 -0
  28. data/doc/TimeBoss/Calendar/Waypoints/Relative.html +4308 -0
  29. data/doc/TimeBoss/Calendar/Week.html +671 -0
  30. data/doc/TimeBoss/Calendar/Year.html +319 -0
  31. data/doc/TimeBoss/Calendars.html +336 -0
  32. data/doc/TimeBoss/Calendars/Broadcast.html +221 -0
  33. data/doc/TimeBoss/Calendars/Broadcast/Basis.html +278 -0
  34. data/doc/TimeBoss/Calendars/Entry.html +399 -0
  35. data/doc/TimeBoss/Support.html +115 -0
  36. data/doc/TimeBoss/Support/Shellable.html +249 -0
  37. data/doc/_index.html +416 -0
  38. data/doc/class_list.html +51 -0
  39. data/doc/css/common.css +1 -0
  40. data/doc/css/full_list.css +58 -0
  41. data/doc/css/style.css +496 -0
  42. data/doc/file.README.html +299 -0
  43. data/doc/file_list.html +56 -0
  44. data/doc/frames.html +17 -0
  45. data/doc/index.html +299 -0
  46. data/doc/js/app.js +314 -0
  47. data/doc/js/full_list.js +216 -0
  48. data/doc/js/jquery.js +4 -0
  49. data/doc/method_list.html +1139 -0
  50. data/doc/top-level-namespace.html +110 -0
  51. data/lib/tasks/calendars.rake +5 -0
  52. data/lib/timeboss.rb +4 -0
  53. data/lib/timeboss/calendar.rb +22 -0
  54. data/lib/timeboss/calendar/day.rb +19 -6
  55. data/lib/timeboss/calendar/half.rb +7 -2
  56. data/lib/timeboss/calendar/month.rb +7 -2
  57. data/lib/timeboss/calendar/parser.rb +1 -0
  58. data/lib/timeboss/calendar/period.rb +26 -11
  59. data/lib/timeboss/calendar/quarter.rb +7 -2
  60. data/lib/timeboss/calendar/support.rb +8 -0
  61. data/lib/timeboss/calendar/support/formatter.rb +1 -0
  62. data/lib/timeboss/calendar/support/month_basis.rb +3 -0
  63. data/lib/timeboss/calendar/support/{month_based.rb → monthly_unit.rb} +24 -18
  64. data/lib/timeboss/calendar/support/navigable.rb +73 -0
  65. data/lib/timeboss/calendar/support/shiftable.rb +3 -2
  66. data/lib/timeboss/calendar/support/unit.rb +26 -0
  67. data/lib/timeboss/calendar/waypoints.rb +6 -80
  68. data/lib/timeboss/calendar/waypoints/absolute.rb +114 -0
  69. data/lib/timeboss/calendar/waypoints/relative.rb +268 -0
  70. data/lib/timeboss/calendar/week.rb +26 -18
  71. data/lib/timeboss/calendar/year.rb +6 -5
  72. data/lib/timeboss/calendars.rb +20 -3
  73. data/lib/timeboss/version.rb +1 -1
  74. data/spec/calendar/day_spec.rb +1 -1
  75. data/spec/calendar/support/{month_based_spec.rb → monthly_unit_spec.rb} +18 -8
  76. data/spec/calendar/week_spec.rb +5 -13
  77. data/spec/calendars/broadcast_spec.rb +27 -7
  78. data/spec/calendars_spec.rb +7 -1
  79. data/timeboss.gemspec +1 -0
  80. metadata +77 -8
@@ -3,42 +3,50 @@ require_relative './support/unit'
3
3
 
4
4
  module TimeBoss
5
5
  class Calendar
6
+ # Representation of a single week within a calendar.
6
7
  class Week < Support::Unit
7
- attr_reader :year_index, :index
8
-
9
- def initialize(calendar, year_index, index, start_date, end_date)
8
+ def initialize(calendar, start_date, end_date)
10
9
  super(calendar, start_date, end_date)
11
- @year_index = year_index
12
- @index = index
13
10
  end
14
11
 
12
+ # Get a simple representation of this week.
13
+ # @return [String] (e.g. "2020W32")
15
14
  def name
16
15
  "#{year_index}W#{index}"
17
16
  end
18
17
 
18
+ # Get a "pretty" representation of this week.
19
+ # @return [String] (e.g. "Week of August 3, 2020")
19
20
  def title
20
21
  "Week of #{start_date.strftime('%B %-d, %Y')}"
21
22
  end
22
23
 
24
+ # Get a stringified representation of this week.
25
+ # @return [String] (e.g. "2020W32: 2020-08-03 thru 2020-08-09")
23
26
  def to_s
24
27
  "#{name}: #{start_date} thru #{end_date}"
25
28
  end
26
29
 
27
- def previous
28
- if index == 1
29
- (calendar.year_for(start_date) - 1).weeks.last
30
- else
31
- self.class.new(calendar, year_index, index - 1, start_date - 1.week, end_date - 1.week)
32
- end
30
+ # Get the index of this week within its containing year.
31
+ # @return [Integer]
32
+ def index
33
+ @_index ||= (((start_date - year.start_date) + 1) / 7.0).to_i + 1
34
+ end
35
+
36
+ # Get the year number for this week.
37
+ # @return [Integer] (e.g. 2020)
38
+ def year_index
39
+ @_year_index ||= year.year_index
40
+ end
41
+
42
+ private
43
+
44
+ def down
45
+ self.class.new(calendar, start_date - 1.week, end_date - 1.week)
33
46
  end
34
47
 
35
- def next
36
- weeks = calendar.year_for(start_date).weeks
37
- if index == weeks.last.index
38
- self.class.new(calendar, year_index + 1, 1, start_date + 1.week, end_date + 1.week)
39
- else
40
- weeks[index]
41
- end
48
+ def up
49
+ self.class.new(calendar, start_date + 1.week, end_date + 1.week)
42
50
  end
43
51
  end
44
52
  end
@@ -1,18 +1,19 @@
1
1
  # frozen_string_literal: true
2
- require_relative './support/month_based'
2
+ require_relative './support/monthly_unit'
3
3
 
4
4
  module TimeBoss
5
5
  class Calendar
6
- class Year < Support::MonthBased
6
+ # Representation of a 12-month period within a calendar.
7
+ class Year < Support::MonthlyUnit
7
8
  NUM_MONTHS = 12
8
9
 
10
+ # Get a simple representation of this year.
11
+ # @return [String] (e.g. "2020")
9
12
  def name
10
13
  year_index.to_s
11
14
  end
12
15
 
13
- def title
14
- name
15
- end
16
+ alias_method :title, :name
16
17
  end
17
18
  end
18
19
  end
@@ -1,27 +1,44 @@
1
1
  # frozen_string_literal: true
2
2
  require 'active_support/core_ext/class/subclasses'
3
- require './lib/timeboss/calendar'
4
- Dir['./lib/timeboss/calendars/*.rb'].each { |f| require f }
3
+ require_relative 'calendar'
4
+
5
+ Dir[File.expand_path('../calendars/*.rb', __FILE__)].each { |f| require f }
5
6
 
6
7
  module TimeBoss
8
+ # A home for specific calendar implementations.
7
9
  module Calendars
8
10
  extend self
9
11
  extend Enumerable
10
12
  delegate :each, :length, to: :all
11
13
 
14
+ # Retrieve a list of all registered calendars.
15
+ # @return [Array<Entry>]
12
16
  def all
13
17
  @_all ||= TimeBoss::Calendar.subclasses.map do |klass|
14
18
  Entry.new(klass.to_s.demodulize.underscore.to_sym, klass)
15
19
  end
16
20
  end
17
21
 
22
+ # Retrieve an instance of the specified named calendar.
23
+ # @param name [String, Symbol] the name of the calendar to retrieve.
24
+ # @return [Calendar]
18
25
  def [](name)
19
- find { |e| e.name == name.to_sym }&.calendar
26
+ find { |e| e.name == name&.to_sym }&.calendar
20
27
  end
21
28
 
22
29
  private
23
30
 
24
31
  Entry = Struct.new(:name, :klass) do
32
+ # @!method name
33
+ # Get the name of the calendar referenced in this entry.
34
+ # @return [Symbol]
35
+
36
+ # @!method klass
37
+ # The class implementing this calendar.
38
+ # @return [Class<Calendar>]
39
+
40
+ # Get an instance of the calendar referenced in this entry.
41
+ # @return [Calendar]
25
42
  def calendar
26
43
  @_calendar ||= klass.new
27
44
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module TimeBoss
3
- VERSION = "0.0.6"
3
+ VERSION = "0.1.0"
4
4
  end
@@ -24,7 +24,7 @@ module TimeBoss
24
24
  end
25
25
 
26
26
  describe '#index' do
27
- before(:each) { allow(calendar).to receive(:year_for).with(start_date).and_return double(start_date: start_date - 3) }
27
+ before(:each) { allow(subject).to receive(:year).and_return double(start_date: start_date - 3) }
28
28
 
29
29
  it 'gets its index within the year' do
30
30
  expect(subject.index).to eq 4
@@ -1,15 +1,15 @@
1
1
  module TimeBoss
2
2
  class Calendar
3
3
  module Support
4
- describe MonthBased do
5
- class ChunkMonthBased < described_class
4
+ describe MonthlyUnit do
5
+ class MonthBasedChunk < described_class
6
6
  NUM_MONTHS = 2
7
7
 
8
8
  def name
9
9
  "#{year_index}C#{index}"
10
10
  end
11
11
  end
12
- let(:described_class) { ChunkMonthBased }
12
+ let(:described_class) { MonthBasedChunk }
13
13
  let(:calendar) { double }
14
14
  let(:start_date) { Date.parse('2018-06-25') }
15
15
  let(:end_date) { Date.parse('2018-08-26') }
@@ -32,7 +32,17 @@ module TimeBoss
32
32
  it 'can get the relevant weeks for the period' do
33
33
  result = subject.weeks
34
34
  result.each { |w| expect(w).to be_instance_of TimeBoss::Calendar::Week }
35
- expect(result.map(&:name)).to eq %w[2018W26 2018W27 2018W28 2018W29 2018W30 2018W31 2018W32 2018W33 2018W34]
35
+ expect(result.map { |w| w.start_date.to_s }).to eq [
36
+ '2018-06-25',
37
+ '2018-07-02',
38
+ '2018-07-09',
39
+ '2018-07-16',
40
+ '2018-07-23',
41
+ '2018-07-30',
42
+ '2018-08-06',
43
+ '2018-08-13',
44
+ '2018-08-20'
45
+ ]
36
46
  end
37
47
  end
38
48
 
@@ -41,24 +51,24 @@ module TimeBoss
41
51
 
42
52
  describe '#previous' do
43
53
  it 'moves easily within itself' do
44
- expect(calendar).to receive(:chunk_month_based).with(48, 3).and_return result
54
+ expect(calendar).to receive(:month_based_chunk).with(48, 3).and_return result
45
55
  expect(described_class.new(calendar, 48, 4, nil, nil).previous).to eq result
46
56
  end
47
57
 
48
58
  it 'flips to the previous container' do
49
- expect(calendar).to receive(:chunk_month_based).with(47, 6).and_return result
59
+ expect(calendar).to receive(:month_based_chunk).with(47, 6).and_return result
50
60
  expect(described_class.new(calendar, 48, 1, nil, nil).previous).to eq result
51
61
  end
52
62
  end
53
63
 
54
64
  describe '#next' do
55
65
  it 'moves easily within itself' do
56
- expect(calendar).to receive(:chunk_month_based).with(48, 3).and_return result
66
+ expect(calendar).to receive(:month_based_chunk).with(48, 3).and_return result
57
67
  expect(described_class.new(calendar, 48, 2, nil, nil).next).to eq result
58
68
  end
59
69
 
60
70
  it 'flips to the previous container' do
61
- expect(calendar).to receive(:chunk_month_based).with(48, 1).and_return result
71
+ expect(calendar).to receive(:month_based_chunk).with(48, 1).and_return result
62
72
  expect(described_class.new(calendar, 47, 6, nil, nil).next).to eq result
63
73
  end
64
74
  end
@@ -4,7 +4,7 @@ module TimeBoss
4
4
  let(:calendar) { instance_double(TimeBoss::Calendar) }
5
5
  let(:start_date) { Date.parse('2048-04-06') }
6
6
  let(:end_date) { Date.parse('2048-04-12') }
7
- let(:subject) { described_class.new(calendar, 2048, 15, start_date, end_date) }
7
+ let(:subject) { described_class.new(calendar, start_date, end_date) }
8
8
 
9
9
  it 'knows its stuff' do
10
10
  expect(subject.start_date).to eq start_date
@@ -12,18 +12,10 @@ module TimeBoss
12
12
  expect(subject.to_range).to eq start_date..end_date
13
13
  end
14
14
 
15
- it 'knows its name' do
16
- expect(subject.name).to eq '2048W15'
17
- end
18
-
19
15
  it 'knows its title' do
20
16
  expect(subject.title).to eq "Week of April 6, 2048"
21
17
  end
22
18
 
23
- it 'can stringify itself' do
24
- expect(subject.to_s).to include(subject.name, start_date.to_s, end_date.to_s)
25
- end
26
-
27
19
  describe '#current?' do
28
20
  it 'knows when it is' do
29
21
  allow(Date).to receive(:today).and_return start_date
@@ -46,13 +38,13 @@ module TimeBoss
46
38
  end
47
39
 
48
40
  it 'can wrap to the previous 52-week year' do
49
- result = described_class.new(calendar, 2022, 1, Date.parse('2021-12-27'), Date.parse('2022-01-02')).previous
41
+ result = described_class.new(calendar, Date.parse('2021-12-27'), Date.parse('2022-01-02')).previous
50
42
  expect(result).to be_a described_class
51
43
  expect(result.to_s).to eq "2021W52: 2021-12-20 thru 2021-12-26"
52
44
  end
53
45
 
54
46
  it 'can wrap to the previous 53-week year' do
55
- result = described_class.new(calendar, 2024, 1, Date.parse('2024-01-01'), Date.parse('2024-01-07')).previous
47
+ result = described_class.new(calendar, Date.parse('2024-01-01'), Date.parse('2024-01-07')).previous
56
48
  expect(result).to be_a described_class
57
49
  expect(result.to_s).to eq "2023W53: 2023-12-25 thru 2023-12-31"
58
50
  end
@@ -66,13 +58,13 @@ module TimeBoss
66
58
  end
67
59
 
68
60
  it 'can wrap from week 52 to the next year' do
69
- result = described_class.new(calendar, 2021, 52, Date.parse('2021-12-20'), Date.parse('2021-12-26')).next
61
+ result = described_class.new(calendar, Date.parse('2021-12-20'), Date.parse('2021-12-26')).next
70
62
  expect(result).to be_a described_class
71
63
  expect(result.to_s).to eq "2022W1: 2021-12-27 thru 2022-01-02"
72
64
  end
73
65
 
74
66
  it 'can wrap from week 53 to the next year' do
75
- result = described_class.new(calendar, 2023, 53, Date.parse('2023-12-25'), Date.parse('2023-12-31')).next
67
+ result = described_class.new(calendar, Date.parse('2023-12-25'), Date.parse('2023-12-31')).next
76
68
  expect(result).to be_a described_class
77
69
  expect(result.to_s).to eq "2024W1: 2024-01-01 thru 2024-01-07"
78
70
  end
@@ -2,6 +2,26 @@ module TimeBoss
2
2
  describe Calendars::Broadcast do
3
3
  let(:subject) { described_class.new }
4
4
 
5
+ context 'days' do
6
+ it 'can get today' do
7
+ day = subject.today
8
+ expect(day).to be_instance_of(TimeBoss::Calendar::Day)
9
+ expect(day.start_date).to eq Date.today
10
+ end
11
+
12
+ it 'can get yesterday' do
13
+ day = subject.yesterday
14
+ expect(day).to be_instance_of(TimeBoss::Calendar::Day)
15
+ expect(day.start_date).to eq Date.yesterday
16
+ end
17
+
18
+ it 'can get tomorrow' do
19
+ day = subject.tomorrow
20
+ expect(day).to be_instance_of(TimeBoss::Calendar::Day)
21
+ expect(day.start_date).to eq Date.tomorrow
22
+ end
23
+ end
24
+
5
25
  context 'quarters' do
6
26
  describe '#quarter' do
7
27
  it 'knows 2017Q2' do
@@ -113,8 +133,8 @@ module TimeBoss
113
133
  expect(quarters.map(&:name)).to eq ['2015Q3', '2015Q4', '2016Q1', '2016Q2', '2016Q3']
114
134
  end
115
135
 
116
- it 'can get a quarter hence' do
117
- quarter = subject.quarters_hence(4)
136
+ it 'can get a quarter ahead' do
137
+ quarter = subject.quarters_ahead(4)
118
138
  expect(quarter).to be_a TimeBoss::Calendar::Quarter
119
139
  expect(quarter.name).to eq '2016Q3'
120
140
  end
@@ -251,8 +271,8 @@ module TimeBoss
251
271
  expect(months.map(&:name)).to eq ['2015M3', '2015M4', '2015M5', '2015M6', '2015M7']
252
272
  end
253
273
 
254
- it 'can get a month hence' do
255
- month = subject.months_hence(4)
274
+ it 'can get a month ahead' do
275
+ month = subject.months_ahead(4)
256
276
  expect(month).to be_a TimeBoss::Calendar::Month
257
277
  expect(month.name).to eq '2015M7'
258
278
  end
@@ -490,7 +510,7 @@ module TimeBoss
490
510
  it 'can parse mathematic expressions' do
491
511
  result = subject.parse('this_month + 2')
492
512
  expect(result).to be_a TimeBoss::Calendar::Month
493
- expect(result).to eq subject.months_hence(2)
513
+ expect(result).to eq subject.months_ahead(2)
494
514
  end
495
515
 
496
516
  context 'ranges' do
@@ -554,7 +574,7 @@ module TimeBoss
554
574
 
555
575
  it 'can shift to a different year' do
556
576
  allow(subject).to receive(:this_year).and_return subject.parse('2019')
557
- result = basis.years_hence(3)
577
+ result = basis.years_ahead(3)
558
578
  expect(result).to be_a TimeBoss::Calendar::Day
559
579
  expect(result.to_s).to eq '2022-04-19'
560
580
  expect(basis.in_year).to eq 114
@@ -596,7 +616,7 @@ module TimeBoss
596
616
 
597
617
  it 'can shift to a different year' do
598
618
  allow(subject).to receive(:this_year).and_return subject.parse('2020')
599
- result = basis.years_hence(4)
619
+ result = basis.years_ahead(4)
600
620
  expect(result).to be_a TimeBoss::Calendar::Month
601
621
  expect(result.name).to eq '2024M4'
602
622
  expect(basis.in_year).to eq 4
@@ -28,10 +28,16 @@ module TimeBoss
28
28
  c2 = described_class[:broadcast]
29
29
  expect(c1).to be_instance_of TimeBoss::Calendars::Broadcast
30
30
  expect(c1).to be c2
31
+
32
+ expect(c1.name).to eq 'broadcast'
33
+ expect(c1.title).to eq 'Broadcast'
31
34
  end
32
35
 
33
36
  it 'can return a new calendar' do
34
- expect(described_class[:my_test_calendar]).to be_instance_of MyTestCalendar
37
+ c1 = described_class[:my_test_calendar]
38
+ expect(c1).to be_instance_of MyTestCalendar
39
+ expect(c1.name).to eq 'my_test_calendar'
40
+ expect(c1.title).to eq 'My Test Calendar'
35
41
  end
36
42
 
37
43
  it 'can graceully give you nothing' do
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rack-test"
28
28
  spec.add_development_dependency "rake"
29
29
  spec.add_development_dependency "rspec"
30
+ spec.add_development_dependency "yard"
30
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timeboss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McDonald
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-16 00:00:00.000000000 Z
11
+ date: 2020-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -108,20 +108,86 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description: Broadcast Calendar navigation in Ruby made simple
112
126
  email:
113
127
  - kevinstuffandthings@gmail.com
114
- executables: []
128
+ executables:
129
+ - tbsh
115
130
  extensions: []
116
131
  extra_rdoc_files: []
117
132
  files:
133
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
134
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
118
135
  - ".gitignore"
119
136
  - ".rspec"
120
137
  - ".travis.yml"
138
+ - ".yardoc/checksums"
139
+ - ".yardoc/complete"
140
+ - ".yardoc/object_types"
141
+ - ".yardoc/objects/root.dat"
142
+ - ".yardoc/proxy_types"
143
+ - ".yardopts"
144
+ - CODE_OF_CONDUCT.md
121
145
  - Gemfile
122
146
  - LICENSE.txt
123
147
  - README.md
124
148
  - Rakefile
149
+ - bin/tbsh
150
+ - doc/TimeBoss.html
151
+ - doc/TimeBoss/Calendar.html
152
+ - doc/TimeBoss/Calendar/Day.html
153
+ - doc/TimeBoss/Calendar/Half.html
154
+ - doc/TimeBoss/Calendar/Month.html
155
+ - doc/TimeBoss/Calendar/Parser.html
156
+ - doc/TimeBoss/Calendar/Period.html
157
+ - doc/TimeBoss/Calendar/Quarter.html
158
+ - doc/TimeBoss/Calendar/Support.html
159
+ - doc/TimeBoss/Calendar/Support/Formatter.html
160
+ - doc/TimeBoss/Calendar/Support/MonthBased.html
161
+ - doc/TimeBoss/Calendar/Support/MonthBasis.html
162
+ - doc/TimeBoss/Calendar/Support/MonthlyUnit.html
163
+ - doc/TimeBoss/Calendar/Support/Navigable.html
164
+ - doc/TimeBoss/Calendar/Support/Shiftable.html
165
+ - doc/TimeBoss/Calendar/Support/Unit.html
166
+ - doc/TimeBoss/Calendar/Waypoints.html
167
+ - doc/TimeBoss/Calendar/Waypoints/Absolute.html
168
+ - doc/TimeBoss/Calendar/Waypoints/Relative.html
169
+ - doc/TimeBoss/Calendar/Week.html
170
+ - doc/TimeBoss/Calendar/Year.html
171
+ - doc/TimeBoss/Calendars.html
172
+ - doc/TimeBoss/Calendars/Broadcast.html
173
+ - doc/TimeBoss/Calendars/Broadcast/Basis.html
174
+ - doc/TimeBoss/Calendars/Entry.html
175
+ - doc/TimeBoss/Support.html
176
+ - doc/TimeBoss/Support/Shellable.html
177
+ - doc/_index.html
178
+ - doc/class_list.html
179
+ - doc/css/common.css
180
+ - doc/css/full_list.css
181
+ - doc/css/style.css
182
+ - doc/file.README.html
183
+ - doc/file_list.html
184
+ - doc/frames.html
185
+ - doc/index.html
186
+ - doc/js/app.js
187
+ - doc/js/full_list.js
188
+ - doc/js/jquery.js
189
+ - doc/method_list.html
190
+ - doc/top-level-namespace.html
125
191
  - lib/tasks/calendars.rake
126
192
  - lib/tasks/timeboss.rake
127
193
  - lib/timeboss.rb
@@ -132,12 +198,16 @@ files:
132
198
  - lib/timeboss/calendar/parser.rb
133
199
  - lib/timeboss/calendar/period.rb
134
200
  - lib/timeboss/calendar/quarter.rb
201
+ - lib/timeboss/calendar/support.rb
135
202
  - lib/timeboss/calendar/support/formatter.rb
136
- - lib/timeboss/calendar/support/month_based.rb
137
203
  - lib/timeboss/calendar/support/month_basis.rb
204
+ - lib/timeboss/calendar/support/monthly_unit.rb
205
+ - lib/timeboss/calendar/support/navigable.rb
138
206
  - lib/timeboss/calendar/support/shiftable.rb
139
207
  - lib/timeboss/calendar/support/unit.rb
140
208
  - lib/timeboss/calendar/waypoints.rb
209
+ - lib/timeboss/calendar/waypoints/absolute.rb
210
+ - lib/timeboss/calendar/waypoints/relative.rb
141
211
  - lib/timeboss/calendar/week.rb
142
212
  - lib/timeboss/calendar/year.rb
143
213
  - lib/timeboss/calendars.rb
@@ -146,7 +216,7 @@ files:
146
216
  - lib/timeboss/version.rb
147
217
  - spec/calendar/day_spec.rb
148
218
  - spec/calendar/quarter_spec.rb
149
- - spec/calendar/support/month_based_spec.rb
219
+ - spec/calendar/support/monthly_unit_spec.rb
150
220
  - spec/calendar/support/unit_spec.rb
151
221
  - spec/calendar/week_spec.rb
152
222
  - spec/calendars/broadcast_spec.rb
@@ -172,15 +242,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
242
  - !ruby/object:Gem::Version
173
243
  version: '0'
174
244
  requirements: []
175
- rubyforge_project:
176
- rubygems_version: 2.7.7
245
+ rubygems_version: 3.0.8
177
246
  signing_key:
178
247
  specification_version: 4
179
248
  summary: Broadcast Calendar navigation in Ruby made simple
180
249
  test_files:
181
250
  - spec/calendar/day_spec.rb
182
251
  - spec/calendar/quarter_spec.rb
183
- - spec/calendar/support/month_based_spec.rb
252
+ - spec/calendar/support/monthly_unit_spec.rb
184
253
  - spec/calendar/support/unit_spec.rb
185
254
  - spec/calendar/week_spec.rb
186
255
  - spec/calendars/broadcast_spec.rb