timeboss 1.0.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/gem-push.yml +31 -0
  3. data/.github/workflows/ruby.yml +35 -0
  4. data/.travis.yml +3 -2
  5. data/Gemfile +2 -1
  6. data/README.md +17 -2
  7. data/Rakefile +3 -1
  8. data/bin/tbsh +2 -2
  9. data/lib/tasks/calendars.rake +5 -5
  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 +16 -14
  46. metadata +51 -20
  47. data/lib/timeboss/support/shellable.rb +0 -17
  48. data/spec/calendar/support/monthly_unit_spec.rb +0 -85
  49. data/spec/calendars/broadcast_spec.rb +0 -796
  50. 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,22 +1,22 @@
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"
@@ -27,5 +27,7 @@ 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 "shellable"
31
+ spec.add_development_dependency "standard"
30
32
  spec.add_development_dependency "yard"
31
33
  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.0
4
+ version: 1.1.1
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-22 00:00:00.000000000 Z
11
+ date: 2022-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -108,6 +108,34 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: shellable
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'
125
+ - !ruby/object:Gem::Dependency
126
+ name: standard
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: yard
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -132,6 +160,8 @@ extra_rdoc_files: []
132
160
  files:
133
161
  - ".github/ISSUE_TEMPLATE/bug_report.md"
134
162
  - ".github/ISSUE_TEMPLATE/feature_request.md"
163
+ - ".github/workflows/gem-push.yml"
164
+ - ".github/workflows/ruby.yml"
135
165
  - ".gitignore"
136
166
  - ".replit"
137
167
  - ".rspec"
@@ -154,6 +184,8 @@ files:
154
184
  - lib/timeboss/calendar/period.rb
155
185
  - lib/timeboss/calendar/quarter.rb
156
186
  - lib/timeboss/calendar/support/formatter.rb
187
+ - lib/timeboss/calendar/support/has_fiscal_weeks.rb
188
+ - lib/timeboss/calendar/support/has_iso_weeks.rb
157
189
  - lib/timeboss/calendar/support/month_basis.rb
158
190
  - lib/timeboss/calendar/support/monthly_unit.rb
159
191
  - lib/timeboss/calendar/support/navigable.rb
@@ -168,16 +200,15 @@ files:
168
200
  - lib/timeboss/calendars.rb
169
201
  - lib/timeboss/calendars/broadcast.rb
170
202
  - lib/timeboss/calendars/gregorian.rb
171
- - lib/timeboss/support/shellable.rb
172
203
  - lib/timeboss/version.rb
173
- - spec/calendar/day_spec.rb
174
- - spec/calendar/quarter_spec.rb
175
- - spec/calendar/support/monthly_unit_spec.rb
176
- - spec/calendar/support/unit_spec.rb
177
- - spec/calendar/week_spec.rb
178
- - spec/calendars/broadcast_spec.rb
179
- - spec/calendars/gregorian_spec.rb
180
- - spec/calendars_spec.rb
204
+ - spec/lib/timeboss/calendar/day_spec.rb
205
+ - spec/lib/timeboss/calendar/quarter_spec.rb
206
+ - spec/lib/timeboss/calendar/support/monthly_unit_spec.rb
207
+ - spec/lib/timeboss/calendar/support/unit_spec.rb
208
+ - spec/lib/timeboss/calendar/week_spec.rb
209
+ - spec/lib/timeboss/calendars/broadcast_spec.rb
210
+ - spec/lib/timeboss/calendars/gregorian_spec.rb
211
+ - spec/lib/timeboss/calendars_spec.rb
181
212
  - spec/spec_helper.rb
182
213
  - timeboss.gemspec
183
214
  homepage: https://github.com/kevinstuffandthings/timeboss
@@ -199,17 +230,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
230
  - !ruby/object:Gem::Version
200
231
  version: '0'
201
232
  requirements: []
202
- rubygems_version: 3.0.8
233
+ rubygems_version: 3.0.3.1
203
234
  signing_key:
204
235
  specification_version: 4
205
236
  summary: Broadcast Calendar navigation in Ruby made simple
206
237
  test_files:
207
- - spec/calendar/day_spec.rb
208
- - spec/calendar/quarter_spec.rb
209
- - spec/calendar/support/monthly_unit_spec.rb
210
- - spec/calendar/support/unit_spec.rb
211
- - spec/calendar/week_spec.rb
212
- - spec/calendars/broadcast_spec.rb
213
- - spec/calendars/gregorian_spec.rb
214
- - spec/calendars_spec.rb
238
+ - spec/lib/timeboss/calendar/day_spec.rb
239
+ - spec/lib/timeboss/calendar/quarter_spec.rb
240
+ - spec/lib/timeboss/calendar/support/monthly_unit_spec.rb
241
+ - spec/lib/timeboss/calendar/support/unit_spec.rb
242
+ - spec/lib/timeboss/calendar/week_spec.rb
243
+ - spec/lib/timeboss/calendars/broadcast_spec.rb
244
+ - spec/lib/timeboss/calendars/gregorian_spec.rb
245
+ - spec/lib/timeboss/calendars_spec.rb
215
246
  - spec/spec_helper.rb
@@ -1,17 +0,0 @@
1
- module TimeBoss
2
- module Support
3
- module Shellable
4
- def self.open(context)
5
- context.extend(self).open_shell
6
- end
7
-
8
- def open_shell
9
- require 'irb'
10
- IRB.setup nil
11
- IRB.conf[:MAIN_CONTEXT] = IRB::Irb.new.context
12
- require 'irb/ext/multi-irb'
13
- IRB.irb nil, self
14
- end
15
- end
16
- end
17
- end
@@ -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