Pickaxe 0.5.3 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/pickaxe.rb CHANGED
@@ -5,7 +5,7 @@ require "active_support/all"
5
5
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
6
6
 
7
7
  module Pickaxe
8
- VERSION = "0.5.3"
8
+ VERSION = "0.5.4"
9
9
 
10
10
  class PickaxeError < StandardError; end
11
11
 
data/lib/pickaxe/cli.rb CHANGED
@@ -31,6 +31,10 @@ END_OF_BANNER
31
31
  options[:full_test] = true
32
32
  end
33
33
 
34
+ opts.on("--repeat-incorrect", "Repeat questions answered incorrectly") do |v|
35
+ options[:repeat_incorrect] = true
36
+ end
37
+
34
38
  opts.on("--strict", "Quit on syntax error in test file") do |v|
35
39
  options[:strict] = true
36
40
  end
@@ -56,6 +60,10 @@ end
56
60
 
57
61
  begin
58
62
  parser.parse!
63
+ if options[:full_test] and options[:repeat_incorrect]
64
+ $stderr.puts(("! --full-test disables the --repeat-incorrect option" ).color(:yellow))
65
+ options[:repeat_incorrect] = false
66
+ end
59
67
  Pickaxe::Main.new(ARGV, options)
60
68
  rescue Pickaxe::PickaxeError, OptionParser::InvalidOption => e
61
69
  $stderr.puts(("! " + e.to_s).color(:red))
data/lib/pickaxe/main.rb CHANGED
@@ -25,7 +25,6 @@ END_OF_TEST
25
25
  @logger.formatter = lambda { |s, t, p, msg| msg.to_s + "\n" }
26
26
 
27
27
  @questions = @test.shuffled_questions
28
- @questions_length = @questions.length.to_f
29
28
  @answers = Hash.new([])
30
29
  @started_at = Time.now
31
30
  @current_index = 0
@@ -35,28 +34,30 @@ END_OF_TEST
35
34
  return
36
35
  end
37
36
 
38
- puts "! Hit Control-D to end test.\n\n".color(:green)
39
- info = Main.options[:full_test] ? 1 : 0
40
- while @current_index < @questions.length + info do
41
- @question = @questions[@current_index]
37
+ begin
38
+ puts "! Hit Control-D or Control-C to end test.\n\n".color(:green)
39
+ while @current_index < @questions.length + (Main.options[:full_test] ? 1 : 0) do
40
+ @question = @questions[@current_index]
42
41
 
43
- unless @question.nil?
44
- print "#{@current_index+1} / #{@questions.length}\t\t"
45
- puts "From: #{@question.file}\t\tTime spent: #{spent?}"
42
+ unless @question.nil?
43
+ print "#{@current_index+1} / #{@questions.length}\t\t"
44
+ puts "From: #{@question.file}\t\tTime spent: #{spent?}"
46
45
 
47
- puts @question.answered(@answers[@question])
48
- else
49
- puts END_OF_TEST_MESSAGE
50
- end
46
+ puts @question.answered(@answers[@question])
47
+ else
48
+ puts END_OF_TEST_MESSAGE
49
+ end
51
50
 
52
- until (line = prompt?).nil? or command(line)
53
- # empty
51
+ until (line = prompt?).nil? or command(line)
52
+ # empty
53
+ end
54
+ break if puts or line.nil?
54
55
  end
55
-
56
- break if puts or line.nil?
56
+ rescue Interrupt
57
+ # empty
58
+ ensure
59
+ statistics!
57
60
  end
58
-
59
- statistics!
60
61
  end
61
62
 
62
63
  #
@@ -90,7 +91,7 @@ END_OF_TEST
90
91
  if Main.options[:full_test] and @question.nil?
91
92
  Main.options[:full_test] = false
92
93
  Main.options[:force_show_answers] = true
93
-
94
+ @questions_length ||= @questions.length.to_f
94
95
  @questions = @test.selected.select { |q| not q.correct?(@answers[q]) }
95
96
  @current_index = 0
96
97
  else
@@ -113,27 +114,41 @@ END_OF_HELP
113
114
  @answers[@question] = line.gsub(/\s+/, "").each_char.collect.to_a.uniq
114
115
  unless Main.options[:full_test]
115
116
  puts @question.check?(@answers[@question])
116
- end
117
- @current_index += 1
117
+ if Main.options[:repeat_incorrect] and not @question.correct?(@answers[@question])
118
+ @answers.delete(@question)
119
+ @questions.insert(@current_index + 1 + rand(@questions.length - @current_index), @question)
120
+ @questions.delete_at(@current_index)
121
+ else
122
+ @current_index += 1
123
+ end
124
+ else
125
+ @current_index += 1
126
+ end
118
127
  true
119
128
  end
120
129
  end
121
130
 
122
131
  def statistics!
123
- @stats = @test.statistics!(@answers)
132
+ @questions_length ||= @questions.length.to_f
124
133
 
125
- @answers.each do |question, answers|
126
- @logger << "!" unless question.correct?(answers)
127
- @logger << ("#{question.index}: #{answers.join(" ")}\n")
128
- end
129
- @logger << "\n"
130
-
131
134
  puts
132
135
  puts "Time: #{spent?}"
133
- puts "All: #{@questions.length}"
134
- stat :correct, :green
135
- stat :unanswered, :yellow
136
- stat :incorrect, :red
136
+ unless Main.options[:repeat_incorrect]
137
+ @stats = @test.statistics!(@answers)
138
+
139
+
140
+ puts "All: #{@questions.length}"
141
+ stat :correct, :green
142
+ stat :unanswered, :yellow
143
+ stat :incorrect, :red
144
+
145
+ @questions_length ||= @questions.length.to_f
146
+ @answers.each do |question, answers|
147
+ @logger << "!" unless question.correct?(answers)
148
+ @logger << ("#{question.index}: #{answers.join(" ")}\n")
149
+ end
150
+ @logger << "\n"
151
+ end
137
152
  end
138
153
 
139
154
  def error(msg)
data/lib/pickaxe/test.rb CHANGED
@@ -15,7 +15,7 @@ module Pickaxe
15
15
  include Enumerable
16
16
 
17
17
  # Ruby-comments and C-comments
18
- COMMENTS_RE = /^\s*#.*|^\/\/.*/
18
+ COMMENTS_RE = /^\s*#.*|^\/\/.*|;.*/
19
19
 
20
20
  def initialize(*files)
21
21
  @files = files.collect do |file_or_directory|
@@ -100,7 +100,7 @@ module Pickaxe
100
100
  class Question < Struct.new(:file, :index, :content, :answers)
101
101
  include Pickaxe::Errors
102
102
 
103
- RE = /^\s*(\d+)\.?\s*(.+)$/u
103
+ RE = /^\s*(\d+)\.?\s*(.+)$/u
104
104
 
105
105
  def self.parse(file, answers)
106
106
  content = []
@@ -180,7 +180,10 @@ module Pickaxe
180
180
  if correct?(given)
181
181
  "Correct!".color(:green)
182
182
  else
183
- "Incorrect! Correct was: #{correct_answers.join(", ")}".color(:red)
183
+ hit = "OK [#{(given & correct_answers).join}]".color(:green)
184
+ missed = "Missed [#{(correct_answers - given).join}]".color(:yellow)
185
+ incorrect = "Failed [#{(given - correct_answers).join}]".color(:red)
186
+ "Incorrect, should be: #{correct_answers.join}! #{hit} #{missed} #{incorrect}"
184
187
  end
185
188
  end
186
189
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Pickaxe
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 3
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 3
10
- version: 0.5.3
9
+ - 4
10
+ version: 0.5.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dawid Fatyga
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-03 00:00:00 +01:00
18
+ date: 2010-12-06 00:00:00 +01:00
19
19
  default_executable: bin/pickaxe
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency