codersdojo 0.9.10 → 0.9.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,7 @@
1
+ require 'session_id_generator'
2
+ require 'runner'
3
+ require 'shell_argument_exception'
4
+
1
5
  class ArgumentParser
2
6
 
3
7
  def initialize controller
@@ -18,7 +22,7 @@ class ArgumentParser
18
22
  elsif command.downcase == "spec" then
19
23
  # 'spec" is for testing purpose only: do nothing special
20
24
  else
21
- raise ArgumentError
25
+ raise ShellArgumentException
22
26
  end
23
27
  end
24
28
 
data/app/codersdojo.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'console_view'
4
4
  require 'controller'
5
5
  require 'argument_parser'
6
+ require 'scaffolder'
6
7
 
7
8
  def called_from_spec args
8
9
  args[0] == "spec"
@@ -10,14 +11,18 @@ end
10
11
 
11
12
  # entry from shell
12
13
  if not called_from_spec(ARGV) then
13
- view = ConsoleView.new
14
14
  hostname = "http://www.codersdojo.com"
15
15
  # hostname = "http://localhost:3000"
16
- controller = Controller.new view, hostname
16
+
17
+ shell = ShellWrapper.new
18
+ scaffolder = Scaffolder.new shell
19
+ view = ConsoleView.new scaffolder
20
+ controller = Controller.new shell, view, scaffolder, hostname
21
+
17
22
  begin
18
23
  arg_parser = ArgumentParser.new controller
19
24
  command = arg_parser.parse ARGV
20
- rescue ArgumentError
25
+ rescue ShellArgumentException
21
26
  controller.help
22
27
  end
23
28
  end
data/app/console_view.rb CHANGED
@@ -4,6 +4,10 @@ class ConsoleView
4
4
 
5
5
  @@VERSION = '0.9'
6
6
 
7
+ def initialize scaffolder
8
+ @scaffolder = scaffolder
9
+ end
10
+
7
11
  def show_help
8
12
  puts <<-helptext
9
13
  Personal CodersDojo, Version #{@@VERSION}, http://www.codersdojo.com, Copyright by it-agile GmbH (http://www.it-agile.de)
@@ -39,7 +43,7 @@ helptext
39
43
  end
40
44
 
41
45
  def show_help_setup
42
- templates = ShellWrapper.new.list_templates
46
+ templates = @scaffolder.list_templates
43
47
  puts <<-helptext
44
48
 
45
49
  setup <framework> <kata_file_no_ext> Setup the environment for the kata for the given framework and kata file.
@@ -64,7 +68,7 @@ helptext
64
68
  end
65
69
 
66
70
  def show_help_upload
67
- templates = ShellWrapper.new.list_templates
71
+ templates = @scaffolder.list_templates
68
72
  puts <<-helptext
69
73
 
70
74
  upload <framework> <session_directory> Upload the kata written with <framework> in <session_directory> to codersdojo.com.
data/app/controller.rb CHANGED
@@ -1,7 +1,11 @@
1
+ require 'scheduler'
2
+
1
3
  class Controller
2
4
 
3
- def initialize view, hostname
5
+ def initialize shell, view, scaffolder, hostname
6
+ @shell = shell
4
7
  @view = view
8
+ @scaffolder = scaffolder
5
9
  @hostname = hostname
6
10
  end
7
11
 
@@ -14,13 +18,8 @@ class Controller
14
18
  end
15
19
 
16
20
  def generate framework, kata_file
17
- shell = ShellWrapper.new
18
- shell.scaffold framework
19
- generator_text = IO.readlines("README").to_s;
20
- generator_text = generator_text.gsub('#{kata_file}', kata_file)
21
- generator_text = generator_text.gsub('#{$0}', $0)
22
- generator_text = shell.make_os_specific generator_text
23
- puts "\n" + generator_text
21
+ @scaffolder.scaffold framework, kata_file
22
+ puts "\n" + @shell.read_file("README")
24
23
  end
25
24
 
26
25
  def start command, file
data/app/scaffolder.rb ADDED
@@ -0,0 +1,59 @@
1
+ require 'text_template_machine'
2
+
3
+ class Scaffolder
4
+
5
+ ANY_TEMPLATE = "any"
6
+
7
+ def initialize shell
8
+ @shell = shell
9
+ @template_machine = create_template_machine
10
+ end
11
+
12
+ def create_template_machine
13
+ template_machine = TextTemplateMachine.new @shell
14
+ template_machine.placeholder_values = {
15
+ 'sh' => @shell.shell_extension,
16
+ ':' => @shell.path_separator,
17
+ 'rm' => @shell.remove_command_name
18
+ }
19
+ template_machine
20
+ end
21
+
22
+ def list_templates
23
+ templates = @shell.real_dir_entries template_path
24
+ templates.delete ANY_TEMPLATE
25
+ templates.join(', ')
26
+ end
27
+
28
+ def scaffold template, kata_file
29
+ @template_machine.placeholder_values['kata_file'] = kata_file
30
+ begin
31
+ dir_path = "#{template_path}/#{template}"
32
+ to_copy = @shell.real_dir_entries dir_path
33
+ rescue
34
+ dir_path = "#{template_path}/#{ANY_TEMPLATE}"
35
+ to_copy = @shell.real_dir_entries dir_path
36
+ end
37
+ to_copy.each do |item|
38
+ file_path = "#{dir_path}/#{item}"
39
+ @shell.cp_r file_path, "."
40
+ transform_file item
41
+ end
42
+ end
43
+
44
+ def transform_file file
45
+ if file == "README" or file.end_with?(".sh")
46
+ content = @shell.read_file file
47
+ content = @template_machine.render content
48
+ @shell.write_file file, content
49
+ end
50
+ end
51
+
52
+ def template_path
53
+ file_path_elements = @shell.current_file.split '/'
54
+ file_path_elements[-2..-1] = nil
55
+ (file_path_elements << 'templates').join '/'
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,3 @@
1
+ class ShellArgumentException < Exception
2
+
3
+ end
data/app/shell_wrapper.rb CHANGED
@@ -3,12 +3,15 @@ require 'tempfile'
3
3
  class ShellWrapper
4
4
 
5
5
  MAX_STDOUT_LENGTH = 100000
6
- ANY_TEMPLATE = "any"
7
6
 
8
7
  def cp source, destination
9
8
  FileUtils.cp source, destination
10
9
  end
11
10
 
11
+ def cp_r source, destination
12
+ FileUtils.cp_r source, destination
13
+ end
14
+
12
15
  def mkdir dir
13
16
  FileUtils.mkdir dir
14
17
  end
@@ -17,6 +20,10 @@ class ShellWrapper
17
20
  FileUtils.mkdir_p dirs
18
21
  end
19
22
 
23
+ def current_file
24
+ __FILE__
25
+ end
26
+
20
27
  def execute command
21
28
  spec_pipe = IO.popen(command, "r")
22
29
  result = spec_pipe.read MAX_STDOUT_LENGTH
@@ -42,38 +49,19 @@ class ShellWrapper
42
49
  File.new(filename).ctime
43
50
  end
44
51
 
45
- def list_templates
46
- templates = real_dir_entries template_path
47
- templates.delete ANY_TEMPLATE
48
- templates.join(', ')
49
- end
50
-
51
- def scaffold template
52
- begin
53
- dir_path = "#{template_path}/#{template}"
54
- to_copy = real_dir_entries dir_path
55
- rescue
56
- dir_path = "#{template_path}/#{ANY_TEMPLATE}"
57
- to_copy = real_dir_entries dir_path
58
- end
59
- to_copy.each do |item|
60
- FileUtils.cp_r "#{dir_path}/#{item}", "."
61
- end
62
- end
63
-
64
- def template_path
65
- file_path_elements = __FILE__.split '/'
66
- file_path_elements[-2..-1] = nil
67
- (file_path_elements << 'templates').join '/'
68
- end
69
-
70
52
  def real_dir_entries dir
71
53
  current_and_parent = 2
72
54
  Dir.new(dir).entries.drop current_and_parent
73
55
  end
74
56
 
75
- def make_os_specific text
76
- text.gsub('%sh%', shell_extension).gsub('%:%', path_separator).gsub('%rm%', remove_command_name)
57
+ def read_file filename
58
+ generator_text = IO.readlines(filename).to_s;
59
+ end
60
+
61
+ def write_file filename, content
62
+ File.open(filename, 'w') do |f|
63
+ f.puts content
64
+ end
77
65
  end
78
66
 
79
67
  def remove_command_name
@@ -0,0 +1,26 @@
1
+ class TextTemplateMachine
2
+
3
+ attr_accessor :placeholder_values
4
+
5
+ def initialize shell
6
+ @shell = shell
7
+ @placeholder_values = []
8
+ end
9
+
10
+ def render text
11
+ @placeholder_values.each do |placeholder_value|
12
+ placeholder = placeholder_value.first
13
+ value = placeholder_value.last
14
+ text = replace_placeholder text, placeholder, value
15
+ end
16
+ text
17
+ end
18
+
19
+ def replace_placeholder text, placeholder, value
20
+ text = text.gsub "%#{placeholder}%", value
21
+ placeholder_cap = placeholder.capitalize
22
+ value_cap = value.capitalize
23
+ text.gsub "%#{placeholder_cap}%", value_cap
24
+ end
25
+
26
+ end
@@ -0,0 +1,54 @@
1
+ require "scaffolder"
2
+
3
+ describe Scaffolder do
4
+
5
+ before (:each) do
6
+ @shell_mock = mock
7
+ @shell_mock.should_receive(:shell_extension).any_number_of_times.and_return "cmd"
8
+ @shell_mock.should_receive(:remove_command_name).any_number_of_times.and_return "del"
9
+ @shell_mock.should_receive(:path_separator).any_number_of_times.and_return ";"
10
+ @shell_mock.should_receive(:current_file).any_number_of_times.and_return("aDir/app/aFile.rb")
11
+ @scaffolder = Scaffolder.new @shell_mock
12
+ end
13
+
14
+ it "should compute template path from location of ruby source file" do
15
+ @scaffolder.template_path.should == "aDir/templates"
16
+ end
17
+
18
+ it "should retrieve templates from directories within the template directory" do
19
+ @shell_mock.should_receive(:real_dir_entries).with("aDir/templates").and_return ['any', 't1', 't2', 't3']
20
+ @scaffolder.list_templates.should == 't1, t2, t3'
21
+ end
22
+
23
+ it "should scaffold the files and directories for a given template" do
24
+ @shell_mock.should_receive(:real_dir_entries).with("aDir/templates/a.template").and_return ["a", "b"]
25
+ @shell_mock.should_receive(:cp_r).with "aDir/templates/a.template/a", "."
26
+ @shell_mock.should_receive(:cp_r).with "aDir/templates/a.template/b", "."
27
+ @scaffolder.scaffold "a.template", 'myKata'
28
+ end
29
+
30
+ it "should use 'any' when the given template doesn't exist" do
31
+ @shell_mock.should_receive(:real_dir_entries).with("aDir/templates/unknown.template").and_throw Exception
32
+ @shell_mock.should_receive(:real_dir_entries).with("aDir/templates/any").and_return ["a"]
33
+ @shell_mock.should_receive(:cp_r).with "aDir/templates/any/a", "."
34
+ @scaffolder.scaffold "unknown.template", 'myKata'
35
+ end
36
+
37
+ it "should replace placeholder in template file README and shell scripts" do
38
+ @shell_mock.should_receive(:real_dir_entries).with("aDir/templates/a.template").
39
+ and_return ["a", "README", "run-once.sh", "run-endless.sh"]
40
+ @shell_mock.should_receive(:cp_r).with "aDir/templates/a.template/a", "."
41
+ @shell_mock.should_receive(:cp_r).with "aDir/templates/a.template/README", "."
42
+ @shell_mock.should_receive(:cp_r).with "aDir/templates/a.template/run-once.sh", "."
43
+ @shell_mock.should_receive(:cp_r).with "aDir/templates/a.template/run-endless.sh", "."
44
+ @shell_mock.should_receive(:read_file).with("README").and_return '%rm% %kata_file%\nb.%sh%\nc%:%d'
45
+ @shell_mock.should_receive(:write_file).with "README", 'del myKata\nb.cmd\nc;d'
46
+ @shell_mock.should_receive(:read_file).with("run-once.sh").and_return "%rm% a\nb.%sh%\nc%:%d"
47
+ @shell_mock.should_receive(:write_file).with "run-once.sh", "del a\nb.cmd\nc;d"
48
+ @shell_mock.should_receive(:read_file).with("run-endless.sh").and_return "%rm% a\nb.%sh%\nc%:%d"
49
+ @shell_mock.should_receive(:write_file).with "run-endless.sh", "del a\nb.cmd\nc;d"
50
+ @scaffolder.scaffold "a.template", 'myKata'
51
+ end
52
+
53
+ end
54
+
@@ -12,10 +12,10 @@ describe StateReader do
12
12
  end
13
13
 
14
14
  it "should read a stored kata state" do
15
- @shell_mock.should_receive(:ctime).with("#{@state_dir_prefix}0").and_return @a_time
16
- Dir.should_receive(:entries).with("#{@state_dir_prefix}0").and_return(['.','..','file.rb', 'result.txt'])
17
- @shell_mock.should_receive(:read_file).with("#{@state_dir_prefix}0/file.rb").and_return "source code"
18
- @shell_mock.should_receive(:read_file).with("#{@state_dir_prefix}0/result.txt").and_return "result"
15
+ @shell_mock.should_receive(:ctime).with(".codersdojo/id0815/#{@state_dir_prefix}0").and_return @a_time
16
+ Dir.should_receive(:entries).with(".codersdojo/id0815/#{@state_dir_prefix}0").and_return(['.','..','file.rb', 'result.txt'])
17
+ @shell_mock.should_receive(:read_file).with(".codersdojo/id0815/#{@state_dir_prefix}0/result.txt").and_return "result"
18
+ @shell_mock.should_receive(:read_file).with(".codersdojo/id0815/#{@state_dir_prefix}0/file.rb").and_return "source code"
19
19
  state = @state_reader.read_next_state
20
20
  state.time.should == @a_time
21
21
  state.code.should == "source code"
@@ -0,0 +1,40 @@
1
+ require 'text_template_machine'
2
+
3
+ describe TextTemplateMachine do
4
+
5
+ before (:each) do
6
+ shell_mock = mock
7
+ @machine = TextTemplateMachine.new shell_mock
8
+ @placeholder_values = {'a' => 'A', 'wo' => 'world', 'm' => 'my'}
9
+ @machine.placeholder_values = @placeholder_values
10
+ end
11
+
12
+ it "should not modifiy text without placeholders" do
13
+ @machine.render('Some text without placeholders.').should == 'Some text without placeholders.'
14
+ end
15
+
16
+ it "should not modifiy unknown placeholders" do
17
+ @machine.render('Hello %unknown%').should == 'Hello %unknown%'
18
+ end
19
+
20
+ it "should resolve placeholders" do
21
+ @machine.render('Hello %wo%, %m% %wo%').should == 'Hello world, my world'
22
+ end
23
+
24
+ it "should not modify case of first letter" do
25
+ @machine.render('Hello %wo%').should == 'Hello world'
26
+ @machine.render('Hello %Wo%').should == 'Hello World'
27
+ end
28
+
29
+ it "should use added placeholder" do
30
+ @machine.placeholder_values['xxx'] = 'xxx-value'
31
+ @machine.render('%xxx%').should == 'xxx-value'
32
+ end
33
+
34
+ it "should use newest placeholder value" do
35
+ @machine.placeholder_values['a'] = 'b'
36
+ @machine.render('%a%').should == 'b'
37
+ end
38
+
39
+ end
40
+
data/templates/any/README CHANGED
@@ -1,10 +1,10 @@
1
- You have to create two shell scripts manually:
2
- Create a shell script run-once.%sh% that runs the tests of your kata once.
1
+ Two shell scripts were created:
2
+ run-once.%sh% runs your tests once
3
+ run-endless.%sh% runs your tests endlessly via run-once.%sh%
3
4
 
4
- Create a second shell script run-endless.sh with this content:
5
- #{$0} start run-once.%sh% #{kata_file}.<extension>
5
+ run-once.%sh% is not implemented by now. You have to implement it appropriately.
6
6
 
7
7
  Run run-endless.%sh% and start your kata.
8
8
 
9
9
  Assumptions:
10
- - The whole kata source code is in the one #{kata_file}.<extension>.
10
+ - The whole kata source code is in the one %kata_file%.
@@ -1,2 +1 @@
1
- echo "Modify run-endless.sh so that it uses your actual kata file."
2
- #codersdojo start run-once.sh #{kata_file}
1
+ codersdojo start run-once.sh %kata_file%
@@ -1 +1 @@
1
- echo "Modify shell script run-once.sh so that it runs your tests once."
1
+ echo "Modify shell script run-once.%sh% so that it runs your tests once."
@@ -1,12 +1,10 @@
1
- You have to create two shell scripts manually:
2
- Create a shell script run-once.%sh% with this content:
3
- java -cp clojure-contrib.jar%:%clojure.jar clojure.main #{kata_file}.clj
1
+ Two shell scripts were created:
2
+ run-once.%sh% runs your tests once
3
+ run-endless.%sh% runs your tests endlessly via run-once.%sh%
4
4
 
5
- Create a second shell script run-endless.sh with this content:
6
- #{$0} start run-once.%sh% #{kata_file}.clj
7
-
8
- Run run-endless.%sh% and start your kata.
5
+ Run run-endless.sh and start your kata.
9
6
 
10
7
  Assumptions:
8
+ - The whole kata source code is in the one %kata_file%.clj.
11
9
  - Java is installed on your system and 'java' is in the path.
12
- - clojure.jar and clojure-contrib.jar are placed in your work directory.
10
+ - clojure.jar and clojure-contrib.jar are placed in the 'lib' directory.
@@ -1 +1,2 @@
1
- codersdojo start run-once.sh prime.clj
1
+ codersdojo start run-once.sh %kata_file%.clj
2
+
@@ -1,2 +1 @@
1
- echo "Modify shell script run-once.sh so that it runs your tests once."
2
- # java -cp lib/clojure-contrib.jar:/System/Library/Frameworks/Clojure/clojure.jar clojure.main #{kata_file}
1
+ java -cp lib/clojure-contrib.jar%:%lib/clojure.jar clojure.main %kata_file%.clj
@@ -1,19 +1,15 @@
1
- You have to create two shell scripts manually:
2
- Create a shell script run-once.%sh% with this content:
3
- %rm% bin/#{kata_file}.class
4
- javac -cp lib/junit.jar -d bin #{kata_file}.java
5
- java -cp lib/junit.jar%:%bin #{kata_file}
1
+ Two shell scripts were created:
2
+ run-once.%sh% runs your tests once
3
+ run-endless.%sh% runs your tests endlessly via run-once.%sh%
6
4
 
7
- Create a second shell script run-endless.sh with this content:
8
- #{$0} start run-once.%sh% src/#{kata_file}.java
9
-
10
- Run run-endless.%sh% and start your kata.
5
+ Run run-endless.sh and start your kata.
11
6
 
12
7
  Assumptions:
13
8
  - A Java JDK is installed on your system and 'java' and 'javac' are in the path.
14
- - junit.jar is placed in a directory named 'lib'.
9
+ - junit.jar is placed in the 'lib' directory.
10
+ - The whole kata source code is in the one %Kata_file%Test.java.
15
11
  - The kata source file is placed in the 'src' directory.
16
- - The kata class file is generated into the 'class' directory.
12
+ - The kata class file is generated into the 'bin' directory.
17
13
  - In the source file the classes are placed in the default package.
18
14
  - The kata source file has a main method that starts the tests.
19
15
  - If your IDE (like Eclipse) compiles the source file, you should remove the first two lines
@@ -1 +1 @@
1
- ruby ../../app/personal_codersdojo.rb start run-once.sh src/PrimeTest.java
1
+ codersdojo start run-once.sh src/%Kata_file%Test.java
@@ -1,3 +1,3 @@
1
- rm bin/PrimeTest.class
2
- javac -cp lib/junit.jar -d bin src/PrimeTest.java
3
- java -cp lib/junit.jar:bin PrimeTest
1
+ rm bin/%Kata_file%Test.class
2
+ javac -cp lib/junit.jar -d bin src/%Kata_file%Test.java
3
+ java -cp lib/junit.jar:bin org.junit.runner.JUnitCore %Kata_file%Test
@@ -1,8 +1,8 @@
1
- You have to create two shell scripts manually:
2
- Create a shell script run-once.%sh% with this content:
3
- python #{kata_file}.py
1
+ Two shell scripts were created:
2
+ run-once.%sh% runs your tests once
3
+ run-endless.%sh% runs your tests endlessly via run-once.%sh%
4
4
 
5
- Create a second shell script run-endless.sh with this content:
6
- #{$0} start run-once.%sh% #{kata_file}.py
5
+ Run run-endless.%sh% and start your kata.
7
6
 
8
- Run run-endless.%sh% and start your kata.
7
+ Assumptions:
8
+ - The whole kata source code is in the one %kata_file%.py.
@@ -0,0 +1 @@
1
+ codersdojo start run-once.sh %kata_file%.py
@@ -0,0 +1 @@
1
+ python %kata_file%.py
@@ -1,5 +1,8 @@
1
- You have to create one shell script manually:
2
- Create a shell script run-endless.%sh% with this content:
3
- #{$0} start ruby #{kata_file}.rb
1
+ Two shell scripts were created:
2
+ run-once.%sh% runs your tests once
3
+ run-endless.%sh% runs your tests endlessly via run-once.%sh%
4
4
 
5
- Run run-endless.%sh% and start your kata.
5
+ Run run-endless.%sh% and start your kata.
6
+
7
+ Assumptions:
8
+ - The whole kata source code is in the one %kata_file%.rb.
@@ -0,0 +1 @@
1
+ codersdojo start run-once.sh %kata_file%.rb
@@ -0,0 +1 @@
1
+ ruby %kata_file%.rb
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codersdojo
3
3
  version: !ruby/object:Gem::Version
4
- hash: 47
4
+ hash: 45
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 10
10
- version: 0.9.10
9
+ - 11
10
+ version: 0.9.11
11
11
  platform: ruby
12
12
  authors:
13
13
  - CodersDojo-Team
@@ -48,16 +48,19 @@ files:
48
48
  - app/filename_formatter.rb
49
49
  - app/progress.rb
50
50
  - app/runner.rb
51
+ - app/scaffolder.rb
51
52
  - app/scheduler.rb
52
53
  - app/session_id_generator.rb
54
+ - app/shell_argument_exception.rb
53
55
  - app/shell_wrapper.rb
54
56
  - app/state_reader.rb
57
+ - app/text_template_machine.rb
55
58
  - app/uploader.rb
56
59
  - app/xml_element_extractor.rb
57
60
  - templates/any/README
58
61
  - templates/any/run-endless.sh
59
62
  - templates/any/run-once.sh
60
- - templates/clojure.is-test/lib/clojure-contrib.jar
63
+ - templates/clojure.is-test/lib/place_your_libs_here
61
64
  - templates/clojure.is-test/README
62
65
  - templates/clojure.is-test/run-endless.sh
63
66
  - templates/clojure.is-test/run-once.sh
@@ -67,14 +70,19 @@ files:
67
70
  - templates/java.junit/run-endless.sh
68
71
  - templates/java.junit/run-once.sh
69
72
  - templates/java.junit/src/place_your_source_files_here
70
- - templates/javascript.jspec/README
71
73
  - templates/python.unittest/README
74
+ - templates/python.unittest/run-endless.sh
75
+ - templates/python.unittest/run-once.sh
72
76
  - templates/ruby.test-unit/README
77
+ - templates/ruby.test-unit/run-endless.sh
78
+ - templates/ruby.test-unit/run-once.sh
73
79
  - spec/argument_parser_spec.rb
74
80
  - spec/progress_spec.rb
75
81
  - spec/runner_spec.rb
82
+ - spec/scaffolder_spec.rb
76
83
  - spec/session_id_generator_spec.rb
77
84
  - spec/state_reader_spec.rb
85
+ - spec/text_template_machine_spec.rb
78
86
  - spec/uploader_spec.rb
79
87
  - spec/xml_element_extractor_spec.rb
80
88
  - bin/codersdojo
@@ -116,7 +124,9 @@ test_files:
116
124
  - spec/argument_parser_spec.rb
117
125
  - spec/progress_spec.rb
118
126
  - spec/runner_spec.rb
127
+ - spec/scaffolder_spec.rb
119
128
  - spec/session_id_generator_spec.rb
120
129
  - spec/state_reader_spec.rb
130
+ - spec/text_template_machine_spec.rb
121
131
  - spec/uploader_spec.rb
122
132
  - spec/xml_element_extractor_spec.rb
@@ -1,8 +0,0 @@
1
- You have to create two shell scripts manually:
2
- Create a shell script run-once.%sh% with this content:
3
- jspec --rhino run
4
-
5
- Create a second shell script run-endless.sh with this content:
6
- #{$0} start run-once.%sh% #{kata_file}.js
7
-
8
- Run run-endless.%sh% and start your kata.