daigaku 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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