tuvi 0.0.8 → 0.0.12

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.
data/README.md CHANGED
@@ -15,31 +15,31 @@ Here is a basic example program followed by an explanation:
15
15
  require 'tuvi'
16
16
 
17
17
  step 1 do
18
- message "Welcome to KrazyMaze. Will you ever get out? BWAAHAAA! You have a choice to make: Go right or left"
19
- answer "right", 2
20
- answer "left", 3
18
+ say "Welcome to KrazyMaze. Will you ever get out? BWAAHAAA! You have a choice to make: Go right or left"
19
+ response "right" => 2
20
+ response "left" => 3
21
21
  end
22
22
 
23
23
  step 2 do
24
- message "You're in the middle of the maze. Go right or left or straight."
25
- answer "right", 3
26
- answer "left", 4
27
- answer "straight", 3
24
+ say "You're in the middle of the maze. Go right or left or straight."
25
+ response "right" => 3
26
+ response "left" => 4
27
+ response "straight" => 3
28
28
  end
29
29
 
30
30
  step 3 do
31
- message "You've encountered a monster! You can either go straight, or punch the monster."
32
- answer "straight", 2
33
- answer "punch", 5
31
+ say "You've encountered a monster! You can either go straight, or punch the monster."
32
+ response "straight" => 2
33
+ response "punch" => 5
34
34
  end
35
35
 
36
36
  step 4 do
37
- message "Drat. You've reached the end of the maze! I'll get you next time..."
37
+ say "Drat. You've reached the end of the maze! I'll get you next time..."
38
38
  stop
39
39
  end
40
40
 
41
41
  step 5 do
42
- message "The monster was stronger than you! You died."
42
+ say "The monster was stronger than you! You died."
43
43
  stop
44
44
  end
45
45
 
@@ -48,15 +48,13 @@ Here is a basic example program followed by an explanation:
48
48
 
49
49
  First, create a ruby file and on the first line require the Tuvi library with `require 'tuvi'`
50
50
 
51
- Then, create a class with any name you desire. The first thing to do inside this class is: `extend Tuvi`.
52
-
53
51
  From here on in, the Tuvi language is used. As you can see, the program is divided into steps, which represent a step in the program where the program provides some instructions, and either prompts the user for input or simply exits.
54
52
 
55
- Every step needs a `message`, which sets the computer's instructions for that step.
53
+ Every step needs a `say`, which sets the computer's instructions for that step.
56
54
 
57
- Every step can establish one or more lines declaring an `answer` which is followed first by a valid user response, a comma, and then by the step number that that particular user response should lead to.
55
+ Every step can establish one or more lines declaring an `response` which is followed first by a valid user response, a hashrocket arrow, and then by the step number that that particular user response should lead to.
58
56
 
59
- Some steps, instead of having answers, can simply end the program using the `stop` keyword.
57
+ Some steps, instead of having responses, can simply end the program using the `stop` keyword.
60
58
 
61
59
  Finally, after all the steps have been declared (but still within the class), the `run` keyword actually runs the steps.
62
60
 
@@ -66,9 +64,9 @@ You can also add any custom Ruby code by placing it block passed to the `code` m
66
64
 
67
65
  step 1 do
68
66
  code {$steps = 1}
69
- message "Welcome to KrazyMaze. Will you ever get out? BWAAHAAA! You have a choice to make: Go right or left"
70
- answer "right", 2
71
- answer "left", 3
67
+ say "Welcome to KrazyMaze. Will you ever get out? BWAAHAAA! You have a choice to make: Go right or left"
68
+ response "right" => 2
69
+ response "left" => 3
72
70
  end
73
71
 
74
72
  step 2 do
@@ -76,10 +74,10 @@ You can also add any custom Ruby code by placing it block passed to the `code` m
76
74
  $steps += 1
77
75
  puts "You have taken #{$steps} steps."
78
76
  end
79
- message "You're in the middle of the maze. Go right or left or straight."
80
- answer "right", 3
81
- answer "left", 4
82
- answer "straight", 3
77
+ say "You're in the middle of the maze. Go right or left or straight."
78
+ response "right" => 3
79
+ response "left" => 4
80
+ response "straight" => 3
83
81
  end
84
82
 
85
83
 
data/bin/tuvi ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ puts <<-EOS
4
+ #{'*'*50}
5
+ Tuvi!
6
+ #{'*'*50}
7
+ EOS
8
+ exit(1)
data/example_program.rb CHANGED
@@ -2,20 +2,20 @@ require_relative 'lib/tuvi.rb'
2
2
 
3
3
  step 1 do
4
4
  code {$x = "hello"}
5
- message "This is Step 1. Type yes to go to Step 2. Type no to go to Step 3."
6
- answer "Yes", 2
7
- answer "No", 3
5
+ say "This is Step 1. Type yes to go to Step 2. Type no to go to Step 3."
6
+ response "Yes" => 2
7
+ response "No" => 3
8
8
  end
9
9
 
10
10
  step 2 do
11
11
  code {puts $x}
12
- message "This is Step 2. Type hi to go to Step 3. Type bye to go to step 1."
13
- answer "Hi", 3
14
- answer "Bye", 1
12
+ say "This is Step 2. Type hi to go to Step 3. Type bye to go to step 1."
13
+ response "Hi" => 3
14
+ response "Bye" => 1
15
15
  end
16
16
 
17
17
  step 3 do
18
- message "You've reached the end!"
18
+ say "You've reached the end!"
19
19
  stop
20
20
  end
21
21
 
@@ -0,0 +1,41 @@
1
+ class ApplicationRunner
2
+
3
+ def initialize(steps)
4
+ @steps = steps
5
+ end
6
+
7
+ def run
8
+ current_step_id = 1
9
+ while true do
10
+ current_step_id = execute_step(current_step_id)
11
+ end
12
+ end
13
+
14
+ def execute_step(step_id)
15
+ current_step = @steps[step_id]
16
+ current_step.code_blocks.each do |block|
17
+ block.call
18
+ end
19
+ puts
20
+ puts current_step.get_say
21
+ exit if current_step.exit_program
22
+ puts current_step.formatted_responses
23
+ input = gets.downcase.chomp
24
+ exit_program if input == "exit"
25
+ determine_next_step(current_step, input)
26
+ end
27
+
28
+ def determine_next_step(current_step, input)
29
+ if current_step.response_paths[input]
30
+ return current_step.response_paths[input]
31
+ end
32
+
33
+ puts "Sorry, I don't understand that response. Please try again:"
34
+ current_step.id
35
+ end
36
+
37
+ def exit_program
38
+ puts "Bye!"
39
+ exit
40
+ end
41
+ end
data/lib/tuvi/step.rb CHANGED
@@ -1,32 +1,34 @@
1
1
  class Step
2
2
 
3
- attr_accessor :position, :answer_paths, :exit_program, :code_blocks
3
+ attr_accessor :id, :response_paths, :exit_program, :code_blocks
4
4
 
5
- def initialize(position, &block)
6
- @position = position
7
- @answer_paths = {}
5
+ def initialize(id, &block)
6
+ @id = id
7
+ @response_paths = {}
8
8
  @code_blocks = []
9
9
  instance_eval(&block) if block_given?
10
10
  end
11
11
 
12
- def message(text)
13
- @message = text
12
+ def say(text)
13
+ @say = text
14
14
  end
15
15
 
16
- def get_message
17
- @message
16
+ def get_say
17
+ @say
18
18
  end
19
19
 
20
- def answer(input, step_number)
21
- @answer_paths[input.downcase] = step_number
20
+ def response(response_path)
21
+ response = response_path.first[0].downcase
22
+ next_step = response_path.first[1]
23
+ @response_paths[response] = next_step
22
24
  end
23
25
 
24
26
  def stop
25
27
  @exit_program = true
26
28
  end
27
29
 
28
- def formatted_answers
29
- "You can type one of the following: [#{@answer_paths.keys.join(", ")}] Enter 'exit' to quit."
30
+ def formatted_responses
31
+ "You can type one of the following: [#{@response_paths.keys.join(", ")}]. Enter 'exit' to quit."
30
32
  end
31
33
 
32
34
  def code(&block)
data/lib/tuvi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Tuvi
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.12"
3
3
  end
data/lib/tuvi.rb CHANGED
@@ -1,46 +1,16 @@
1
1
  require_relative "tuvi/version"
2
2
  require_relative "tuvi/step"
3
- require 'ostruct'
3
+ require_relative "tuvi/application_runner"
4
4
 
5
5
  module Tuvi
6
6
 
7
- def step(position, &block)
7
+ def step(id, &block)
8
8
  @steps ||= {}
9
- @steps[position] = Step.new(position, &block)
9
+ @steps[id] = Step.new(id, &block)
10
10
  end
11
11
 
12
12
  def run
13
- current_step_position = 1
14
- while true do
15
- current_step_position = execute_step(current_step_position)
16
- end
17
- end
18
-
19
- def execute_step(step_position)
20
- current_step = @steps[step_position]
21
- current_step.code_blocks.each do |block|
22
- block.call
23
- end
24
- puts current_step.get_message
25
- exit if current_step.exit_program
26
- puts current_step.formatted_answers
27
- input = gets.downcase.chomp
28
- exit_program if input == "exit"
29
- determine_next_step(current_step, input)
30
- end
31
-
32
- def determine_next_step(current_step, input)
33
- if current_step.answer_paths[input]
34
- return current_step.answer_paths[input]
35
- end
36
-
37
- puts "Sorry, I don't understand that answer. Please try again:"
38
- current_step.position
39
- end
40
-
41
- def exit_program
42
- puts "Bye!"
43
- exit
13
+ ApplicationRunner.new(@steps).run
44
14
  end
45
15
 
46
16
  end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe ApplicationRunner do
4
+
5
+ before(:each) do
6
+ @step = Step.new(1) do
7
+ @response_paths = {"yes" => 2}
8
+ end
9
+ @application_runner = ApplicationRunner.new([@step])
10
+ end
11
+
12
+ describe "Running the Tuvi program" do
13
+
14
+ describe "determine_next_step" do
15
+
16
+ it "should determine the next step based on response paths" do
17
+ @application_runner.determine_next_step(@step, "yes").should == 2
18
+ end
19
+
20
+ it "should set the next step to be the current step if input is invalid" do
21
+ @application_runner.determine_next_step(@step, "blah").should == 1
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
@@ -4,12 +4,6 @@ describe Step do
4
4
 
5
5
  describe "class methods" do
6
6
 
7
- # it "should initialize new Step" do
8
- # Step.new.should respond_to :message
9
- # end
10
-
11
7
  end
12
8
 
13
-
14
-
15
9
  end
data/spec/tuvi_spec.rb CHANGED
@@ -10,7 +10,7 @@ describe Tuvi do
10
10
  @program = Program.new
11
11
  end
12
12
 
13
- describe "The Tuvi language helper methods" do
13
+ describe "Step syntax" do
14
14
 
15
15
  describe "step" do
16
16
 
@@ -19,50 +19,47 @@ describe Tuvi do
19
19
  @program.instance_eval{@steps[1]}.class.should == Step
20
20
  end
21
21
 
22
- it "should assign number parameter to step's position" do
22
+ it "should assign number parameter to step's id" do
23
23
  @program.step(1)
24
- @program.instance_eval{@steps[1]}.position.should == 1
24
+ @program.instance_eval{@steps[1]}.id.should == 1
25
25
  end
26
26
 
27
- it "should assign a message based on message passed in block" do
28
- @program.step(1){message "Hello!"}
29
- @program.instance_eval{@steps[1]}.get_message.should == "Hello!"
30
- end
27
+ end
31
28
 
32
- it "should assign answer paths based on answers passed in block" do
33
- @program.step(1){answer "yes", 2}
34
- @program.instance_eval{@steps[1]}.answer_paths["yes"].should == 2
35
- end
29
+ describe "say" do
36
30
 
37
- it "should mark a step as exit_program if 'stop' is passed in block" do
38
- @program.step(1){stop}
39
- @program.instance_eval{@steps[1]}.exit_program.should be_true
31
+ it "should assign a say based on say passed in block" do
32
+ @program.step(1){say "Hello!"}
33
+ @program.instance_eval{@steps[1]}.get_say.should == "Hello!"
40
34
  end
35
+
41
36
  end
42
37
 
43
- describe "determine_next_step" do
38
+ describe "response" do
44
39
 
45
- it "should determine the next step based on answer paths" do
46
- @program.step(1){answer "yes", 2}
47
- current_step = @program.instance_eval{@steps[1]}
48
- @program.determine_next_step(current_step, "yes").should == 2
40
+ it "should create an response path with the key and the key should be downcased" do
41
+ @program.step(1){response "Yes" => 2}
42
+ @program.instance_eval{@steps[1]}.response_paths["yes"].should == 2
49
43
  end
50
44
 
51
- it "should set the next step to be the current step if input is invalid" do
52
- @program.step(1){answer "yes", 2}
53
- current_step = @program.instance_eval{@steps[1]}
54
- @program.determine_next_step(current_step, "blah").should == 1
45
+ end
46
+
47
+ describe "stop" do
48
+
49
+ it "should mark a step as exit_program if 'stop' is passed in block" do
50
+ @program.step(1){stop}
51
+ @program.instance_eval{@steps[1]}.exit_program.should be_true
55
52
  end
56
53
 
57
54
  end
58
55
 
59
- end
56
+ describe "code" do
60
57
 
61
- describe "#code" do
58
+ it "should add blocks to the step's code_blocks" do
59
+ @program.step(1){code {puts "Hello"} }
60
+ @program.instance_eval{@steps[1]}.code_blocks[0].should be_a Proc
61
+ end
62
62
 
63
- it "should add blocks to the step's code_blocks" do
64
- @program.step(1){code {puts "Hello"} }
65
- @program.instance_eval{@steps[1]}.code_blocks[0].should be_a Proc
66
63
  end
67
64
 
68
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tuvi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-22 00:00:00.000000000 Z
12
+ date: 2014-01-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -62,7 +62,8 @@ dependencies:
62
62
  description: Tuvi is a computer language for kids to create text-based games and applications.
63
63
  email:
64
64
  - jaywngrw@gmail.com
65
- executables: []
65
+ executables:
66
+ - tuvi
66
67
  extensions: []
67
68
  extra_rdoc_files: []
68
69
  files:
@@ -72,12 +73,15 @@ files:
72
73
  - LICENSE.txt
73
74
  - README.md
74
75
  - Rakefile
76
+ - bin/tuvi
75
77
  - example_program.rb
76
78
  - lib/.DS_Store
77
79
  - lib/tuvi.rb
80
+ - lib/tuvi/application_runner.rb
78
81
  - lib/tuvi/step.rb
79
82
  - lib/tuvi/version.rb
80
83
  - spec/spec_helper.rb
84
+ - spec/tuvi/application_runner_spec.rb
81
85
  - spec/tuvi/step_spec.rb
82
86
  - spec/tuvi_spec.rb
83
87
  - tuvi.gemspec
@@ -96,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
100
  version: '0'
97
101
  segments:
98
102
  - 0
99
- hash: 4086389073629585186
103
+ hash: -2205103365390497425
100
104
  required_rubygems_version: !ruby/object:Gem::Requirement
101
105
  none: false
102
106
  requirements:
@@ -105,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
109
  version: '0'
106
110
  segments:
107
111
  - 0
108
- hash: 4086389073629585186
112
+ hash: -2205103365390497425
109
113
  requirements: []
110
114
  rubyforge_project:
111
115
  rubygems_version: 1.8.25
@@ -115,5 +119,6 @@ summary: Tuvi is a Ruby DSL which supplies a declarative format which dictates t
115
119
  flow of the program as a series of steps.
116
120
  test_files:
117
121
  - spec/spec_helper.rb
122
+ - spec/tuvi/application_runner_spec.rb
118
123
  - spec/tuvi/step_spec.rb
119
124
  - spec/tuvi_spec.rb