codersdojo 1.5.06 → 1.5.07

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/lib/codersdojo.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'shellutils/argument_parser'
3
4
  require 'console_view'
4
- require 'argument_parser'
5
+ require 'commands/command_configuration'
5
6
  require 'scaffold/scaffolder'
6
7
 
7
8
  class CodersDojo
@@ -18,7 +19,8 @@ class CodersDojo
18
19
  view = ConsoleView.new scaffolder
19
20
 
20
21
  begin
21
- arg_parser = ArgumentParser.new shell, view, scaffolder, @hostname
22
+ command_config = CommandConfiguration.new shell, view, scaffolder, @hostname
23
+ arg_parser = ArgumentParser.new command_config.commands
22
24
  command = arg_parser.parse @params
23
25
  rescue ShellArgumentException => e
24
26
  view.show_unknwon_command_message e.command
@@ -1,4 +1,5 @@
1
1
  require 'record/session_id_generator'
2
+ require 'record/state_recorder'
2
3
  require 'run/runner'
3
4
  require 'state_reader'
4
5
  require 'shellutils/shell_argument_exception'
@@ -15,11 +16,13 @@ require 'commands/upload_no_open_command'
15
16
  require 'commands/upload_zipped_session_command'
16
17
  require 'commands/start_command'
17
18
 
18
- class ArgumentParser
19
+ class CommandConfiguration
20
+
21
+ attr_reader :commands
19
22
 
20
23
  def initialize shell, view, scaffolder, hostname
21
24
  meta_config_file = MetaConfigFile.new shell
22
- runner = Runner.new shell, SessionIdGenerator.new, view, meta_config_file
25
+ runner = create_runner shell, view, meta_config_file
23
26
  @help_command = HelpCommand.new view
24
27
  @xhelp_command = XHelpCommand.new view
25
28
  @generate_command = GenerateCommand.new shell, view, scaffolder
@@ -35,22 +38,15 @@ class ArgumentParser
35
38
  @upload_command, @upload_no_open_command, @upload_zipped_session_command]
36
39
  end
37
40
 
38
- def parse params
39
- params[0] = params[0] ? params[0].downcase : 'help'
40
- command_name = params[0]
41
- command_executed = false
42
- @commands.each do |command|
43
- if command.accepts_shell_command?(command_name)
44
- command.execute_from_shell params
45
- command_executed = true
46
- end
47
- end
48
- if not command_executed and command_name == "spec"
49
- # 'spec" is for testing purpose only: do nothing special
50
- elsif not command_executed
51
- raise ShellArgumentException.new command_name
52
- end
41
+ private
42
+
43
+ def create_runner shell, view, meta_config_file
44
+ state_recorder = StateRecorder.new shell, SessionIdGenerator.new, meta_config_file
45
+ runner = Runner.new shell, view
46
+ runner.init_session_callback = Proc.new {state_recorder.init_session}
47
+ runner.execute_callback = Proc.new {|files, process| state_recorder.record_state files, process}
48
+ runner
53
49
  end
54
-
50
+
55
51
  end
56
52
 
@@ -1,5 +1,6 @@
1
1
  require 'meta_config_file'
2
2
  require 'run/scheduler'
3
+ require 'run/scheduler_interrupt_listener'
3
4
 
4
5
  class StartCommand
5
6
 
@@ -20,7 +21,8 @@ class StartCommand
20
21
  @view.show_start_kata command, file, @meta_file.framework_property
21
22
  @runner.source_files = @meta_file.source_files
22
23
  @runner.run_command = command
23
- scheduler = Scheduler.new @runner, @view, @eval_loop_commands
24
+ scheduler = Scheduler.new @runner
25
+ scheduler.interrupt_listener = SchedulerInterruptListener.new @view, @eval_loop_commands
24
26
  scheduler.start
25
27
  end
26
28
 
data/lib/console_view.rb CHANGED
@@ -28,6 +28,7 @@ Commands:
28
28
  help <command> See the details of the command.
29
29
  xhelp Print help text for advanced commands.
30
30
  setup <framework> <kata_file> Setup the environment for running the kata.
31
+ upload-zip [<session_dir>] Upload session as a ZIP file (beta feature)
31
32
  upload [<session_dir>] Upload the kata to http://www.codersdojo.org and open the kata in a browser.
32
33
  upload-no-open [<session_dir>] Upload the kata to http://www.codersdojo.org
33
34
 
@@ -43,7 +44,6 @@ Commands:
43
44
  init-session Create a new session dir within the .codersdojo dir.
44
45
  capture-single-run <shell_command> <kata_file> Capture a single run.
45
46
  start <shell_command> <kata_file> Start the continuous test loop.
46
- upload-zip [<session_dir>] Upload session as a ZIP file (beta feature)
47
47
  helptext
48
48
  end
49
49
 
data/lib/run/runner.rb CHANGED
@@ -1,31 +1,19 @@
1
- require "info_property_file"
2
- require "filename_formatter"
3
- require "record/state_recorder"
4
-
5
1
  class Runner
6
2
 
7
- attr_accessor :source_files, :run_command
3
+ attr_accessor :source_files, :run_command, :init_session_callback, :execute_callback
8
4
 
9
5
  WORKING_DIR = '.'
10
6
 
11
- def initialize shell, session_id_generator, view, meta_config_file
12
- @filename_formatter = FilenameFormatter.new
7
+ def initialize shell, view
13
8
  @shell = shell
14
- @session_id_generator = session_id_generator
15
9
  @view = view
16
- @meta_config_file = meta_config_file
17
10
  end
18
11
 
19
12
  def start
20
- @state_recorder = StateRecorder.new(@shell, @session_id_generator, @meta_config_file)
21
- init_session
13
+ if @init_session_callback then @init_session_callback.call end
22
14
  execute
23
15
  end
24
16
 
25
- def init_session
26
- @state_recorder.init_session
27
- end
28
-
29
17
  def execute
30
18
  files = @shell.files_in_dir_tree WORKING_DIR, @source_files
31
19
  newest_dir_entry = @shell.newest_dir_entry WORKING_DIR, files
@@ -42,7 +30,7 @@ class Runner
42
30
 
43
31
  def execute_once files
44
32
  process = @shell.execute @run_command
45
- @state_recorder.record_state files, process
33
+ if @execute_callback then @execute_callback.call(files, process) end
46
34
  end
47
35
 
48
36
  def run_command= command
data/lib/run/scheduler.rb CHANGED
@@ -1,54 +1,31 @@
1
1
  class Scheduler
2
2
 
3
- def initialize runner, view, commands
3
+ attr_accessor :interrupt_listener
4
+
5
+ def initialize runner
4
6
  @runner = runner
5
- @view = view
6
- @last_action = ""
7
- @commands = commands
8
- @continue_after_command = false
9
7
  end
10
8
 
11
9
  def start
12
- @last_action = ""
10
+ @continue = true
13
11
  register_interrupt_listener
14
12
  @runner.start
15
- while continue? do
13
+ while @continue do
16
14
  sleep 1
17
15
  @runner.execute
18
16
  end
19
17
  end
20
18
 
19
+ private
20
+
21
21
  def register_interrupt_listener
22
22
  trap("INT") {
23
- interrupt_kata
23
+ interrupt
24
24
  }
25
25
  end
26
-
27
- def interrupt_kata
28
- @continue_after_command = false
29
- @view.show_kata_exit_message
30
- @last_action = @view.read_user_input.downcase
31
- @commands.each do |command|
32
- if @last_action.start_with? command.command_key
33
- command.execute
34
- @continue_after_command = command.continue_test_loop?
35
- end
36
- end
37
- if last_action_was_exit? then
38
- @view.show_kata_upload_hint
39
- end
40
- end
41
26
 
42
- def continue?
43
- @last_action == '' or last_action_was_resume? or @continue_after_command
44
- end
45
-
46
- def last_action_was_resume?
47
- @last_action.start_with? 'r'
48
- end
49
-
50
- def last_action_was_exit?
51
- @last_action.start_with? 'e'
52
- end
27
+ def interrupt
28
+ if @interrupt_listener then @continue = @interrupt_listener.interrupt end
29
+ end
53
30
 
54
31
  end
@@ -0,0 +1,38 @@
1
+ class SchedulerInterruptListener
2
+
3
+ def initialize view, commands
4
+ @view = view
5
+ @commands = commands
6
+ @continue_after_command = false
7
+ @last_action = ""
8
+ end
9
+
10
+ def interrupt
11
+ @continue_after_command = false
12
+ @view.show_kata_exit_message
13
+ @last_action = @view.read_user_input.downcase
14
+ @commands.each do |command|
15
+ if @last_action.start_with? command.command_key
16
+ command.execute
17
+ @continue_after_command = command.continue_test_loop?
18
+ end
19
+ end
20
+ if last_action_was_exit? then
21
+ @view.show_kata_upload_hint
22
+ end
23
+ continue?
24
+ end
25
+
26
+ def continue?
27
+ @last_action == '' or last_action_was_resume? or @continue_after_command
28
+ end
29
+
30
+ def last_action_was_resume?
31
+ @last_action.start_with? 'r'
32
+ end
33
+
34
+ def last_action_was_exit?
35
+ @last_action.start_with? 'e'
36
+ end
37
+
38
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 5
8
- - 6
9
- version: 1.5.06
8
+ - 7
9
+ version: 1.5.07
10
10
  platform: ruby
11
11
  authors:
12
12
  - CodersDojo-Team
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-09-26 00:00:00 +02:00
17
+ date: 2011-10-01 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -69,8 +69,8 @@ dependencies:
69
69
  segments:
70
70
  - 0
71
71
  - 0
72
- - 8
73
- version: 0.0.8
72
+ - 9
73
+ version: 0.0.9
74
74
  type: :runtime
75
75
  version_requirements: *id004
76
76
  description: Client executes tests in an endless loop and logs source code and test result for later uplaod.
@@ -82,9 +82,9 @@ extensions: []
82
82
  extra_rdoc_files: []
83
83
 
84
84
  files:
85
- - lib/argument_parser.rb
86
85
  - lib/codersdojo.rb
87
86
  - lib/commands/capture_single_run_command.rb
87
+ - lib/commands/command_configuration.rb
88
88
  - lib/commands/generate_command.rb
89
89
  - lib/commands/help_command.rb
90
90
  - lib/commands/init_session_command.rb
@@ -105,6 +105,7 @@ files:
105
105
  - lib/record/text_converter.rb
106
106
  - lib/run/runner.rb
107
107
  - lib/run/scheduler.rb
108
+ - lib/run/scheduler_interrupt_listener.rb
108
109
  - lib/scaffold/scaffolder.rb
109
110
  - lib/scaffold/text_template_machine.rb
110
111
  - lib/state.rb