daigaku 0.2.0 → 1.0.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 (88) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +7 -4
  3. data/CODE_OF_CONDUCT.md +77 -0
  4. data/README.md +11 -11
  5. data/bin/daigaku +6 -2
  6. data/daigaku.gemspec +22 -26
  7. data/lib/daigaku.rb +0 -1
  8. data/lib/daigaku/chapter.rb +3 -4
  9. data/lib/daigaku/coloring.rb +22 -27
  10. data/lib/daigaku/configuration.rb +25 -28
  11. data/lib/daigaku/congratulator.rb +17 -5
  12. data/lib/daigaku/course.rb +9 -8
  13. data/lib/daigaku/exceptions.rb +0 -2
  14. data/lib/daigaku/generator.rb +13 -15
  15. data/lib/daigaku/github_client.rb +5 -5
  16. data/lib/daigaku/loadable.rb +23 -14
  17. data/lib/daigaku/loading/chapters.rb +0 -2
  18. data/lib/daigaku/loading/courses.rb +0 -2
  19. data/lib/daigaku/loading/units.rb +0 -2
  20. data/lib/daigaku/markdown.rb +1 -0
  21. data/lib/daigaku/markdown/printer.rb +89 -0
  22. data/lib/daigaku/markdown/ruby_doc.rb +15 -15
  23. data/lib/daigaku/solution.rb +23 -15
  24. data/lib/daigaku/storeable.rb +11 -12
  25. data/lib/daigaku/task.rb +1 -1
  26. data/lib/daigaku/terminal.rb +3 -4
  27. data/lib/daigaku/terminal/cli.rb +8 -8
  28. data/lib/daigaku/terminal/courses.rb +22 -19
  29. data/lib/daigaku/terminal/output.rb +46 -53
  30. data/lib/daigaku/terminal/setup.rb +13 -18
  31. data/lib/daigaku/terminal/solutions.rb +27 -32
  32. data/lib/daigaku/terminal/welcome.rb +9 -11
  33. data/lib/daigaku/test.rb +7 -10
  34. data/lib/daigaku/test_result.rb +54 -21
  35. data/lib/daigaku/unit.rb +2 -4
  36. data/lib/daigaku/version.rb +1 -1
  37. data/lib/daigaku/views.rb +29 -33
  38. data/lib/daigaku/views/chapters_menu.rb +16 -20
  39. data/lib/daigaku/views/courses_menu.rb +12 -15
  40. data/lib/daigaku/views/main_menu.rb +23 -23
  41. data/lib/daigaku/views/menu.rb +14 -18
  42. data/lib/daigaku/views/splash.rb +11 -13
  43. data/lib/daigaku/views/subscriber.rb +38 -0
  44. data/lib/daigaku/views/task_view.rb +97 -80
  45. data/lib/daigaku/views/top_bar.rb +4 -10
  46. data/lib/daigaku/views/units_menu.rb +16 -21
  47. data/lib/daigaku/window.rb +12 -70
  48. data/spec/daigaku/chapter_spec.rb +23 -18
  49. data/spec/daigaku/coloring_spec.rb +0 -1
  50. data/spec/daigaku/configuration_spec.rb +54 -50
  51. data/spec/daigaku/congratulator_spec.rb +11 -8
  52. data/spec/daigaku/course_spec.rb +75 -52
  53. data/spec/daigaku/generator_spec.rb +24 -25
  54. data/spec/daigaku/github_client_spec.rb +17 -18
  55. data/spec/daigaku/loading/chapters_spec.rb +2 -3
  56. data/spec/daigaku/loading/courses_spec.rb +2 -3
  57. data/spec/daigaku/loading/units_spec.rb +4 -5
  58. data/spec/daigaku/markdown/ruby_doc_spec.rb +12 -6
  59. data/spec/daigaku/reference_solution_spec.rb +8 -10
  60. data/spec/daigaku/solution_spec.rb +21 -22
  61. data/spec/daigaku/storeable_spec.rb +12 -10
  62. data/spec/daigaku/task_spec.rb +3 -4
  63. data/spec/daigaku/terminal/cli_spec.rb +29 -21
  64. data/spec/daigaku/terminal/courses_spec.rb +104 -99
  65. data/spec/daigaku/terminal/output_spec.rb +44 -39
  66. data/spec/daigaku/terminal/setup_spec.rb +1 -3
  67. data/spec/daigaku/terminal/solutions_spec.rb +0 -2
  68. data/spec/daigaku/terminal/welcome_spec.rb +0 -2
  69. data/spec/daigaku/terminal_spec.rb +5 -7
  70. data/spec/daigaku/test_example_spec.rb +16 -14
  71. data/spec/daigaku/test_result_spec.rb +21 -25
  72. data/spec/daigaku/test_spec.rb +11 -12
  73. data/spec/daigaku/unit_spec.rb +24 -27
  74. data/spec/daigaku/views/chapters_menu_spec.rb +0 -1
  75. data/spec/daigaku/views/courses_menu_spec.rb +0 -1
  76. data/spec/daigaku/views/menu_spec.rb +1 -2
  77. data/spec/daigaku/views/task_view_spec.rb +0 -2
  78. data/spec/daigaku/views/units_menu_spec.rb +0 -1
  79. data/spec/daigaku/views_spec.rb +0 -1
  80. data/spec/daigaku_spec.rb +9 -12
  81. data/spec/path_helpers_spec.rb +11 -12
  82. data/spec/resource_helpers_spec.rb +11 -12
  83. data/spec/spec_helper.rb +3 -4
  84. data/spec/support/macros/content_helpers.rb +16 -17
  85. data/spec/support/macros/mock_helpers.rb +6 -6
  86. data/spec/support/macros/path_helpers.rb +15 -15
  87. data/spec/support/macros/resource_helpers.rb +34 -35
  88. metadata +32 -44
@@ -1,23 +1,26 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Daigaku::Congratulator do
4
-
5
- it "responds to #message" do
4
+ it 'responds to #message' do
6
5
  expect(Daigaku::Congratulator).to respond_to :message
7
6
  end
8
7
 
9
- describe "#message" do
10
- it "returns a string" do
8
+ describe '#message' do
9
+ it 'returns a string' do
11
10
  expect(Daigaku::Congratulator.message).to be_a String
12
11
  end
13
12
 
14
- it "returns a random congratulation method" do
15
- messages = 1.upto(10).map { |i| Daigaku::Congratulator.message }
13
+ it 'returns a random congratulation method' do
14
+ messages = 1.upto(10).map { |_| Daigaku::Congratulator.message }
16
15
  expect(messages.uniq.count).to be > 1
17
16
  end
18
17
 
19
- it "receives the congratulation texts from a Terminal text" do
20
- expect(Daigaku::Terminal).to receive(:text).with(:congratulations) { '' }
18
+ it 'receives the congratulation texts from a Terminal text' do
19
+ expect(Daigaku::Terminal)
20
+ .to receive(:text)
21
+ .with(:congratulations)
22
+ .and_return('')
23
+
21
24
  Daigaku::Congratulator.message
22
25
  end
23
26
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Daigaku::Course do
4
-
5
4
  it { is_expected.to respond_to :title }
6
5
  it { is_expected.to respond_to :chapters }
7
6
  it { is_expected.to respond_to :path }
@@ -22,73 +21,82 @@ describe Daigaku::Course do
22
21
 
23
22
  subject { Daigaku::Course.new(course_path) }
24
23
 
25
- it "responds to ::unzip" do
24
+ it 'responds to .unzip' do
26
25
  expect(Daigaku::Course).to respond_to :unzip
27
26
  end
28
27
 
29
- it "has the prescribed title" do
28
+ it 'has the prescribed title' do
30
29
  expect(subject.title).to eq course_titles.first
31
30
  end
32
31
 
33
- it "has the prescribed path" do
32
+ it 'has the prescribed path' do
34
33
  expect(subject.path).to eq course_path
35
34
  end
36
35
 
37
- it "is not started by default" do
38
- expect(subject.started?).to be_falsey
36
+ it 'is not started by default' do
37
+ expect(subject.started?).to be false
39
38
  end
40
39
 
41
- it "is not mastered by default" do
42
- expect(subject.mastered?).to be_falsey
40
+ it 'is not mastered by default' do
41
+ expect(subject.mastered?).to be false
43
42
  end
44
43
 
45
- describe "#chapters" do
46
- it "loads the prescribed number of chapters" do
44
+ describe '#chapters' do
45
+ it 'loads the prescribed number of chapters' do
47
46
  expect(subject.chapters.count).to eq available_chapters(course_path).count
48
47
  end
49
48
 
50
- it "lazy-loads the chapters" do
49
+ it 'lazy-loads the chapters' do
51
50
  expect(subject.instance_variable_get(:@chapters)).to be_nil
52
51
  subject.chapters
53
52
  expect(subject.instance_variable_get(:@chapters)).not_to be_nil
54
53
  end
55
54
  end
56
55
 
57
- describe "#started?" do
58
- it "returns true if at least one chapter has been started" do
59
- allow(subject.chapters.first).to receive(:started?) { true }
56
+ describe '#started?' do
57
+ it 'returns true if at least one chapter has been started' do
58
+ allow(subject.chapters.first).to receive(:started?).and_return(true)
60
59
  expect(subject.started?).to be true
61
60
  end
62
61
 
63
- it "returns false if no chapter has been started" do
64
- allow_any_instance_of(Daigaku::Chapter).to receive(:started?) { false }
62
+ it 'returns false if no chapter has been started' do
63
+ allow_any_instance_of(Daigaku::Chapter)
64
+ .to receive(:started?)
65
+ .and_return(false)
66
+
65
67
  expect(subject.started?).to be false
66
68
  end
67
69
  end
68
70
 
69
- describe "#mastered?" do
70
- it "returns true if all chapters have been mastered" do
71
- allow_any_instance_of(Daigaku::Chapter).to receive(:mastered?) { true }
71
+ describe '#mastered?' do
72
+ it 'returns true if all chapters have been mastered' do
73
+ allow_any_instance_of(Daigaku::Chapter)
74
+ .to receive(:mastered?)
75
+ .and_return(true)
76
+
72
77
  expect(subject.mastered?).to be true
73
78
  end
74
79
 
75
- it "returns false unless all chapters have been mastered" do
76
- allow_any_instance_of(Daigaku::Chapter).to receive(:mastered?) { false }
77
- allow(subject.chapters.first).to receive(:mastered?) { true }
80
+ it 'returns false unless all chapters have been mastered' do
81
+ allow_any_instance_of(Daigaku::Chapter)
82
+ .to receive(:mastered?)
83
+ .and_return(false)
84
+
85
+ allow(subject.chapters.first).to receive(:mastered?).and_return(true)
78
86
  expect(subject.mastered?).to be false
79
87
  end
80
88
  end
81
89
 
82
- describe "#key" do
83
- it "returns the courses store key for the given key name" do
84
- allow(subject).to receive(:title) { '1-Course title' }
85
- key = "courses/course_title/some_key"
90
+ describe '#key' do
91
+ it 'returns the courses store key for the given key name' do
92
+ allow(subject).to receive(:title).and_return('1-Course title')
93
+ key = 'courses/course_title/some_key'
86
94
  expect(subject.key('1-some Key')).to eq key
87
95
  end
88
96
  end
89
97
 
90
- describe "#author" do
91
- it "returns the author of Github courses form the store" do
98
+ describe '#author' do
99
+ it 'returns the author of Github courses form the store' do
92
100
  author = 'author'
93
101
  QuickStore.store.set(subject.key(:author), author)
94
102
 
@@ -97,77 +105,87 @@ describe Daigaku::Course do
97
105
  end
98
106
  end
99
107
 
100
- describe "::unzip" do
108
+ describe '.unzip' do
101
109
  before do
102
110
  Daigaku.config.courses_path = local_courses_path
103
- @zip_file_name = "unzip/repo.zip"
111
+
112
+ @zip_file_name = 'unzip/repo.zip'
104
113
  @zip_file_path = File.join(courses_basepath, @zip_file_name)
105
- @file_content = prepare_download(@zip_file_name)
114
+ @file_content = prepare_download(@zip_file_name)
106
115
  end
107
116
 
108
117
  after do
109
118
  cleanup_download(@zip_file_name)
110
119
  dir = File.dirname(@zip_file_path)
111
- FileUtils.rm_r(dir) if Dir.exist?(dir)
120
+ remove_directory(dir)
112
121
  end
113
122
 
114
123
  def expect_course_dirs_exists_to_be(boolean)
115
124
  unit_dirs(course_dir_names.first).each do |chapter_dirs|
116
125
  chapter_dirs.each do |dir|
117
- path = [dir.split('/')[0..-4], 'unzip', dir.split('/')[-3..-1]].join('/')
126
+ path = [
127
+ dir.split('/')[0..-4],
128
+ 'unzip',
129
+ dir.split('/')[-3..-1]
130
+ ].join('/')
131
+
118
132
  expect(Dir.exist?(path)).to be boolean
119
133
  end
120
134
  end
121
135
  end
122
136
 
123
- it "unzips a course zip file" do
137
+ it 'unzips a course zip file' do
124
138
  expect_course_dirs_exists_to_be false
125
139
  Daigaku::Course.unzip(@zip_file_path)
126
140
  expect_course_dirs_exists_to_be true
127
141
  end
128
142
 
129
- it "returns the unzipped course" do
130
- dir = course_dirs.first
131
- path = File.join(File.dirname(dir), 'unzip', File.basename(dir))
132
- course = Daigaku::Course.new(path)
143
+ it 'returns the unzipped course' do
144
+ dir = course_dirs.first
145
+ path = File.join(File.dirname(dir), 'unzip', File.basename(dir))
133
146
 
134
- expect(Daigaku::Course.unzip(@zip_file_path).to_json).to eql course.to_json
147
+ actual = Daigaku::Course.unzip(@zip_file_path)
148
+ expected = Daigaku::Course.new(path)
149
+
150
+ expect(actual.path).to eq expected.path
151
+ expect(actual.title).to eq expected.title
152
+ expect(actual.author).to eq expected.author
135
153
  end
136
154
 
137
- it "removes the zip file" do
155
+ it 'removes the zip file' do
138
156
  expect(File.exist?(@zip_file_path)).to be true
139
157
  Daigaku::Course.unzip(@zip_file_path)
140
158
  expect(File.exist?(@zip_file_path)).to be false
141
159
  end
142
160
 
143
- context "with the same course already available:" do
161
+ context 'with the same course already available' do
144
162
  before do
145
163
  dir = course_dirs.first
146
164
  @path = File.join(File.dirname(dir), 'unzip', File.basename(dir))
147
165
  @old_chapter_dir = File.join(@path, 'Old_chapter')
148
166
 
149
- FileUtils.mkdir_p(@old_chapter_dir)
167
+ create_directory(@old_chapter_dir)
150
168
  end
151
169
 
152
- it "overwrites all chapters" do
170
+ it 'overwrites all chapters' do
153
171
  expect(Dir.exist?(@old_chapter_dir)).to be true
154
172
  Daigaku::Course.unzip(@zip_file_path)
155
173
  expect(Dir.exist?(@old_chapter_dir)).to be false
156
174
  end
157
175
 
158
- context "if an errior occurs" do
176
+ context 'if an error occurs' do
159
177
  before do
160
178
  allow_any_instance_of(Zip::File)
161
- .to receive(:extract) { raise Exception.new }
179
+ .to receive(:extract) { raise StandardError.new, 'error' }
162
180
  end
163
181
 
164
- it "restores an old state if an error occurs" do
182
+ it 'restores an old state' do
165
183
  Daigaku::Course.unzip(@zip_file_path)
166
184
  expect(Dir.exist?(@old_chapter_dir)).to be true
167
185
  expect(Dir.exist?("#{@path}_old")).to be false
168
186
  end
169
187
 
170
- it "keeps the zip file if an error occurs" do
188
+ it 'keeps the zip file' do
171
189
  expect(File.exist?(@zip_file_path)).to be true
172
190
  Daigaku::Course.unzip(@zip_file_path)
173
191
  expect(File.exist?(@zip_file_path)).to be true
@@ -175,12 +193,12 @@ describe Daigaku::Course do
175
193
  end
176
194
  end
177
195
 
178
- context "with the github_repo option:" do
196
+ context 'with the github_repo option:' do
179
197
  before { @github_course_dir = prepare_github_course }
180
- after { FileUtils.rm_r(@github_course_dir) }
198
+ after { remove_directory(@github_course_dir) }
181
199
 
182
- it "removes the '-master' from the root directory" do
183
- zip_file_name = "unzip/repo-master.zip"
200
+ it 'removes the "-master" from the root directory' do
201
+ zip_file_name = 'unzip/repo-master.zip'
184
202
  zip_file_path = File.join(courses_basepath, zip_file_name)
185
203
  prepare_github_download(zip_file_name)
186
204
 
@@ -189,7 +207,12 @@ describe Daigaku::Course do
189
207
 
190
208
  unit_dirs("#{course_dir_names.first}-master").each do |chapter_dirs|
191
209
  chapter_dirs.each do |dir|
192
- path = [dir.split('/')[0..-4], 'unzip', dir.split('/')[-3..-1]].join('/')
210
+ path = [
211
+ dir.split('/')[0..-4],
212
+ 'unzip',
213
+ dir.split('/')[-3..-1]
214
+ ].join('/')
215
+
193
216
  expect(Dir.exist?(path)).to be false
194
217
  end
195
218
  end
@@ -1,57 +1,57 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Daigaku::Generator do
4
-
5
- it { is_expected.to respond_to :scaffold }
6
- it { is_expected.to respond_to :prepare }
7
-
8
4
  subject { Daigaku::Generator.new }
9
5
 
10
6
  before do
11
7
  Daigaku.config.instance_variable_set(:@storage_file, local_storage_file)
12
8
  end
13
9
 
14
- describe "#scaffold" do
15
- it "creates blank solution files for all available units" do
10
+ it { is_expected.to respond_to :scaffold }
11
+ it { is_expected.to respond_to :prepare }
12
+
13
+ describe '#scaffold' do
14
+ it 'creates blank solution files for all available units' do
16
15
  subject.scaffold(courses_basepath, solutions_basepath)
17
16
 
18
17
  all_solution_file_paths.each do |file_path|
19
- expect(File.exist?(file_path)).to be_truthy
18
+ expect(File.exist?(file_path)).to be true
20
19
  end
21
20
  end
22
21
  end
23
22
 
24
- describe "#prepare" do
25
- context "with an existing solutions_path" do
23
+ describe '#prepare' do
24
+ context 'with an existing solutions_path' do
26
25
  before do
27
26
  Daigaku.configure do |config|
28
27
  config.solutions_path = solutions_basepath
29
- config.courses_path = local_courses_path
28
+ config.courses_path = local_courses_path
30
29
  end
31
30
 
32
31
  subject.prepare
33
32
  end
34
33
 
35
- it "generates a '<basepath>/.daigaku/daigaku.db.yml' file" do
36
- expect(File.exist?(local_storage_file)).to be_truthy
34
+ it 'generates a "<basepath>/.daigaku/daigaku.db.yml" file' do
35
+ expect(File.exist?(local_storage_file)).to be true
37
36
  end
38
37
 
39
- it "generates a '<basepath>/.daigaku/courses' folder" do
40
- expect(Dir.exist?(local_courses_path)).to be_truthy
38
+ it 'generates a "<basepath>/.daigaku/courses" folder' do
39
+ expect(Dir.exist?(local_courses_path)).to be true
41
40
  end
42
41
 
43
- it "saves the current config info" do
44
- expect(File.exist?(local_storage_file)).to be_truthy
42
+ it 'saves the current config info' do
43
+ expect(File.exist?(local_storage_file)).to be true
45
44
  expect(QuickStore.store.courses_path).to eq local_courses_path
46
45
  expect(QuickStore.store.solutions_path).to eq solutions_basepath
47
46
  end
48
47
  end
49
48
 
50
- context "with a missing solutions_path" do
49
+ context 'with a missing solutions_path' do
51
50
  before do
52
- FileUtils.rm_r(solutions_basepath) if Dir.exist?(solutions_basepath)
53
- base_path = File.dirname(Daigaku.config.courses_path)
54
- @solutions_path = File.join(base_path, 'solutions')
51
+ remove_directory(solutions_basepath)
52
+
53
+ base_path = File.dirname(Daigaku.config.courses_path)
54
+ @solutions_path = File.join(base_path, 'solutions')
55
55
 
56
56
  Daigaku.config.instance_variable_set(:@solutions_path, nil)
57
57
  Daigaku.configure { |config| config.courses_path = local_courses_path }
@@ -59,24 +59,23 @@ describe Daigaku::Generator do
59
59
  subject.prepare
60
60
  end
61
61
 
62
- it "generates a 'solutions' path on the base directory as the courses" do
62
+ it 'generates a "solutions" path on the base directory as the courses' do
63
63
  expect(Dir.exist?(@solutions_path)).to be_truthy
64
64
  end
65
65
 
66
- it "generates a '<basepath>/.daigaku/daigaku.db.yml' file" do
66
+ it 'generates a "<basepath>/.daigaku/daigaku.db.yml" file' do
67
67
  expect(File.exist?(local_storage_file)).to be_truthy
68
68
  end
69
69
 
70
- it "generates a '<basepath>/.daigaku/courses' folder" do
70
+ it 'generates a "<basepath>/.daigaku/courses" folder' do
71
71
  expect(Dir.exist?(local_courses_path)).to be_truthy
72
72
  end
73
73
 
74
- it "saves the current config info" do
74
+ it 'saves the current config info' do
75
75
  expect(File.exist?(local_storage_file)).to be_truthy
76
76
  expect(QuickStore.store.courses_path).to eq local_courses_path
77
77
  expect(QuickStore.store.solutions_path).to eq @solutions_path
78
78
  end
79
79
  end
80
80
  end
81
-
82
81
  end
@@ -1,19 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Daigaku::GithubClient do
4
-
5
- describe "#master_zip_url" do
6
- it "returns the url to the master zip file for the given github repo" do
7
- url = "https://github.com/a/b/archive/master.zip"
4
+ describe '#master_zip_url' do
5
+ it 'returns the url to the master zip file for the given github repo' do
6
+ url = 'https://github.com/a/b/archive/master.zip'
8
7
  expect(Daigaku::GithubClient.master_zip_url('a/b')).to eq url
9
8
  end
10
9
  end
11
10
 
12
- describe "#updated_at" do
13
- it "fetches the updated_at timestamp from the Github API" do
14
- expected_timestamp = "2015-10-21T12:00:00Z"
11
+ describe '#updated_at' do
12
+ it 'fetches the updated_at timestamp from the Github API' do
13
+ expected_timestamp = '2015-10-21T12:00:00Z'
15
14
  response = { updated_at: expected_timestamp }.to_json
16
- url = "https://api.github.com/repos/a/b"
15
+ url = 'https://api.github.com/repos/a/b'
17
16
 
18
17
  stub_request(:get, url)
19
18
  .with(headers: { 'Accept' => '*/*', 'User-Agent' => 'Ruby' })
@@ -25,29 +24,29 @@ describe Daigaku::GithubClient do
25
24
  end
26
25
  end
27
26
 
28
- describe "#updated?" do
27
+ describe '#updated?' do
29
28
  before do
30
- @received_timestamp = "2015-10-21T12:00:00Z"
29
+ @received_timestamp = '2015-10-21T12:00:00Z'
31
30
  response = { updated_at: @received_timestamp }.to_json
32
- url = "https://api.github.com/repos/a/b"
31
+ url = 'https://api.github.com/repos/a/b'
33
32
 
34
33
  stub_request(:get, url)
35
34
  .with(headers: { 'Accept' => '*/*', 'User-Agent' => 'Ruby' })
36
35
  .to_return(status: 200, body: response, headers: {})
37
36
  end
38
37
 
39
- it "returns true if content was pushed to the Github repo" do
40
- QuickStore.store.set('courses/b/updated_at', "2015-10-21T11:59:59Z")
41
- expect(Daigaku::GithubClient.updated?('a/b')).to be_truthy
38
+ it 'returns true if content was pushed to the Github repo' do
39
+ QuickStore.store.set('courses/b/updated_at', '2015-10-21T11:59:59Z')
40
+ expect(Daigaku::GithubClient.updated?('a/b')).to be true
42
41
  end
43
42
 
44
- it "returns false if no content was pushed to the Github repo" do
43
+ it 'returns false if no content was pushed to the Github repo' do
45
44
  QuickStore.store.set('courses/b/updated_at', @received_timestamp)
46
- expect(Daigaku::GithubClient.updated?('a/b')).to be_falsey
45
+ expect(Daigaku::GithubClient.updated?('a/b')).to be false
47
46
  end
48
47
 
49
- it "returns false if param is nil" do
50
- expect(Daigaku::GithubClient.updated?(nil)).to be_falsey
48
+ it 'returns false if param is nil' do
49
+ expect(Daigaku::GithubClient.updated?(nil)).to be false
51
50
  end
52
51
  end
53
52
  end