codersdojo 1.4.07 → 1.5.00

Sign up to get free protection for your applications and to get access to all the features.
data/bin/codersdojo CHANGED
@@ -14,7 +14,7 @@ msg
14
14
  end
15
15
 
16
16
  show_update_message_when_old
17
- codersdojo_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'app'))
17
+ codersdojo_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
18
18
  $LOAD_PATH.unshift(codersdojo_dir) unless $LOAD_PATH.include?(codersdojo_dir)
19
19
  require 'codersdojo'
20
20
  CodersDojo.new(ARGV).run
@@ -5,15 +5,15 @@ require 'shell_wrapper'
5
5
  require 'console_view'
6
6
  require 'return_code_evaluator'
7
7
  require 'state_reader'
8
- require 'help_command'
9
- require 'xhelp_command'
10
- require 'generate_command'
11
- require 'init_session_command'
12
- require 'capture_single_run_command'
13
- require 'revert_to_green_command'
14
- require 'upload_command'
15
- require 'upload_no_open_command'
16
- require 'start_command'
8
+ require 'commands/help_command'
9
+ require 'commands/xhelp_command'
10
+ require 'commands/generate_command'
11
+ require 'commands/init_session_command'
12
+ require 'commands/capture_single_run_command'
13
+ require 'commands/revert_to_green_command'
14
+ require 'commands/upload_command'
15
+ require 'commands/upload_no_open_command'
16
+ require 'commands/start_command'
17
17
 
18
18
  class ArgumentParser
19
19
 
@@ -60,10 +60,14 @@ class Scaffolder
60
60
  end
61
61
 
62
62
  def template_path
63
- file_path_elements = @shell.current_file.split '/'
63
+ file_path_elements = Scaffolder::current_file.split '/'
64
64
  file_path_elements[-2..-1] = nil
65
65
  (file_path_elements << 'templates').join '/'
66
66
  end
67
67
 
68
+ def self.current_file
69
+ __FILE__
70
+ end
71
+
68
72
  end
69
73
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 4
8
- - 7
9
- version: 1.4.07
7
+ - 5
8
+ - 0
9
+ version: 1.5.00
10
10
  platform: ruby
11
11
  authors:
12
12
  - CodersDojo-Team
@@ -60,7 +60,7 @@ dependencies:
60
60
  type: :runtime
61
61
  version_requirements: *id003
62
62
  - !ruby/object:Gem::Dependency
63
- name: rubyzip
63
+ name: shell-utils
64
64
  prerelease: false
65
65
  requirement: &id004 !ruby/object:Gem::Requirement
66
66
  requirements:
@@ -68,9 +68,9 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  segments:
70
70
  - 0
71
- - 9
72
- - 4
73
- version: 0.9.4
71
+ - 0
72
+ - 1
73
+ version: 0.0.1
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,39 +82,24 @@ extensions: []
82
82
  extra_rdoc_files: []
83
83
 
84
84
  files:
85
- - app/argument_parser.rb
86
- - app/capture_single_run_command.rb
87
- - app/codersdojo.rb
88
- - app/console_view.rb
89
- - app/filename.rb
90
- - app/filename_formatter.rb
91
- - app/generate_command.rb
92
- - app/help_command.rb
93
- - app/info_property_file.rb
94
- - app/init_session_command.rb
95
- - app/meta_config_file.rb
96
- - app/progress.rb
97
- - app/property_file_missing_exception.rb
98
- - app/return_code_evaluator.rb
99
- - app/revert_to_green_command.rb
100
- - app/runner.rb
101
- - app/scaffolder.rb
102
- - app/scheduler.rb
103
- - app/session_id_generator.rb
104
- - app/session_zipper.rb
105
- - app/shell_argument_exception.rb
106
- - app/shell_process.rb
107
- - app/shell_wrapper.rb
108
- - app/start_command.rb
109
- - app/state.rb
110
- - app/state_reader.rb
111
- - app/text_converter.rb
112
- - app/text_template_machine.rb
113
- - app/upload_command.rb
114
- - app/upload_no_open_command.rb
115
- - app/uploader.rb
116
- - app/xhelp_command.rb
117
- - app/xml_element_extractor.rb
85
+ - lib/argument_parser.rb
86
+ - lib/codersdojo.rb
87
+ - lib/console_view.rb
88
+ - lib/filename_formatter.rb
89
+ - lib/info_property_file.rb
90
+ - lib/meta_config_file.rb
91
+ - lib/property_file_missing_exception.rb
92
+ - lib/return_code_evaluator.rb
93
+ - lib/runner.rb
94
+ - lib/scaffolder.rb
95
+ - lib/scheduler.rb
96
+ - lib/session_id_generator.rb
97
+ - lib/state.rb
98
+ - lib/state_reader.rb
99
+ - lib/text_converter.rb
100
+ - lib/text_template_machine.rb
101
+ - lib/uploader.rb
102
+ - lib/xml_element_extractor.rb
118
103
  - templates/any/README
119
104
  - templates/any/run-endless.%sh%
120
105
  - templates/any/run-once.%sh%
@@ -1,36 +0,0 @@
1
- require 'runner'
2
-
3
- class CaptureSingleRunCommand
4
-
5
- COMMAND_NAME = 'capture-single-run'
6
-
7
- def initialize shell, view, runner
8
- @shell = shell
9
- @view = view
10
- @runner = runner
11
- end
12
-
13
- def execute_from_shell params
14
- unless params[1] then @view.show_missing_command_argument_error COMMAND_NAME, "shell_command"; return end
15
- unless params[2] then @view.show_missing_command_argument_error COMMAND_NAME, "kata_file"; return end
16
- capture_single_run params[1], params[2]
17
- end
18
-
19
- def capture_single_run run_command, kata_file
20
- @runner.run_command = run_command
21
- session_id = @shell.newest_dir_entry(FilenameFormatter.codersdojo_workspace)
22
- filename_formatter = FilenameFormatter.new
23
- last_state_dir = @shell.newest_dir_entry(filename_formatter.session_dir session_id)
24
- step = last_state_dir.nil? ? 0 : filename_formatter.step_number_from_state_dir(last_state_dir) + 1
25
- @runner.execute_once kata_file, session_id, step
26
- end
27
-
28
- def accepts_shell_command? command
29
- command == COMMAND_NAME
30
- end
31
-
32
- def continue_test_loop?
33
- false
34
- end
35
-
36
- end
data/app/filename.rb DELETED
@@ -1,61 +0,0 @@
1
- class Filename
2
-
3
- DIR_SEPARATOR = '/'
4
- WINDOWS_DIR_SEPARATOR = '\\'
5
-
6
- attr_accessor :path_items
7
-
8
- def initialize filename
9
- filename = filename.gsub(WINDOWS_DIR_SEPARATOR, DIR_SEPARATOR)
10
- @path_items = filename.split(DIR_SEPARATOR).delete_if{|item| item.empty?}
11
- @absolute_path = filename.start_with? DIR_SEPARATOR
12
- end
13
-
14
- def absolute_path?
15
- @absolute_path
16
- end
17
-
18
- def relative_path?
19
- not absolute_path?
20
- end
21
-
22
- def without_extension
23
- if @path_items.size > 0 and @path_items.last.include? '.' then
24
- Filename.new(to_s.split('.')[0..-2].join('.'))
25
- else
26
- clone
27
- end
28
- end
29
-
30
- def extract_last_path_item
31
- Filename.new(nil_to_empty_string @path_items.last)
32
- end
33
-
34
- def remove_last_path_item
35
- Filename.new(make_string(@path_items[0..-2]))
36
- end
37
-
38
- def to_unix_s
39
- make_string @path_items
40
- end
41
-
42
- def to_windows_s
43
- make_string @path_items, WINDOWS_DIR_SEPARATOR
44
- end
45
-
46
- def to_s
47
- to_unix_s
48
- end
49
-
50
- private
51
-
52
- def make_string the_path_items, seperator=DIR_SEPARATOR
53
- prefix = absolute_path? ? seperator : ''
54
- prefix + the_path_items.join(seperator)
55
- end
56
-
57
- def nil_to_empty_string object
58
- object.nil? ? "" : object
59
- end
60
-
61
- end
@@ -1,34 +0,0 @@
1
- class GenerateCommand
2
-
3
- def initialize shell, view, scaffolder
4
- @shell = shell
5
- @view = view
6
- @scaffolder = scaffolder
7
- end
8
-
9
- def execute_from_shell params
10
- generate params[1], params[2]
11
- end
12
-
13
- def generate framework, kata_file
14
- if not kata_file then
15
- @view.show_missing_command_argument_error "setup", "kata_file"
16
- return
17
- end
18
- begin
19
- @scaffolder.scaffold framework, kata_file
20
- @view.show "\n" + @shell.read_file("README")
21
- rescue
22
- @view.show_unknown_framework_error framework, @scaffolder.list_templates
23
- end
24
- end
25
-
26
- def accepts_shell_command? command
27
- command == 'setup'
28
- end
29
-
30
- def continue_test_loop?
31
- false
32
- end
33
-
34
- end
data/app/help_command.rb DELETED
@@ -1,27 +0,0 @@
1
- class HelpCommand
2
-
3
- def initialize view
4
- @view = view
5
- end
6
-
7
- def execute_from_shell params
8
- help params[1]
9
- end
10
-
11
- def help command=nil
12
- if command then
13
- @view.show_detailed_help command.downcase
14
- else
15
- @view.show_help
16
- end
17
- end
18
-
19
- def accepts_shell_command? command
20
- ['help', '-h', '--help'].member? command
21
- end
22
-
23
- def continue_test_loop?
24
- false
25
- end
26
-
27
- end
@@ -1,27 +0,0 @@
1
- require 'runner'
2
-
3
- class InitSessionCommand
4
-
5
- def initialize view, runner
6
- @view = view
7
- @runner = runner
8
- end
9
-
10
- def execute_from_shell params
11
- init_session
12
- end
13
-
14
- def init_session
15
- session_dir = @runner.init_session
16
- @view.show_init_session_result session_dir
17
- end
18
-
19
- def accepts_shell_command? command
20
- command == 'init-session'
21
- end
22
-
23
- def continue_test_loop?
24
- false
25
- end
26
-
27
- end
data/app/progress.rb DELETED
@@ -1,19 +0,0 @@
1
- class Progress
2
-
3
- def self.write_empty_progress states
4
- STDOUT.print "#{states} states to upload"
5
- STDOUT.print "["+" "*states+"]"
6
- STDOUT.print "\b"*(states+1)
7
- STDOUT.flush
8
- end
9
-
10
- def self.next
11
- STDOUT.print "."
12
- STDOUT.flush
13
- end
14
-
15
- def self.end
16
- STDOUT.puts
17
- end
18
- end
19
-
@@ -1,52 +0,0 @@
1
-
2
- class RevertToGreenCommand
3
-
4
- def initialize shell, view, meta_config_file, state_reader
5
- @shell = shell
6
- @view = view
7
- @meta_config_file = meta_config_file
8
- @state_reader = state_reader
9
- end
10
-
11
- def execute_from_shell params
12
- revert_to_green
13
- end
14
-
15
- def execute
16
- revert_to_green
17
- end
18
-
19
- def revert_to_green
20
- formatter = FilenameFormatter.new
21
- @state_reader.session_dir = formatter.session_dir @shell.newest_dir_entry(FilenameFormatter.codersdojo_workspace)
22
- @state_reader.goto_last_state
23
- state = @state_reader.read_previous_state if @state_reader.state_exist?
24
- while @state_reader.state_exist? and state.red?
25
- state = @state_reader.read_previous_state
26
- end
27
- if @state_reader.state_exist? and state.green?
28
- @view.show_revert_to_step @state_reader.next_step+1
29
- @shell.rm_r @meta_config_file.source_files
30
- state.files.each do |file|
31
- dest_file = Filename.new(file).extract_last_path_item.to_s
32
- @shell.write_file dest_file, @shell.read_file(file)
33
- end
34
- else
35
- @view.show_no_green_state_to_revert_to
36
- @state_reader.goto_last_state
37
- end
38
- end
39
-
40
- def command_key
41
- 'g'
42
- end
43
-
44
- def accepts_shell_command? command
45
- command == 'revert-to-green'
46
- end
47
-
48
- def continue_test_loop?
49
- true
50
- end
51
-
52
- end
@@ -1,19 +0,0 @@
1
- require 'zip/zip'
2
- require 'zip/zipfilesystem'
3
-
4
- class SessionZipper
5
-
6
- def compress(path)
7
- path.sub!(%r[/$],'')
8
- archive = File.join(path,File.basename(path))+'.zip'
9
- FileUtils.rm archive, :force=>true
10
-
11
- Zip::ZipFile.open(archive, 'w') do |zipfile|
12
- Dir["#{path}/**/**"].reject{|f|f==archive}.each do |file|
13
- zipfile.add(file.sub(path+'/',''),file)
14
- end
15
- end
16
- archive
17
- end
18
-
19
- end
@@ -1,9 +0,0 @@
1
- class ShellArgumentException < Exception
2
-
3
- attr_accessor :command
4
-
5
- def initialize command
6
- @command = command
7
- end
8
-
9
- end
data/app/shell_process.rb DELETED
@@ -1,5 +0,0 @@
1
- class ShellProcess
2
-
3
- attr_accessor :output, :return_code
4
-
5
- end
data/app/shell_wrapper.rb DELETED
@@ -1,161 +0,0 @@
1
- require 'tempfile'
2
- require 'shell_process'
3
- require 'yaml'
4
-
5
- class ShellWrapper
6
-
7
- MAX_STDOUT_LENGTH = 100000
8
-
9
- def cp source, destination
10
- FileUtils.cp source, destination
11
- end
12
-
13
- def cp_r source, destination
14
- FileUtils.cp_r source, destination
15
- end
16
-
17
- def rm_r file_regex
18
- files_in_dir_tree('.', file_regex).each do |file|
19
- FileUtils.rm file
20
- end
21
- end
22
-
23
- def mkdir dir
24
- FileUtils.mkdir dir
25
- end
26
-
27
- def mkdir_p dirs
28
- FileUtils.mkdir_p dirs
29
- end
30
-
31
- def rename old_filename, new_filename
32
- File.rename old_filename, new_filename
33
- end
34
-
35
- def current_file
36
- __FILE__
37
- end
38
-
39
- def execute command
40
- process = ShellProcess.new
41
- redirect_stderr_to_stdout = "2>&1"
42
- spec_pipe = IO.popen("#{command} #{redirect_stderr_to_stdout}", "r")
43
- process.output = spec_pipe.read MAX_STDOUT_LENGTH
44
- spec_pipe.close
45
- process.return_code = $?.exitstatus
46
- puts process.output unless process.output.nil?
47
- process
48
- end
49
-
50
- def write_file filename, content
51
- file = File.new filename, "w"
52
- file << content
53
- file.close
54
- end
55
-
56
- def read_file filename
57
- file = File.new filename
58
- content = file.read
59
- file.close
60
- content
61
- end
62
-
63
- def creation_time filename
64
- File.ctime(filename)
65
- end
66
-
67
- def modification_time filename
68
- File.mtime(filename)
69
- end
70
-
71
- def real_dir_entries dir
72
- Dir.new(dir).entries - ["..", "."]
73
- end
74
-
75
- def files_in_dir dir, regexp_pattern=nil
76
- Dir.new(dir).entries.find_all{|entry|
77
- file_matches_regexp? entry, regexp_pattern
78
- }
79
- end
80
-
81
- def files_in_dir_tree dir, regexp_pattern=nil
82
- Dir.glob("#{dir}/**/*").find_all{|entry|
83
- file_matches_regexp? entry, regexp_pattern
84
- }.sort
85
- end
86
-
87
- def file_matches_regexp? dir_entry, regexp_pattern
88
- File.file?(dir_entry) and (not regexp_pattern or dir_entry =~ Regexp.new(regexp_pattern))
89
- end
90
-
91
-
92
- def newest_dir_entry dir, files=nil
93
- unless files then files = real_dir_entries(dir) end
94
- files.sort_by do |entry|
95
- complete_path = File.join dir, entry
96
- File.mtime(complete_path)
97
- end.last
98
- end
99
-
100
- def file? filename
101
- File.file? filename
102
- end
103
-
104
- def open_with_default_app filename
105
- execute "#{open_command_name} #{filename}"
106
- end
107
-
108
- def read_properties filename
109
- begin
110
- YAML.load_file filename
111
- rescue
112
- raise PropertyFileMissingException.new filename
113
- end
114
- end
115
-
116
- def remove_command_name
117
- windows? ? 'del' : 'rm'
118
- end
119
-
120
- def open_command_name
121
- if windows? then
122
- 'start'
123
- elsif mac? then
124
- 'open'
125
- else
126
- 'xdg-open'
127
- end
128
- end
129
-
130
- def expand_run_command command
131
- if command.end_with?(".sh") then
132
- "bash #{command}"
133
- else
134
- command
135
- end
136
- end
137
-
138
- def shell_extension
139
- windows? ? 'cmd' : 'sh'
140
- end
141
-
142
- def path_separator
143
- windows? ? ';' : ':'
144
- end
145
-
146
- def dir_separator
147
- File::ALT_SEPARATOR ? File::ALT_SEPARATOR : File::SEPARATOR
148
- end
149
-
150
- def windows?
151
- platform = RUBY_PLATFORM.downcase
152
- platform.include?("windows") or platform.include?("mingw32")
153
- end
154
-
155
- def mac?
156
- platform = RUBY_PLATFORM.downcase
157
- platform.include?("universal-darwin")
158
- end
159
-
160
- end
161
-
data/app/start_command.rb DELETED
@@ -1,35 +0,0 @@
1
- require 'meta_config_file'
2
- require 'scheduler'
3
-
4
- class StartCommand
5
-
6
- def initialize meta_config_file, runner, view, eval_loop_commands
7
- @runner = runner
8
- @view = view
9
- @meta_file = meta_config_file
10
- @eval_loop_commands = eval_loop_commands
11
- end
12
-
13
- def execute_from_shell params
14
- start params[1], params[2]
15
- end
16
-
17
- def start command, file
18
- unless command then @view.show_missing_command_argument_error "start", "shell_command"; return end
19
- if file then @view.show_deprecated_command_argument_warning "start", "kata_file" end # since 30-may-2011, remove argument in later version
20
- @view.show_start_kata command, file, @meta_file.framework_property
21
- @runner.source_files = @meta_file.source_files
22
- @runner.run_command = command
23
- scheduler = Scheduler.new @runner, @view, @eval_loop_commands
24
- scheduler.start
25
- end
26
-
27
- def accepts_shell_command? command
28
- command == 'start'
29
- end
30
-
31
- def continue_test_loop?
32
- true
33
- end
34
-
35
- end
@@ -1,53 +0,0 @@
1
- require 'meta_config_file'
2
- require 'uploader'
3
-
4
- class UploadCommand
5
-
6
- attr_accessor :uploader
7
-
8
- def initialize shell, view, hostname
9
- @shell = shell
10
- @view = view
11
- @hostname = hostname
12
- @uploader = Uploader.new(hostname, '', '')
13
- @meta_file = MetaConfigFile.new @shell
14
- end
15
-
16
- def execute
17
- upload nil
18
- end
19
-
20
- def execute_from_shell params
21
- upload params[1]
22
- end
23
-
24
- def upload session_directory, open_browser=true
25
- formatter = FilenameFormatter.new
26
- framework = @meta_file.framework_property
27
- if not session_directory then
28
- session_directory = formatter.session_dir @shell.newest_dir_entry(FilenameFormatter.codersdojo_workspace)
29
- end
30
- @view.show_upload_start session_directory, @hostname, framework
31
- @uploader.framework = framework
32
- @uploader.session_dir = session_directory
33
- upload_result = @uploader.upload
34
- @view.show_upload_result upload_result
35
- url = upload_result.split.last
36
- if open_browser then
37
- @shell.open_with_default_app url
38
- end
39
- end
40
-
41
- def command_key
42
- 'u'
43
- end
44
-
45
- def accepts_shell_command? command
46
- command == 'upload'
47
- end
48
-
49
- def continue_test_loop?
50
- false
51
- end
52
-
53
- end
@@ -1,23 +0,0 @@
1
- class UploadNoOpenCommand
2
-
3
- def initialize upload_command
4
- @upload_command = upload_command
5
- end
6
-
7
- def execute_from_shell params
8
- upload params[1]
9
- end
10
-
11
- def upload session_directory
12
- @upload_command.upload session_directory, false
13
- end
14
-
15
- def accepts_shell_command? command
16
- command == 'upload-no-open'
17
- end
18
-
19
- def continue_test_loop?
20
- false
21
- end
22
-
23
- end
data/app/xhelp_command.rb DELETED
@@ -1,23 +0,0 @@
1
- class XHelpCommand
2
-
3
- def initialize view
4
- @view = view
5
- end
6
-
7
- def execute_from_shell params
8
- help params[1]
9
- end
10
-
11
- def help command=nil
12
- if command then
13
- @view.show_detailed_help command.downcase
14
- else
15
- @view.show_extended_help
16
- end
17
- end
18
-
19
- def accepts_shell_command? command
20
- command == 'xhelp'
21
- end
22
-
23
- end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes