timeboss 1.0.1 → 1.1.2

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 (49) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/gem-push.yml +31 -0
  3. data/.github/workflows/ruby.yml +6 -4
  4. data/.travis.yml +11 -1
  5. data/Gemfile +2 -1
  6. data/README.md +7 -2
  7. data/Rakefile +3 -1
  8. data/bin/tbsh +7 -6
  9. data/lib/tasks/calendars.rake +4 -4
  10. data/lib/tasks/timeboss.rake +2 -2
  11. data/lib/timeboss/calendar/day.rb +3 -2
  12. data/lib/timeboss/calendar/half.rb +2 -1
  13. data/lib/timeboss/calendar/month.rb +2 -1
  14. data/lib/timeboss/calendar/parser.rb +9 -8
  15. data/lib/timeboss/calendar/period.rb +9 -6
  16. data/lib/timeboss/calendar/quarter.rb +2 -1
  17. data/lib/timeboss/calendar/support/formatter.rb +5 -4
  18. data/lib/timeboss/calendar/support/has_fiscal_weeks.rb +17 -0
  19. data/lib/timeboss/calendar/support/has_iso_weeks.rb +30 -0
  20. data/lib/timeboss/calendar/support/month_basis.rb +1 -1
  21. data/lib/timeboss/calendar/support/monthly_unit.rb +8 -8
  22. data/lib/timeboss/calendar/support/navigable.rb +2 -1
  23. data/lib/timeboss/calendar/support/shiftable.rb +12 -11
  24. data/lib/timeboss/calendar/support/translatable.rb +3 -2
  25. data/lib/timeboss/calendar/support/unit.rb +20 -13
  26. data/lib/timeboss/calendar/waypoints/absolute.rb +4 -3
  27. data/lib/timeboss/calendar/waypoints/relative.rb +14 -13
  28. data/lib/timeboss/calendar/week.rb +3 -2
  29. data/lib/timeboss/calendar/year.rb +2 -1
  30. data/lib/timeboss/calendar.rb +8 -7
  31. data/lib/timeboss/calendars/broadcast.rb +10 -7
  32. data/lib/timeboss/calendars/gregorian.rb +4 -5
  33. data/lib/timeboss/calendars.rb +3 -2
  34. data/lib/timeboss/version.rb +2 -1
  35. data/lib/timeboss.rb +2 -0
  36. data/spec/{calendar → lib/timeboss/calendar}/day_spec.rb +14 -14
  37. data/spec/{calendar → lib/timeboss/calendar}/quarter_spec.rb +9 -9
  38. data/spec/lib/timeboss/calendar/support/monthly_unit_spec.rb +91 -0
  39. data/spec/{calendar → lib/timeboss/calendar}/support/unit_spec.rb +23 -22
  40. data/spec/{calendar → lib/timeboss/calendar}/week_spec.rb +20 -20
  41. data/spec/lib/timeboss/calendars/broadcast_spec.rb +796 -0
  42. data/spec/lib/timeboss/calendars/gregorian_spec.rb +793 -0
  43. data/spec/{calendars_spec.rb → lib/timeboss/calendars_spec.rb} +19 -19
  44. data/spec/spec_helper.rb +2 -2
  45. data/timeboss.gemspec +17 -14
  46. metadata +53 -23
  47. data/spec/calendar/support/monthly_unit_spec.rb +0 -85
  48. data/spec/calendars/broadcast_spec.rb +0 -796
  49. data/spec/calendars/gregorian_spec.rb +0 -684
@@ -1,48 +1,48 @@
1
1
  module TimeBoss
2
- describe Calendars do
3
- class MyCal < TimeBoss::Calendar
4
- def initialize
5
- super(basis: nil)
6
- end
2
+ class TestMyCal < TimeBoss::Calendar
3
+ def initialize
4
+ super(basis: nil)
7
5
  end
6
+ end
8
7
 
9
- TimeBoss::Calendars.register(:my_amazing_calendar, MyCal)
8
+ describe Calendars do
9
+ TimeBoss::Calendars.register(:my_amazing_calendar, TestMyCal)
10
10
 
11
- describe '#all' do
11
+ describe "#all" do
12
12
  let(:all) { described_class.all }
13
13
 
14
- it 'can get a list of all the registered calendars' do
14
+ it "can get a list of all the registered calendars" do
15
15
  expect(all).to be_a Array
16
16
  expect(all.length).to be > 1
17
17
  all.each { |e| expect(e).to be_a described_class::Entry }
18
18
  end
19
19
 
20
- context 'enumerability' do
21
- it 'can get a list of names' do
20
+ context "enumerability" do
21
+ it "can get a list of names" do
22
22
  expect(described_class.map(&:name)).to include(:broadcast, :my_amazing_calendar)
23
23
  end
24
24
  end
25
25
  end
26
26
 
27
- describe '#[]' do
28
- it 'can return a baked-in calendar' do
27
+ describe "#[]" do
28
+ it "can return a baked-in calendar" do
29
29
  c1 = described_class[:broadcast]
30
30
  c2 = described_class[:broadcast]
31
31
  expect(c1).to be_instance_of TimeBoss::Calendars::Broadcast
32
32
  expect(c1).to be c2
33
33
 
34
- expect(c1.name).to eq 'broadcast'
35
- expect(c1.title).to eq 'Broadcast'
34
+ expect(c1.name).to eq "broadcast"
35
+ expect(c1.title).to eq "Broadcast"
36
36
  end
37
37
 
38
- it 'can return a new calendar' do
38
+ it "can return a new calendar" do
39
39
  c1 = described_class[:my_amazing_calendar]
40
- expect(c1).to be_instance_of MyCal
41
- expect(c1.name).to eq 'my_cal'
42
- expect(c1.title).to eq 'My Cal'
40
+ expect(c1).to be_instance_of TestMyCal
41
+ expect(c1.name).to eq "test_my_cal"
42
+ expect(c1.title).to eq "Test My Cal"
43
43
  end
44
44
 
45
- it 'can graceully give you nothing' do
45
+ it "can graceully give you nothing" do
46
46
  expect(described_class[:missing]).to be nil
47
47
  end
48
48
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'timeboss'
2
- require 'timeboss/calendars'
1
+ require "timeboss"
2
+ require "timeboss/calendars"
3
3
 
4
4
  RSpec.configure do |config|
5
5
  config.expect_with :rspec do |expectations|
data/timeboss.gemspec CHANGED
@@ -1,26 +1,28 @@
1
1
  # frozen_string_literal: true
2
- # coding: utf-8
3
- lib = File.expand_path('../lib', __FILE__)
2
+
3
+ lib = File.expand_path("../lib", __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'timeboss/version'
5
+ require "timeboss/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "timeboss"
9
- spec.version = TimeBoss::VERSION
10
- spec.authors = ["Kevin McDonald"]
11
- spec.email = ["kevinstuffandthings@gmail.com"]
12
- spec.summary = %q{Broadcast Calendar navigation in Ruby made simple}
13
- spec.description = spec.summary
14
- spec.homepage = "https://github.com/kevinstuffandthings/timeboss"
15
- spec.license = "MIT"
8
+ spec.name = "timeboss"
9
+ spec.version = TimeBoss::VERSION
10
+ spec.authors = ["Kevin McDonald"]
11
+ spec.email = ["kevinstuffandthings@gmail.com"]
12
+ spec.summary = "Broadcast Calendar navigation in Ruby made simple"
13
+ spec.description = spec.summary
14
+ spec.homepage = "https://github.com/kevinstuffandthings/timeboss"
15
+ spec.license = "MIT"
16
16
 
17
- spec.files = `git ls-files -z`.split("\x0")
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
22
22
  spec.add_dependency "activesupport"
23
23
 
24
+ spec.add_runtime_dependency "shellable"
25
+
24
26
  spec.add_development_dependency "bundler"
25
27
  spec.add_development_dependency "pry"
26
28
  spec.add_development_dependency "pry-byebug"
@@ -28,5 +30,6 @@ Gem::Specification.new do |spec|
28
30
  spec.add_development_dependency "rake"
29
31
  spec.add_development_dependency "rspec"
30
32
  spec.add_development_dependency "shellable"
33
+ spec.add_development_dependency "standard"
31
34
  spec.add_development_dependency "yard"
32
35
  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: 1.0.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McDonald
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-16 00:00:00.000000000 Z
11
+ date: 2022-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: shellable
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +136,20 @@ dependencies:
122
136
  - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: standard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: yard
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +174,7 @@ extra_rdoc_files: []
146
174
  files:
147
175
  - ".github/ISSUE_TEMPLATE/bug_report.md"
148
176
  - ".github/ISSUE_TEMPLATE/feature_request.md"
177
+ - ".github/workflows/gem-push.yml"
149
178
  - ".github/workflows/ruby.yml"
150
179
  - ".gitignore"
151
180
  - ".replit"
@@ -169,6 +198,8 @@ files:
169
198
  - lib/timeboss/calendar/period.rb
170
199
  - lib/timeboss/calendar/quarter.rb
171
200
  - lib/timeboss/calendar/support/formatter.rb
201
+ - lib/timeboss/calendar/support/has_fiscal_weeks.rb
202
+ - lib/timeboss/calendar/support/has_iso_weeks.rb
172
203
  - lib/timeboss/calendar/support/month_basis.rb
173
204
  - lib/timeboss/calendar/support/monthly_unit.rb
174
205
  - lib/timeboss/calendar/support/navigable.rb
@@ -184,21 +215,21 @@ files:
184
215
  - lib/timeboss/calendars/broadcast.rb
185
216
  - lib/timeboss/calendars/gregorian.rb
186
217
  - lib/timeboss/version.rb
187
- - spec/calendar/day_spec.rb
188
- - spec/calendar/quarter_spec.rb
189
- - spec/calendar/support/monthly_unit_spec.rb
190
- - spec/calendar/support/unit_spec.rb
191
- - spec/calendar/week_spec.rb
192
- - spec/calendars/broadcast_spec.rb
193
- - spec/calendars/gregorian_spec.rb
194
- - spec/calendars_spec.rb
218
+ - spec/lib/timeboss/calendar/day_spec.rb
219
+ - spec/lib/timeboss/calendar/quarter_spec.rb
220
+ - spec/lib/timeboss/calendar/support/monthly_unit_spec.rb
221
+ - spec/lib/timeboss/calendar/support/unit_spec.rb
222
+ - spec/lib/timeboss/calendar/week_spec.rb
223
+ - spec/lib/timeboss/calendars/broadcast_spec.rb
224
+ - spec/lib/timeboss/calendars/gregorian_spec.rb
225
+ - spec/lib/timeboss/calendars_spec.rb
195
226
  - spec/spec_helper.rb
196
227
  - timeboss.gemspec
197
228
  homepage: https://github.com/kevinstuffandthings/timeboss
198
229
  licenses:
199
230
  - MIT
200
231
  metadata: {}
201
- post_install_message:
232
+ post_install_message:
202
233
  rdoc_options: []
203
234
  require_paths:
204
235
  - lib
@@ -213,18 +244,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
244
  - !ruby/object:Gem::Version
214
245
  version: '0'
215
246
  requirements: []
216
- rubyforge_project:
217
- rubygems_version: 2.6.14
218
- signing_key:
247
+ rubygems_version: 3.0.3.1
248
+ signing_key:
219
249
  specification_version: 4
220
250
  summary: Broadcast Calendar navigation in Ruby made simple
221
251
  test_files:
222
- - spec/calendar/day_spec.rb
223
- - spec/calendar/quarter_spec.rb
224
- - spec/calendar/support/monthly_unit_spec.rb
225
- - spec/calendar/support/unit_spec.rb
226
- - spec/calendar/week_spec.rb
227
- - spec/calendars/broadcast_spec.rb
228
- - spec/calendars/gregorian_spec.rb
229
- - spec/calendars_spec.rb
252
+ - spec/lib/timeboss/calendar/day_spec.rb
253
+ - spec/lib/timeboss/calendar/quarter_spec.rb
254
+ - spec/lib/timeboss/calendar/support/monthly_unit_spec.rb
255
+ - spec/lib/timeboss/calendar/support/unit_spec.rb
256
+ - spec/lib/timeboss/calendar/week_spec.rb
257
+ - spec/lib/timeboss/calendars/broadcast_spec.rb
258
+ - spec/lib/timeboss/calendars/gregorian_spec.rb
259
+ - spec/lib/timeboss/calendars_spec.rb
230
260
  - spec/spec_helper.rb
@@ -1,85 +0,0 @@
1
- module TimeBoss
2
- class Calendar
3
- module Support
4
- describe MonthlyUnit do
5
- class MonthBasedChunk < described_class
6
- NUM_MONTHS = 2
7
-
8
- def name
9
- "#{year_index}C#{index}"
10
- end
11
- end
12
- let(:described_class) { MonthBasedChunk }
13
- let(:calendar) { double }
14
- let(:start_date) { Date.parse('2018-06-25') }
15
- let(:end_date) { Date.parse('2018-08-26') }
16
- let(:subject) { described_class.new(calendar, 2018, 4, start_date, end_date) }
17
-
18
- it 'knows its stuff' do
19
- expect(subject.start_date).to eq start_date
20
- expect(subject.end_date).to eq end_date
21
- expect(subject.to_range).to eq start_date..end_date
22
- end
23
-
24
- it 'can stringify itself' do
25
- expect(subject.to_s).to eq "2018C4: 2018-06-25 thru 2018-08-26"
26
- end
27
-
28
- describe '#weeks' do
29
- let(:base) { double(start_date: Date.parse('2018-01-01'), end_date: Date.parse('2018-12-30')) }
30
- before(:each) { allow(calendar).to receive(:year).with(2018).and_return base }
31
-
32
- it 'can get the relevant weeks for the period' do
33
- allow(calendar).to receive(:supports_weeks?).and_return true
34
- result = subject.weeks
35
- result.each { |w| expect(w).to be_instance_of TimeBoss::Calendar::Week }
36
- expect(result.map { |w| w.start_date.to_s }).to eq [
37
- '2018-06-25',
38
- '2018-07-02',
39
- '2018-07-09',
40
- '2018-07-16',
41
- '2018-07-23',
42
- '2018-07-30',
43
- '2018-08-06',
44
- '2018-08-13',
45
- '2018-08-20'
46
- ]
47
- end
48
-
49
- it 'blows up when weeks are not supported' do
50
- allow(calendar).to receive(:supports_weeks?).and_return false
51
- expect { subject.weeks }.to raise_error TimeBoss::Calendar::Support::Unit::UnsupportedUnitError
52
- end
53
- end
54
-
55
- context 'navigation' do
56
- let(:result) { double }
57
-
58
- describe '#previous' do
59
- it 'moves easily within itself' do
60
- expect(calendar).to receive(:month_based_chunk).with(48, 3).and_return result
61
- expect(described_class.new(calendar, 48, 4, nil, nil).previous).to eq result
62
- end
63
-
64
- it 'flips to the previous container' do
65
- expect(calendar).to receive(:month_based_chunk).with(47, 6).and_return result
66
- expect(described_class.new(calendar, 48, 1, nil, nil).previous).to eq result
67
- end
68
- end
69
-
70
- describe '#next' do
71
- it 'moves easily within itself' do
72
- expect(calendar).to receive(:month_based_chunk).with(48, 3).and_return result
73
- expect(described_class.new(calendar, 48, 2, nil, nil).next).to eq result
74
- end
75
-
76
- it 'flips to the previous container' do
77
- expect(calendar).to receive(:month_based_chunk).with(48, 1).and_return result
78
- expect(described_class.new(calendar, 47, 6, nil, nil).next).to eq result
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end