nerd_quiz 0.2.0 → 0.2.1

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.
@@ -47,13 +47,15 @@ module NerdQuiz
47
47
  text << @parsed["text"]
48
48
  (1..4).each do |i|
49
49
  key = "a#{i}"
50
- text << "#{key}) #{@parsed[key]}"
50
+ # When the answer has significant whitespace, wrap the answer in quotes
51
+ answer = @parsed[key] =~ /^\s/ || @parsed[key] =~ /\s$/ ? "\"#{@parsed[key]}\"" : @parsed[key]
52
+ text << "#{i}) #{answer}"
51
53
  end
52
54
  @question[:text] = text.join("\n")
53
55
  end
54
56
 
55
57
  def extract_answer
56
- @question[:answer] = @parsed["right_answer"]
58
+ @question[:answer] = @parsed["right_answer"][1]
57
59
  end
58
60
 
59
61
  def extract_label
@@ -30,6 +30,7 @@ module NerdQuiz
30
30
  def ask
31
31
  out("Question #{@scorecard.next_question + 1} #{label}:", :blue)
32
32
  out(question)
33
+ out('>> ', :blue, :bold, :no_new_line)
33
34
  end
34
35
 
35
36
  def listen
@@ -45,7 +46,10 @@ module NerdQuiz
45
46
  end
46
47
 
47
48
  def reply
48
- @input.gets.strip
49
+ reply = @input.gets
50
+ # Ctrl-D (EOF) user action cause @input.gets to be nil
51
+ # On this action, lets exit like the user asked
52
+ reply.nil? ? exit : reply.strip
49
53
  end
50
54
 
51
55
  def start
@@ -81,7 +85,8 @@ module NerdQuiz
81
85
  bold = args[2].is_a?(Symbol) ? true : false
82
86
  text = set_color(text, color, bold)
83
87
  end
84
- @output.puts text
88
+ method = args[3].nil? ? :puts : :print
89
+ @output.send(method, text)
85
90
  end
86
91
 
87
92
  def handle_signals
@@ -1,3 +1,3 @@
1
1
  module NerdQuiz
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -3,16 +3,16 @@ require 'spec_helper'
3
3
  module NerdQuiz
4
4
  describe Question do
5
5
  describe '.get' do
6
- let(:path) { File.expand_path('../../../NerdPursuit/questions/yo_dawg.json', __FILE__) }
6
+ let(:path) { File.expand_path('../../../NerdPursuit/questions/kernel-sprintf-2.json', __FILE__) }
7
7
  let(:text) do
8
- "Yo dawg, I herd you like ...\n" +
9
- "a1) music, so I put a tape in your pants so you can listen while you sleep!\n" +
10
- "a2) cars, so I put a car in your car so you can drive while you drive!\n" +
11
- "a3) cheating, so I put a bread in your bag so you can run while you eat!\n" +
12
- "a4) drinking, so I put a hat in your pocket so you can listen while you dance!"
8
+ "What's the output of '%-020s' % 'dude is here'?\n" +
9
+ "1) dude is here\n" +
10
+ "2) \"dude is here \"\n" +
11
+ "3) \" dude is here\"\n" +
12
+ "4) dude is"
13
13
  end
14
- let(:answer) { "a2" }
15
- let(:label) { "(culture)" }
14
+ let(:answer) { "2" }
15
+ let(:label) { "(backend - ruby)" }
16
16
 
17
17
  subject { Question.get(path) }
18
18
 
@@ -5,7 +5,7 @@ module NerdQuiz
5
5
  let(:question) { 'What is the answer to life, the universe and everything?' }
6
6
  let(:answer) { '42' }
7
7
  let(:label) { '(culture)' }
8
- let(:output) { double('output').as_null_object }
8
+ let(:output) { double('output', :send => "").as_null_object }
9
9
  let(:input) { double('input').as_null_object }
10
10
  let(:scorecard) { NerdQuiz::Scorecard.new }
11
11
  subject { Quiz.new(input, output, scorecard) }
@@ -17,18 +17,18 @@ module NerdQuiz
17
17
  subject.stub(:answer).and_return(answer)
18
18
  end
19
19
 
20
- # Only public API is the run loop, so it must be run for each test
21
- after(:each) do
22
- subject.run
23
- end
24
-
25
20
  describe '#run' do
21
+ # Only public API is the run loop, so it must be run for each test
22
+ after(:each) do
23
+ subject.run
24
+ end
25
+
26
26
  it 'loads all the questions' do
27
27
  subject.should_receive(:questions).once
28
28
  end
29
29
 
30
30
  it 'sends a welcome message' do
31
- output.should_receive(:puts).with("\e[34mWelcome to Nerd Quiz\e[0m")
31
+ output.should_receive(:send).with(:puts, "\e[34mWelcome to Nerd Quiz\e[0m")
32
32
  end
33
33
 
34
34
  it 'asks all the questions' do
@@ -37,7 +37,7 @@ module NerdQuiz
37
37
 
38
38
  it 'labels each question' do
39
39
  (1..10).each do |i|
40
- output.should_receive(:puts).with("\e[34mQuestion #{i} (culture):\e[0m").once
40
+ output.should_receive(:send).with(:puts, "\e[34mQuestion #{i} (culture):\e[0m").once
41
41
  end
42
42
  end
43
43
 
@@ -56,7 +56,7 @@ module NerdQuiz
56
56
  end
57
57
 
58
58
  it 'notifies it received the right answer' do
59
- output.should_receive(:puts).with("\e[1m\e[32mRight!\e[0m").exactly(10).times
59
+ output.should_receive(:send).with(:puts, "\e[1m\e[32mRight!\e[0m").exactly(10).times
60
60
  end
61
61
 
62
62
  it 'tallies the right answer' do
@@ -70,11 +70,11 @@ module NerdQuiz
70
70
  end
71
71
 
72
72
  it 'notifies it received the wrong answer' do
73
- output.should_receive(:puts).with("\e[1m\e[31mWrong!\e[0m").exactly(10).times
73
+ output.should_receive(:send).with(:puts, "\e[1m\e[31mWrong!\e[0m").exactly(10).times
74
74
  end
75
75
 
76
76
  it 'and displays the right answer' do
77
- output.should_receive(:puts).with("\e[31mYou should have answered \e[0m\e[1m\e[31m42\e[0m").exactly(10).times
77
+ output.should_receive(:send).with(:puts, "\e[31mYou should have answered \e[0m\e[1m\e[31m42\e[0m").exactly(10).times
78
78
  end
79
79
 
80
80
  it 'tallies the wrong answer' do
@@ -84,21 +84,29 @@ module NerdQuiz
84
84
  end
85
85
 
86
86
  it 'proclaims the quiz over' do
87
- output.should_receive(:puts).with("\e[34mThanks For Playing!\e[0m")
87
+ output.should_receive(:send).with(:puts, "\e[34mThanks For Playing!\e[0m")
88
88
  end
89
89
 
90
90
  it 'displays the final score' do
91
91
  scorecard.stub(:score).and_return('10/10')
92
- output.should_receive(:puts).with("\e[33mFinal Score 10/10\e[0m")
92
+ output.should_receive(:send).with(:puts, "\e[33mFinal Score 10/10\e[0m")
93
93
  end
94
94
 
95
95
  it 'always says bye' do
96
- output.should_receive(:puts).with("\e[1m\e[34mBye!\e[0m")
96
+ output.should_receive(:send).with(:puts, "\e[1m\e[34mBye!\e[0m")
97
97
  end
98
98
 
99
99
  it 'catches SIGINTs' do
100
100
  Signal.should_receive(:trap).with('INT', 'EXIT').once
101
101
  end
102
102
  end
103
+
104
+ it 'exits when sent Ctrl-D (EOF)' do
105
+ lambda {
106
+ input.stub(:gets).and_return(nil)
107
+ output.should_receive(:send).with(:puts, "\e[1m\e[34mBye!\e[0m")
108
+ subject.run
109
+ }.should raise_error(SystemExit)
110
+ end
103
111
  end
104
112
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nerd_quiz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-08 00:00:00.000000000 Z
12
+ date: 2012-04-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yajl-ruby
16
- requirement: &70200808752580 !ruby/object:Gem::Requirement
16
+ requirement: &70271390761360 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70200808752580
24
+ version_requirements: *70271390761360
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70200808751840 !ruby/object:Gem::Requirement
27
+ requirement: &70271390760620 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70200808751840
35
+ version_requirements: *70271390760620
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70200808751220 !ruby/object:Gem::Requirement
38
+ requirement: &70271390759980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70200808751220
46
+ version_requirements: *70271390759980
47
47
  description: Test your nerd skills by answering NerdPursuit questions!
48
48
  email:
49
49
  - sfw@simeonfosterwillbanks.com
@@ -270,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
270
270
  version: '0'
271
271
  segments:
272
272
  - 0
273
- hash: 3758517233295047994
273
+ hash: -61159159520021561
274
274
  requirements: []
275
275
  rubyforge_project: nerd_quiz
276
276
  rubygems_version: 1.8.11