examiner 0.1.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 47e2a6a62cf3492f80d7e9e1e6025c2efea11e49
4
- data.tar.gz: 8f06bf636a2da099d282209e5e018069d13684bc
3
+ metadata.gz: f1799a2bafa8549f65627403149d87d4cc005a61
4
+ data.tar.gz: 40684b52306eb976819c05daf9bb6e73e82ceb05
5
5
  SHA512:
6
- metadata.gz: ad52fa7af0abfadcd4ea88bd9f3c4f9352b72362e2925db404362d79f3416100f67c21de99360f735e73d8275a0e345fc4ac7bed1817effea34772a9d8915391
7
- data.tar.gz: 8fa1fd9f36692ed873f77ab693ebcc49855649a6237ab61250b04e828fce137dff06856cc8140882e71b12ade06ce5abebb70391d2bb995524c11e0d8086e4e9
6
+ metadata.gz: 6c656506f027cc09729c0980a1710012f9f72a26bcfee10b5713a1da0984fbfe214582cb0cb3168b1c9b708cc3b8fea5e021e67b8d92df0d54dd465c7a7bdd04
7
+ data.tar.gz: 70d1c3ef7792ed8398527c4e22eb4e1a5884ed355d191006277c9393597f34c588eeb82bd5cff91a1af2bf7872ae3e823375c1bab5fade2b9862f6706fcc6087
data/README.md CHANGED
@@ -3,11 +3,9 @@
3
3
 
4
4
  # Examiner
5
5
 
6
- Grade a student's exercise solution.
6
+ Grade a student's exercise solution, assuming:
7
7
 
8
- Assumptions:
9
-
10
- - The exercise uses [minitest](https://github.com/seattlerb/minitest) to be checkied
8
+ - The exercise uses [minitest](https://github.com/seattlerb/minitest) to be checked
11
9
  - There is a `Rakefile` in the exercise folder
12
10
 
13
11
  ## Installation
@@ -20,7 +18,9 @@ gem 'examiner'
20
18
 
21
19
  And then execute:
22
20
 
23
- $ bundle
21
+ ```bash
22
+ $ bundle
23
+ ```
24
24
 
25
25
  ## Usage
26
26
 
@@ -31,9 +31,13 @@ the following code.
31
31
  exercise_directory = "/path/to/student_exercise_with_rakefile"
32
32
 
33
33
  runner = Examiner::RakeRunner.new
34
- runner.run exercise_directory
35
- if runner.success?
34
+ begin
35
+ runner.run exercise_directory
36
36
  puts "Results: #{runner.tests - runner.failures}/#{runner.tests}"
37
+ rescue Examiner::RakefileMissingError => e
38
+ puts "Folder does not have any Rakefile"
39
+ rescue Examiner::MissingDefaultRakeTaskError => e
40
+ puts "Could not launch tests with 'rake'"
37
41
  end
38
42
 
39
43
  # You can display stdout and stderr
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["seb@saunier.me"]
11
11
  spec.summary = %q{Grade a student's exercise solution using rake and minitest}
12
12
  spec.description = spec.summary
13
- spec.homepage = ""
13
+ spec.homepage = "http://github.com/ssaunier/examiner"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -18,6 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "bundler", "~> 1.5"
22
22
  spec.add_development_dependency "rake"
23
23
  end
@@ -22,6 +22,13 @@ module Examiner
22
22
  end
23
23
  end
24
24
 
25
+ def default_rake?(lines)
26
+ lines.reverse_each.each do |line|
27
+ return false if /Don't know how to build task 'default'/.match line
28
+ end
29
+ true
30
+ end
31
+
25
32
  def success?
26
33
  @success
27
34
  end
@@ -2,6 +2,9 @@ require 'open3'
2
2
  require_relative 'minitest_parser'
3
3
 
4
4
  module Examiner
5
+ class RakefileMissingError < StandardError; end
6
+ class MissingDefaultRakeTaskError < StandardError; end
7
+
5
8
  class RakeRunner
6
9
  attr_reader :stdout_lines, :stderr_lines
7
10
  attr_reader :tests, :failures
@@ -13,27 +16,29 @@ module Examiner
13
16
  end
14
17
 
15
18
  def run(directory)
16
- return unless rakefile?(directory)
19
+ raise RakefileMissingError.new(directory) unless rakefile?(directory)
17
20
 
18
21
  Open3.popen3('rake', chdir: directory) do |_, stdout, stderr, wait_thr|
19
- @stdout_lines, @stderr_lines = stdout.readlines, stderr_lines
22
+ @stdout_lines, @stderr_lines = stdout.readlines, stderr.readlines
23
+ parse_stderr(directory)
20
24
  parse_stdout
21
25
  end
22
26
  end
23
27
 
24
- def success?
25
- @success
26
- end
27
-
28
28
  private
29
29
 
30
+ def parse_stderr(directory)
31
+ unless MinitestParser.new.default_rake?(@stderr_lines)
32
+ raise MissingDefaultRakeTaskError.new(directory)
33
+ end
34
+ end
35
+
30
36
  def parse_stdout
31
37
  parser = MinitestParser.new
32
38
  parser.parse @stdout_lines
33
39
  if parser.success?
34
40
  @tests = parser.tests
35
41
  @failures = parser.failures
36
- @success = true
37
42
  end
38
43
  end
39
44
 
@@ -1,3 +1,3 @@
1
1
  module Examiner
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -6,13 +6,11 @@ module Exmanier
6
6
  let(:runner) { Examiner::RakeRunner.new }
7
7
 
8
8
  it "should handle a folder without Rakefile" do
9
- runner.run directory("no_rake_file")
10
- runner.success?.must_equal false
9
+ lambda { runner.run directory("no_rake_file") }.must_raise Examiner::RakefileMissingError
11
10
  end
12
11
 
13
12
  it "should be successful for 1_test_0_failure use case" do
14
13
  runner.run directory("1_test_0_failure")
15
- runner.success?.must_equal true
16
14
  runner.tests.must_equal 1
17
15
  runner.failures.must_equal 0
18
16
  runner.stdout_lines.wont_be_empty
@@ -21,7 +19,6 @@ module Exmanier
21
19
 
22
20
  it "should be successful for 2_tests_1_failure use case" do
23
21
  runner.run directory("2_tests_1_failure")
24
- runner.success?.must_equal true
25
22
  runner.tests.must_equal 2
26
23
  runner.failures.must_equal 1
27
24
  runner.stdout_lines.wont_be_empty
@@ -30,7 +27,13 @@ module Exmanier
30
27
 
31
28
  it "should handle a file with syntax errors" do
32
29
  runner.run directory("syntax_error")
33
- runner.success?.must_equal false
30
+ runner.stderr_lines.wont_be_empty
31
+ runner.tests.must_equal 0
32
+ runner.failures.must_equal 0
33
+ end
34
+
35
+ it "should handle a folder with an empty rakefile" do
36
+ lambda { runner.run directory("empty_rakefile") }.must_raise Examiner::MissingDefaultRakeTaskError
34
37
  end
35
38
 
36
39
  def directory(name)
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: examiner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastien Saunier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-27 00:00:00.000000000 Z
11
+ date: 2014-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '1.5'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: '1.5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -61,8 +61,9 @@ files:
61
61
  - spec/spec_helper.rb
62
62
  - spec/support/1_test_0_failure/Rakefile
63
63
  - spec/support/2_tests_1_failure/Rakefile
64
+ - spec/support/empty_rakefile/Rakefile
64
65
  - spec/support/syntax_error/Rakefile
65
- homepage: ''
66
+ homepage: http://github.com/ssaunier/examiner
66
67
  licenses:
67
68
  - MIT
68
69
  metadata: {}
@@ -92,4 +93,5 @@ test_files:
92
93
  - spec/spec_helper.rb
93
94
  - spec/support/1_test_0_failure/Rakefile
94
95
  - spec/support/2_tests_1_failure/Rakefile
96
+ - spec/support/empty_rakefile/Rakefile
95
97
  - spec/support/syntax_error/Rakefile