codersdojo 0.9.10 → 0.9.11

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.
@@ -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.