battleroom 0.0.78 → 0.0.79
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/battleroom.rb +1 -1
- data/lib/battleroom/data/method_questions.rb +29 -0
- data/lib/battleroom/models/method_invocation_question.rb +73 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 340c1d7b9d05a1f38b513a5d48f3fd0ab96b1547
|
4
|
+
data.tar.gz: ab44f38b9d800263c0b4a9c72390535aa9de6fee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b1547328ed465de041958c01675f2a32e64862c8edb38213c8107ffd33ca1e49801ecad951e0ee1311d09c52d8944493577b1dfddd4c0e123b5ce8004bbc329
|
7
|
+
data.tar.gz: 84eb2f9983d8fd8706a1005c58bbe2517b6b44156c2d7ff1f409e670f8ad572452b86c9b4f63d6ddcf25ff2c9571af17a70a66c7d6cd482451f3b0d4bd19dd76
|
data/lib/battleroom.rb
CHANGED
@@ -66,7 +66,7 @@ loop do
|
|
66
66
|
q = MethodDefinitionQuestion.new(b)
|
67
67
|
q.print_prompt
|
68
68
|
q.evaluate_method_definition_input
|
69
|
-
follow_up_question =
|
69
|
+
follow_up_question = MethodInvocationQuestion.new(b, q)
|
70
70
|
follow_up_question.print_method_invocation_prompt
|
71
71
|
follow_up_question.evaluate_user_input
|
72
72
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
area_arg_one = rand(1..9)
|
2
|
+
area_arg_two = rand(1..9)
|
3
|
+
volume_arg_one = rand(1..9)
|
4
|
+
volume_arg_two = rand(1..9)
|
5
|
+
volume_arg_three = rand(1..9)
|
6
|
+
|
7
|
+
METHOD_QUESTONS = [
|
8
|
+
{
|
9
|
+
method_name: "calc_area",
|
10
|
+
arg_count: 2,
|
11
|
+
spec: "returns the product of its two arguments",
|
12
|
+
eval_string: "calc_area(#{area_arg_one}, #{area_arg_two})",
|
13
|
+
eval_answer: area_arg_one * area_arg_two
|
14
|
+
},
|
15
|
+
{
|
16
|
+
method_name: "calc_volume",
|
17
|
+
arg_count: 3,
|
18
|
+
spec: "returns the product of its three arguments",
|
19
|
+
eval_string: "calc_volume(#{volume_arg_one}, #{volume_arg_two}, #{volume_arg_three})",
|
20
|
+
eval_answer: volume_arg_one * volume_arg_two * volume_arg_three
|
21
|
+
},
|
22
|
+
{
|
23
|
+
method_name: "sum",
|
24
|
+
arg_count: 2,
|
25
|
+
spec: "returns the sum of its two arguments",
|
26
|
+
eval_string: "sum(#{area_arg_one}, #{area_arg_two})",
|
27
|
+
eval_answer: area_arg_one + area_arg_two
|
28
|
+
},
|
29
|
+
]
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative './question'
|
2
|
+
|
3
|
+
class MethodInvocationQuestion < Question
|
4
|
+
|
5
|
+
attr_reader :original_question, :desired_answer_formatted, :desired_answer_class_formatted
|
6
|
+
|
7
|
+
def initialize(evaluation_scope, question_to_follow_up_on)
|
8
|
+
@evaluation_scope = evaluation_scope
|
9
|
+
@original_question = question_to_follow_up_on
|
10
|
+
@desired_answer_formatted = format_value_for_stdout_and_eval(original_question.eval_answer)
|
11
|
+
@desired_answer_class_formatted = format_class_for_output(original_question.eval_answer.class)
|
12
|
+
end
|
13
|
+
|
14
|
+
def format_method_definition_for_stdout
|
15
|
+
code = CodeRay.scan($input, :ruby)
|
16
|
+
# adds indentation to all lines of method definition
|
17
|
+
code.term.gsub(/^.*/) { |match| "\t" + match }
|
18
|
+
end
|
19
|
+
|
20
|
+
def print_method_invocation_prompt
|
21
|
+
puts "You now have the method defined below at your disposal.\n".blue
|
22
|
+
puts format_method_definition_for_stdout
|
23
|
+
puts "\nInvoke the '#{original_question.method_name}' method such that it returns the ".blue + desired_answer_class_formatted.blue + " value ".blue + desired_answer_formatted.yellow + "\n\n"
|
24
|
+
end
|
25
|
+
|
26
|
+
def print_no_method_error_prompt
|
27
|
+
puts "\nYou just trigged a common Ruby error that reads: \n".red
|
28
|
+
puts "\tundefined local variable or method \'WHATEVER_METHOD_YOU_TRIED_TO_INVOKE\'\n".green
|
29
|
+
puts "Basically, you tried to invoke a method that doesn't exist. Try again.\n".red
|
30
|
+
end
|
31
|
+
|
32
|
+
def print_name_error_prompt(error, user_submission)
|
33
|
+
puts "You just triggered a common Ruby error that reads:\n".red
|
34
|
+
puts "\tNameError: #{error.message}\n".green
|
35
|
+
/`(.+)'/i.match(error.message)
|
36
|
+
referenced_variable = $1
|
37
|
+
passed_as_argument_pattern = Regexp.new("\(.*#{$1}.*\)")
|
38
|
+
if user_submission.match(passed_as_argument_pattern)
|
39
|
+
puts "You're trying to pass the '#{original_question.method_name}' method the value stored in the variable '#{referenced_variable}', but that variable hasn't been assigned a value.\n".red
|
40
|
+
else
|
41
|
+
puts "Basically, you're referencing a variable, #{$1}, that hasn't been defined.\n".red
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def print_argument_error_prompt(e)
|
46
|
+
e.message.match(/wrong number of arguments \((\d) for (\d)\)/)
|
47
|
+
passed_arg_count = $1.to_i
|
48
|
+
expected_arg_count = $2.to_i
|
49
|
+
puts "You just triggered a common Ruby error that reads:\n".red
|
50
|
+
puts "\tArgumentError: #{e.message}\n".green
|
51
|
+
puts "Basically, you defined the '#{original_question.method_name}' method to expect #{expected_arg_count} argument(s), and you're only passing #{passed_arg_count}. Try again.\n".red
|
52
|
+
end
|
53
|
+
|
54
|
+
def evaluate_user_input
|
55
|
+
enter_evaluation_loop do |user_submission|
|
56
|
+
begin
|
57
|
+
return_from_eval = original_question.evaluation_scope.eval(user_submission)
|
58
|
+
if return_from_eval == original_question.eval_answer
|
59
|
+
true
|
60
|
+
else
|
61
|
+
puts "Remember, to call a method, you simply enter its name followed by any arguments it might need. Try again.\n".red
|
62
|
+
end
|
63
|
+
rescue NoMethodError => e
|
64
|
+
print_no_method_error_prompt
|
65
|
+
rescue NameError => e
|
66
|
+
print_name_error_prompt(e, user_submission)
|
67
|
+
rescue ArgumentError => e
|
68
|
+
print_argument_error_prompt(e)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: battleroom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.79
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis Vander Hoop
|
@@ -70,14 +70,14 @@ dependencies:
|
|
70
70
|
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
@@ -109,6 +109,7 @@ files:
|
|
109
109
|
- lib/battleroom/config/pry_config.rb
|
110
110
|
- lib/battleroom/data/array_questions.rb
|
111
111
|
- lib/battleroom/data/hash_questions.rb
|
112
|
+
- lib/battleroom/data/method_questions.rb
|
112
113
|
- lib/battleroom/data/nested_data_structure_access_questions.rb
|
113
114
|
- lib/battleroom/data/variable_assignment_questions.rb
|
114
115
|
- lib/battleroom/data_generation_machinery.rb
|
@@ -120,6 +121,7 @@ files:
|
|
120
121
|
- lib/battleroom/models/hash_access_question.rb
|
121
122
|
- lib/battleroom/models/hash_assignment_question.rb
|
122
123
|
- lib/battleroom/models/method_definition_question.rb
|
124
|
+
- lib/battleroom/models/method_invocation_question.rb
|
123
125
|
- lib/battleroom/models/nested_data_structure_access_question.rb
|
124
126
|
- lib/battleroom/models/question.rb
|
125
127
|
- lib/battleroom/models/variable_question.rb
|