coursegen 0.8.1 → 0.9.3

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/pr.yml +19 -0
  3. data/.gitignore +3 -0
  4. data/Gemfile.lock +80 -57
  5. data/README.md +285 -69
  6. data/Rakefile +10 -1
  7. data/coursegen.gemspec +26 -26
  8. data/lib/coursegen.rb +5 -2
  9. data/lib/coursegen/cli.rb +49 -14
  10. data/lib/coursegen/course/data/citem.rb +10 -1
  11. data/lib/coursegen/course/data/data_adaptor.rb +16 -6
  12. data/lib/coursegen/course/data/section.rb +1 -1
  13. data/lib/coursegen/course/helpers/bootstrap_markup.rb +15 -15
  14. data/lib/coursegen/course/helpers/content_helpers.rb +158 -94
  15. data/lib/coursegen/course/helpers/formatting_helpers.rb +6 -10
  16. data/lib/coursegen/course/helpers/ical_feed_helpers.rb +2 -1
  17. data/lib/coursegen/course/helpers/lecture_helpers.rb +3 -2
  18. data/lib/coursegen/course/helpers/list_of.rb +40 -20
  19. data/lib/coursegen/course/helpers/list_of_helpers.rb +20 -14
  20. data/lib/coursegen/course/helpers/logging_helpers.rb +13 -12
  21. data/lib/coursegen/course/helpers/navigation_helpers.rb +62 -23
  22. data/lib/coursegen/course/helpers/sidebar_helpers.rb +19 -18
  23. data/lib/coursegen/course/helpers/table_helpers.rb +5 -4
  24. data/lib/coursegen/course/schedule/scheduler.rb +52 -19
  25. data/lib/coursegen/templates.rb +30 -23
  26. data/lib/coursegen/version.rb +3 -1
  27. data/spec/lectures_spec.rb +60 -50
  28. data/spec/play_spec.rb +24 -12
  29. data/spec/scheduler_spec.rb +87 -27
  30. data/tech_debt.md +5 -0
  31. data/templates/Rules +14 -19
  32. data/templates/cg_config.rb +105 -21
  33. data/templates/content/bootstrap/css/custom.css +87 -151
  34. data/templates/content/bootstrap/css/full-width-pics.css +8 -64
  35. data/templates/content/bootstrap/css/postit.css +7 -0
  36. data/templates/content/bootstrap/css/toasty.css +3 -0
  37. data/templates/content/content/index.md.erb +1 -1
  38. data/templates/content/content/intro/course_toc.md.erb +0 -1
  39. data/templates/content/content/intro/welcome.md.erb +1 -3
  40. data/templates/content/content/lectures/part1/02_here_we_go.md.erb +22 -1
  41. data/templates/content/content/lectures/part2/01_start_part2.md.erb +2 -1
  42. data/templates/content/content/lectures/part2/02_continue_part2.md.erb +3 -2
  43. data/templates/layouts/banner.html.erb +4 -4
  44. data/templates/layouts/body_footer.html +3 -4
  45. data/templates/layouts/body_header.html.erb +25 -7
  46. data/templates/layouts/bottom_includes.html.erb +21 -10
  47. data/templates/layouts/course.html.erb +7 -21
  48. data/templates/layouts/helpful_box.html +1 -1
  49. data/templates/layouts/nav-menus.html.erb +16 -36
  50. data/templates/layouts/sidebar.html.erb +9 -8
  51. data/templates/layouts/slides.html.erb +69 -0
  52. data/templates/layouts/top_includes.html.erb +24 -23
  53. metadata +36 -28
  54. data/.DS_Store +0 -0
  55. data/.vscode/settings.json +0 -2
  56. data/templates/.DS_Store +0 -0
  57. data/templates/Guardfile +0 -9
  58. data/templates/content/bootstrap/css/tipuesearch.css +0 -163
  59. data/templates/content/bootstrap/js/tipuesearch.js +0 -379
  60. data/templates/content/bootstrap/js/tipuesearch.min.js +0 -12
  61. data/templates/content/bootstrap/js/tipuesearch_content.js +0 -13
  62. data/templates/content/bootstrap/js/tipuesearch_set.js +0 -23
  63. data/templates/layouts/main_navbar.html.erb +0 -21
@@ -1,5 +1,9 @@
1
- WEEKDAYS = {sunday: 0, monday: 1, tuesday: 2,
2
- wednesday: 3, thursday: 4, friday: 5, saturday: 6}
1
+ require 'date'
2
+ require 'active_support'
3
+ require 'active_support/core_ext/numeric/time'
4
+
5
+ WEEKDAYS = { sunday: 0, monday: 1, tuesday: 2,
6
+ wednesday: 3, thursday: 4, friday: 5, saturday: 6 }.freeze
3
7
 
4
8
  # Calculate days on which each event occurs, based on the configuration info
5
9
  class Scheduler
@@ -26,8 +30,17 @@ class Scheduler
26
30
  @start = nil
27
31
  return
28
32
  end
29
- setup_from_args(start: sdef.first_day, weekdays: sdef.weekdays,
30
- number: sdef.number, skips: sdef.skips, start_time: sdef.start_time, end_time: sdef.end_time, start_times: sdef.start_times, end_times: sdef.end_times)
33
+
34
+ setup_from_args(
35
+ start: sdef.first_day,
36
+ weekdays: sdef.weekdays,
37
+ number: sdef.number,
38
+ skips: sdef.skips,
39
+ start_time: sdef.start_time,
40
+ end_time: sdef.end_time,
41
+ start_times: sdef.start_times,
42
+ end_times: sdef.end_times
43
+ )
31
44
  end
32
45
 
33
46
  def event_date_by_index(ind)
@@ -41,14 +54,15 @@ class Scheduler
41
54
  private
42
55
 
43
56
  def recalc_event_map
44
- return if self.null?
57
+ return if null?
58
+
45
59
  @event_dates = []
46
60
  @event_start_times = []
47
61
  @event_end_times = []
48
62
  wkdy_of_start = @start_date.cwday
49
63
  wkday_index = @weekdays.find_index(wkdy_of_start)
50
64
  curr_event_date = @start_date
51
- @number.times do |i|
65
+ @number.times do |_i|
52
66
  unless @skips.include? curr_event_date
53
67
  @event_dates << curr_event_date
54
68
  @event_start_times << @start_times[wkday_index]
@@ -70,31 +84,50 @@ class Scheduler
70
84
  start_time, end_time, start_times, end_times)
71
85
  @number = number + skips.length
72
86
  @start_date = string_to_date(start)
73
- @skips = skips.map { |d| string_to_date(d) } rescue raise(ArgumentError, "Scheduler: Invalid skip date")
74
-
75
- raise ArgumentError, "Scheduler: invalid weekdays" unless weekdays.all? { |wd| WEEKDAYS.include? wd }
87
+ @skips = begin
88
+ skips.map { |d| string_to_date(d) }
89
+ rescue StandardError
90
+ raise(ArgumentError, 'Scheduler: Invalid skip date')
91
+ end
92
+
93
+ unless weekdays.all? { |wd| WEEKDAYS.include? wd }
94
+ raise ArgumentError, 'Scheduler: invalid weekdays'
95
+ end
76
96
 
77
- @weekdays = weekdays.map { |wd| WEEKDAYS[wd]}
78
- raise ArgumentError, "Scheduler: Start date is not on one of the weekdays" unless @weekdays.include? @start_date.cwday
79
- raise ArgumentError, "Scheduler: Skip date is not on a valid weekday" if !@skips.reduce(true) { |accum, skip| accum && @weekdays.include?(skip.cwday) }
97
+ @weekdays = weekdays.map { |wd| WEEKDAYS[wd] }
98
+ unless @weekdays.include? @start_date.cwday
99
+ raise ArgumentError, 'Scheduler: Start date is not on one of the weekdays'
100
+ end
101
+ unless @skips.reduce(true) { |accum, skip| accum && @weekdays.include?(skip.cwday) }
102
+ raise ArgumentError, 'Scheduler: Skip date is not on a valid weekday'
103
+ end
80
104
 
81
- @start_time = time_span_to_seconds(start_time) rescue raise(ArgumentError, "error converting start time. Use hh:mm: #{start_time} ")
82
- @end_time = time_span_to_seconds(end_time) rescue raise(ArgumentError, "error converting end time. Use hh:mm: #{end_time}")
83
- @start_times = start_times.map { |x| time_span_to_seconds(x)}
84
- @end_times = end_times.map { |x| time_span_to_seconds(x)}
105
+ @start_time = begin
106
+ time_span_to_seconds(start_time)
107
+ rescue StandardError
108
+ raise(ArgumentError, "error converting start time. Use hh:mm: #{start_time} ")
109
+ end
110
+ @end_time = begin
111
+ time_span_to_seconds(end_time)
112
+ rescue StandardError
113
+ raise(ArgumentError, "error converting end time. Use hh:mm: #{end_time}")
114
+ end
115
+ @start_times = start_times.map { |x| time_span_to_seconds(x) }
116
+ @end_times = end_times.map { |x| time_span_to_seconds(x) }
85
117
  end
86
118
 
87
119
  def string_to_date(string_date)
88
- Date.strptime(string_date, "%b-%d-%Y") rescue fail "string to date in scheduler.rb"
120
+ Date.strptime(string_date, '%b-%d-%Y')
121
+ rescue StandardError
122
+ raise "string to date in scheduler.rb #{string_date}"
89
123
  end
90
124
 
91
125
  def strings_to_date_time(string_date, string_time)
92
- DateTime.strptime(string_date + " " + string_time, "%b-%d-%Y %H:%M")
126
+ DateTime.strptime(string_date + ' ' + string_time, '%b-%d-%Y %H:%M')
93
127
  end
94
128
 
95
129
  def time_span_to_seconds(string_time)
96
130
  result = string_time.match(/(\d\d):(\d\d)/)
97
131
  result[1].to_i.hours + result[2].to_i.minutes
98
132
  end
99
-
100
133
  end
@@ -1,32 +1,39 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pry'
2
4
 
3
5
  module CourseGen
6
+ # Class Templates represent a Coursegen template.
4
7
  class Templates < Thor::Group
5
8
  include Thor::Actions
6
9
 
10
+ # Generate_all generates a Coursegen site using the default template.
7
11
  def generate_all
8
- copy_template_dir("layouts", "layouts")
9
- copy_template_dir("content/bootstrap", "content/bootstrap")
10
- copy_template_dir("content/content", "content/content")
11
- delete_target_file("lib/default.rb")
12
- copy_template_dir("lib", "lib")
13
- delete_target_file("Rules")
14
- copy_template_file("Rules", "Rules")
15
- copy_template_file("Guardfile", "Guardfile")
16
- copy_template_file(".gitignore", ".gitignore")
17
- copy_template_file("cg_config.rb", "cg_config.rb")
18
- copy_template_file("cg_config.rb_sample", "cg_config.rb_sample")
19
- delete_target_file("content/stylesheet.css")
20
- delete_target_file("content/index.html")
21
- delete_target_file("layouts/default.html")
22
- create_empty_dir("content/images")
12
+ copy_template_dir('layouts', 'layouts')
13
+ copy_template_dir('content/bootstrap', 'content/bootstrap')
14
+ copy_template_dir('content/content', 'content/content')
15
+ delete_target_file('lib/default.rb')
16
+ copy_template_dir('lib', 'lib')
17
+ delete_target_file('Rules')
18
+ copy_template_file('Rules', 'Rules')
19
+ copy_template_file('.gitignore', '.gitignore')
20
+ copy_template_file('cg_config.rb', 'cg_config.rb')
21
+ copy_template_file('cg_config.rb_sample', 'cg_config.rb_sample')
22
+ delete_target_file('content/stylesheet.css')
23
+ delete_target_file('content/index.html')
24
+ delete_target_file('layouts/default.html')
25
+ create_empty_dir('content/images')
23
26
  end
24
27
 
28
+ # Valid_cg_directory? checks if the underlying directory is a valid
29
+ # nanoc site.
30
+ #
31
+ # This method is used by Coursegen::CLI.
25
32
  def valid_cg_directory?
26
33
  valid = true
27
- list = ["Rules", "nanoc.yaml", "content", "lib"]
34
+ list = ['Rules', 'nanoc.yaml', 'content', 'lib']
28
35
  list.each do |filename|
29
- if !File.exists?(filename)
36
+ unless File.exist?(filename)
30
37
  valid = false
31
38
  say("Required file not found: #{filename}")
32
39
  end
@@ -38,22 +45,22 @@ module CourseGen
38
45
  Pathname.new(File.dirname(__FILE__)).parent.parent.to_s
39
46
  end
40
47
 
41
- # invoke methods from Thor::Actions
48
+ # invoke methods from Thor::Actions
42
49
  def initialize
43
50
  super
44
51
  destination_root = Dir.getwd
45
52
  end
46
53
 
47
- def create_empty_dir to
54
+ def create_empty_dir(to)
48
55
  empty_directory(to)
49
56
  end
50
57
 
51
- def copy_template_dir from, to
52
- directory("templates/#{from}", "#{to}")
58
+ def copy_template_dir(from, to)
59
+ directory("templates/#{from}", to.to_s)
53
60
  end
54
61
 
55
- def copy_template_file from, to
56
- template("templates/#{from}", "#{to}")
62
+ def copy_template_file(from, to)
63
+ template("templates/#{from}", to.to_s)
57
64
  end
58
65
 
59
66
  def delete_target_file(to)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Coursegen
2
- VERSION = "0.8.1"
4
+ VERSION = '0.9.3'
3
5
  end
@@ -1,52 +1,62 @@
1
- require_relative "./spec_helper.rb"
2
- describe Lectures do
3
- before do
4
- mocks1_templates =
5
- [["/lectures/intro/wonders/index.html", "subsection", 0],
6
- ["/lectures/intro/wonders/page2.md.erb", "page", 1],
7
- ["/lectures/intro/wonders/page3.md.erb", "page", 2],
8
- ["/lectures/intro/wonder2/index.html", "subsection", 1],
9
- ["/lectures/intro/wonder2/page22.md.erb", "page", 1],
10
- ["/lectures/intro/wonder2/page32.md.erb/", "page",2 ]
11
- ]
12
- @citems1 = mocks1_templates.map { |i, t, o| CItem.new(nil, i, t, o) }
13
- @sect = Lectures.new "intro", @citems1
14
- end
15
-
16
- it "correctly counts subsections" do
17
- expect(@sect.subsections.length).to eq 2
18
- end
19
-
20
- it "correctly handles next from page to page " do
21
- expect(@sect.next_for(@citems1[1])).to eq @citems1[2]
22
- end
23
-
24
- it "correctly handles prev from page to page " do
25
- expect(@sect.previous_for(@citems1[2])).to eq @citems1[1]
26
- end
27
-
28
- it "correctly handles prev from first page in section " do
29
- expect(@sect.previous_for(@citems1[1])).to eq @citems1[1]
30
- end
31
-
32
- it "correctly handles next from last page in section " do
33
- expect(@sect.next_for(@citems1[5])).to eq @citems1[5]
34
- end
35
-
36
-
37
- it "correctly handles next from subsection to subseciton" do
38
- expect(@sect.next_for(@citems1[0])).to eq @citems1[3]
39
- end
40
-
41
- it "correctly handles next from last subsection" do
42
- expect(@sect.next_for(@citems1[3])).to eq @citems1[3]
43
- end
44
-
45
- it { expect(@citems1[0].lecture_number).to eq 1 }
46
- it { expect(@citems1[1].lecture_number).to eq 1 }
47
- it { expect(@citems1[2].lecture_number).to eq 2 }
48
- it { expect(@citems1[3].lecture_number).to eq 3 }
49
- it { expect(@citems1[4].lecture_number).to eq 3 }
50
- it { expect(@citems1[5].lecture_number).to eq 4 }
1
+ require_relative './spec_helper.rb'
51
2
 
3
+ describe Lectures do
4
+ before do
5
+ mocks1_templates =
6
+ [['/lectures/intro/wonders/index.html', 'subsection', 0],
7
+ ['/lectures/intro/wonders/page2.md.erb', 'page', 1],
8
+ ['/lectures/intro/wonders/page3.md.erb', 'page', 2],
9
+ ['/lectures/intro/wonder2/index.html', 'subsection', 1],
10
+ ['/lectures/intro/wonder2/page22.md.erb', 'page', 1],
11
+ ['/lectures/intro/wonder2/page32.md.erb/', 'page', 2]]
12
+ @citems1 = mocks1_templates.map { |i, t, o| CItem.new(nil, i, t, o) }
13
+ @schd = Scheduler.new
14
+ @schd.setup_from_args(
15
+ start: 'jan-17-2017',
16
+ weekdays: %i[tuesday wednesday thursday],
17
+ start_times: %w[15:30 14:00 15:30],
18
+ end_times: %w[16:50 16:00 16:50],
19
+ number: 39,
20
+ start_time: '15:30',
21
+ end_time: '16:50',
22
+ skips: %w[feb-9-2017 feb-21-2017 feb-22-2017 feb-23-2017 apr-11-2017
23
+ apr-12-2017 apr-13-2017 apr-18-2017 apr-19-2017]
24
+ )
25
+ @sect = Lectures.new('intro', @citems1, @schd)
26
+ end
27
+
28
+ it 'correctly counts subsections' do
29
+ expect(@sect.subsections.length).to eq 2
30
+ end
31
+
32
+ it 'correctly handles next from page to page' do
33
+ expect(@sect.next_for(@citems1[1])).to eq @citems1[2]
34
+ end
35
+
36
+ it 'correctly handles prev from page to page' do
37
+ expect(@sect.previous_for(@citems1[2])).to eq @citems1[1]
38
+ end
39
+
40
+ it 'correctly handles prev from first page in section' do
41
+ expect(@sect.previous_for(@citems1[1])).to eq @citems1[1]
42
+ end
43
+
44
+ it 'correctly handles next from last page in section' do
45
+ expect(@sect.next_for(@citems1[5])).to eq @citems1[5]
46
+ end
47
+
48
+ it 'correctly handles next from subsection to subsecton' do
49
+ expect(@sect.next_for(@citems1[0])).to eq @citems1[3]
50
+ end
51
+
52
+ it 'correctly handles next from last subsection' do
53
+ expect(@sect.next_for(@citems1[3])).to eq @citems1[3]
54
+ end
55
+
56
+ it { expect(@citems1[0].lecture_number).to eq 1 }
57
+ it { expect(@citems1[1].lecture_number).to eq 1 }
58
+ it { expect(@citems1[2].lecture_number).to eq 2 }
59
+ it { expect(@citems1[3].lecture_number).to eq 3 }
60
+ it { expect(@citems1[4].lecture_number).to eq 3 }
61
+ it { expect(@citems1[5].lecture_number).to eq 4 }
52
62
  end
@@ -1,19 +1,31 @@
1
- require_relative "./spec_helper.rb"
2
- describe "Does it work?" do
1
+ require_relative './spec_helper.rb'
2
+
3
+ describe 'Does it work?' do
3
4
  before do
4
- @abc = 1
5
5
  mocks1_templates =
6
- [["/lectures/intro/wonders/", "subsection", 0],
7
- ["/lectures/intro/wonders/page2/", "page", 1],
8
- ["/lectures/intro/wonders/page3/", "page", 2],
9
- ["/lectures/intro/wonder2/", "subsection", 1],
10
- ["/lectures/intro/wonder2/page22/", "page", 1],
11
- ["/lectures/intro/wonder2/page32/", "page", 2]]
6
+ [['/lectures/intro/wonders/index.html', 'subsection', 0],
7
+ ['/lectures/intro/wonders/page2.md.erb', 'page', 1],
8
+ ['/lectures/intro/wonders/page3.md.erb', 'page', 2],
9
+ ['/lectures/intro/wonder2/index.html', 'subsection', 1],
10
+ ['/lectures/intro/wonder2/page22.md.erb', 'page', 1],
11
+ ['/lectures/intro/wonder2/page32.md.erb', 'page', 2]]
12
12
  @citems1 = mocks1_templates.map { |i, t, o| CItem.new(nil, i, t, o) }
13
- @sect = Lectures.new "intro", @citems1
13
+ @schd = Scheduler.new
14
+ @schd.setup_from_args(
15
+ start: 'jan-17-2017',
16
+ weekdays: %i[tuesday wednesday thursday],
17
+ start_times: %w[15:30 14:00 15:30],
18
+ end_times: %w[16:50 16:00 16:50],
19
+ number: 39,
20
+ start_time: '15:30',
21
+ end_time: '16:50',
22
+ skips: %w[feb-9-2017 feb-21-2017 feb-22-2017 feb-23-2017 apr-11-2017
23
+ apr-12-2017 apr-13-2017 apr-18-2017 apr-19-2017]
24
+ )
25
+ @sect = Lectures.new('intro', @citems1, @schd)
14
26
  end
15
27
 
16
- it "correctly counts subsections" do
17
- expect (@abc).to eq 1
28
+ it 'correctly counts subsections' do
29
+ expect(@sect).to be_truthy
18
30
  end
19
31
  end
@@ -1,75 +1,135 @@
1
1
  require 'active_support/core_ext/date/conversions'
2
2
 
3
- require_relative "./spec_helper.rb"
3
+ require_relative './spec_helper.rb'
4
4
 
5
5
  def s2d(string_date)
6
- Date.strptime(string_date, "%b-%d-%Y")
6
+ Date.strptime(string_date, '%b-%d-%Y')
7
7
  end
8
8
 
9
9
  describe Scheduler do
10
- let(:sched) {Scheduler.new}
11
- let(:target_date) {"nov-25-2013"}
10
+ let(:sched) { Scheduler.new }
11
+ let(:target_date) { 'nov-25-2013' }
12
12
  let(:target_date_bin) { s2d(target_date) }
13
13
 
14
- describe "Single day scheduler" do
15
- it "knows date for first event" do
16
- sched.setup_from_args(start: target_date, weekdays: [:monday], number: 1)
14
+ describe 'Single day scheduler' do
15
+ it 'knows date for first event' do
16
+ sched.setup_from_args(
17
+ start: target_date,
18
+ weekdays: [:monday],
19
+ number: 1,
20
+ start_time: '10:00',
21
+ end_time: '11:00'
22
+ )
17
23
  a_date = sched.event_date_by_index 0
18
24
  expect(a_date).to eq target_date_bin
19
25
  end
20
26
 
21
- it "knows date for second event" do
22
- sched.setup_from_args(start: target_date, weekdays: [:monday], number: 2)
27
+ it 'knows date for second event' do
28
+ sched.setup_from_args(
29
+ start: target_date,
30
+ weekdays: [:monday],
31
+ number: 2,
32
+ start_time: '10:00',
33
+ end_time: '11:00'
34
+ )
23
35
  a_date = sched.event_date_by_index 1
24
36
  expect(a_date).to eq target_date_bin + 7
25
37
  end
26
38
  end
27
39
 
28
- describe "Double day scheduler" do
29
- it "knows date for first event" do
30
- sched.setup_from_args(start: target_date, weekdays: [:monday, :tuesday], number: 1)
40
+ describe 'Double day scheduler' do
41
+ it 'knows date for first event' do
42
+ sched.setup_from_args(
43
+ start: target_date,
44
+ weekdays: %i[monday tuesday],
45
+ number: 1,
46
+ start_time: '10:00',
47
+ end_time: '11:00'
48
+ )
31
49
  a_date = sched.event_date_by_index 0
32
50
  expect(a_date).to eq target_date_bin
33
51
  end
34
52
 
35
- it "knows date for second event" do
36
- sched.setup_from_args(start: target_date, weekdays: [:monday, :tuesday], number: 2)
53
+ it 'knows date for second event' do
54
+ sched.setup_from_args(
55
+ start: target_date,
56
+ weekdays: %i[monday tuesday],
57
+ number: 2,
58
+ start_time: '10:00',
59
+ end_time: '11:00'
60
+ )
37
61
  a_date = sched.event_date_by_index 1
38
62
  expect(a_date).to eq target_date_bin + 1
39
63
  end
40
64
 
41
- it "knows date for third event" do
42
- sched.setup_from_args(start: target_date, weekdays: [:monday, :tuesday], number: 3)
65
+ it 'knows date for third event' do
66
+ sched.setup_from_args(
67
+ start: target_date,
68
+ weekdays: %i[monday tuesday],
69
+ number: 3,
70
+ start_time: '10:00',
71
+ end_time: '11:00'
72
+ )
43
73
  a_date = sched.event_date_by_index 2
44
74
  expect(a_date).to eq target_date_bin + 7
45
75
  end
46
76
 
47
- it "knows date for fourth event" do
48
- sched.setup_from_args(start: target_date, weekdays: [:monday, :tuesday], number: 4)
77
+ it 'knows date for fourth event' do
78
+ sched.setup_from_args(
79
+ start: target_date,
80
+ weekdays: %i[monday tuesday],
81
+ number: 4,
82
+ start_time: '10:00',
83
+ end_time: '11:00'
84
+ )
49
85
  a_date = sched.event_date_by_index 3
50
86
  expect(a_date).to eq target_date_bin + 7 + 1
51
87
  end
52
88
  end
53
89
 
54
- describe "Tripple day scheduler" do
55
- it "knows date for first event" do
56
- sched.setup_from_args(start: target_date, weekdays: [:monday, :wednesday, :friday], number: 1)
90
+ describe 'Triple day scheduler' do
91
+ it 'knows date for first event' do
92
+ sched.setup_from_args(
93
+ start: target_date,
94
+ weekdays: %i[monday wednesday friday],
95
+ number: 1,
96
+ start_time: '10:00',
97
+ end_time: '11:00'
98
+ )
57
99
  a_date = sched.event_date_by_index 0
58
100
  expect(a_date).to eq target_date_bin
59
101
  end
60
- it "knows date for second event" do
61
- sched.setup_from_args(start: target_date, weekdays: [:monday, :wednesday, :friday], number: 2)
102
+ it 'knows date for second event' do
103
+ sched.setup_from_args(
104
+ start: target_date,
105
+ weekdays: %i[monday wednesday friday],
106
+ number: 2,
107
+ start_time: '10:00',
108
+ end_time: '11:00'
109
+ )
62
110
  a_date = sched.event_date_by_index 1
63
111
  expect(a_date).to eq target_date_bin + 2
64
112
  end
65
113
 
66
- it "knows date for third event" do
67
- sched.setup_from_args(start: target_date, weekdays: [:monday, :wednesday, :friday], number: 3)
114
+ it 'knows date for third event' do
115
+ sched.setup_from_args(
116
+ start: target_date,
117
+ weekdays: %i[monday wednesday friday],
118
+ number: 3,
119
+ start_time: '10:00',
120
+ end_time: '11:00'
121
+ )
68
122
  a_date = sched.event_date_by_index 2
69
123
  expect(a_date).to eq target_date_bin + 4
70
124
  end
71
- it "knows date for fourth event" do
72
- sched.setup_from_args(start: target_date, weekdays: [:monday, :wednesday, :friday], number: 4)
125
+ it 'knows date for fourth event' do
126
+ sched.setup_from_args(
127
+ start: target_date,
128
+ weekdays: %i[monday wednesday friday],
129
+ number: 4,
130
+ start_time: '10:00',
131
+ end_time: '11:00'
132
+ )
73
133
  a_date = sched.event_date_by_index 3
74
134
  expect(a_date).to eq target_date_bin + 7
75
135
  end