codersdojo 1.1.05 → 1.1.06

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/app/codersdojo.rb CHANGED
@@ -7,19 +7,17 @@ require 'scaffolder'
7
7
 
8
8
  class CodersDojo
9
9
 
10
- def initialize params
10
+ def initialize params, hostname = "http://www.codersdojo.com"
11
11
  @params = params
12
+ @hostname = hostname
12
13
  end
13
14
 
14
15
  def run
15
16
  if called_from_spec? then return end
16
- hostname = "http://www.codersdojo.com"
17
- # hostname = "http://localhost:3000"
18
-
19
17
  shell = ShellWrapper.new
20
18
  scaffolder = Scaffolder.new shell
21
19
  view = ConsoleView.new scaffolder
22
- controller = Controller.new shell, view, scaffolder, hostname
20
+ controller = Controller.new shell, view, scaffolder, @hostname
23
21
 
24
22
  begin
25
23
  arg_parser = ArgumentParser.new controller
@@ -34,6 +32,3 @@ class CodersDojo
34
32
  end
35
33
 
36
34
  end
37
-
38
- # entry from shell
39
- CodersDojo.new(ARGV).run
data/app/console_view.rb CHANGED
@@ -19,10 +19,10 @@ helptext
19
19
  puts <<-helptext
20
20
  Usage: #{$0} command [options]
21
21
  Commands:
22
- help, -h, --help Print this help text.
23
- help <command> See the details of the command.
24
- setup <framework> <kata_file> Setup the environment for running the kata.
25
- upload <framework> <session_dir> Upload the kata to http://www.codersdojo.org
22
+ help, -h, --help Print this help text.
23
+ help <command> See the details of the command.
24
+ setup <framework> <kata_file> Setup the environment for running the kata.
25
+ upload <framework> [<session_dir>] Upload the kata to http://www.codersdojo.org
26
26
 
27
27
  Report bugs to <codersdojo@it-agile.de>
28
28
  helptext
@@ -69,10 +69,11 @@ helptext
69
69
  templates = @scaffolder.list_templates
70
70
  puts <<-helptext
71
71
 
72
- upload <framework> <session_directory> Upload the kata written with <framework> in <session_directory> to codersdojo.com.
73
- <session_directory> is relative to the working directory.
74
- By now <framework> is one of #{templates}.
75
- If you used another framework, use ??? and send an email to codersdojo@it-agile.de
72
+ upload <framework> [<session_directory>] Upload the kata written with <framework> in <session_directory> to codersdojo.com.
73
+ <session_directory> is relative to the working directory.
74
+ If you don't specify a <session_directory> the newest session in .codersdojo is uploaded.
75
+ By now <framework> is one of #{templates}.
76
+ If you used another framework, use ??? and send an email to codersdojo@it-agile.de
76
77
 
77
78
  Example:
78
79
  :/dojo/my_kata$ #{$0} upload ruby.test-unit .codersdojo/2010-11-02_16-21-53
@@ -87,7 +88,7 @@ helptext
87
88
  end
88
89
 
89
90
  def show_start_kata command, file
90
- puts "Starting PersonalCodersDojo with command #{command} and kata file #{file}. Use Ctrl+C to finish the kata."
91
+ puts "Starting CodersDojo-Client with command #{command} and kata file #{file}. Use Ctrl+C to finish the kata."
91
92
  end
92
93
 
93
94
  def show_missing_command_argument_error command
@@ -95,8 +96,8 @@ helptext
95
96
  show_usage
96
97
  end
97
98
 
98
- def show_upload_start hostname
99
- puts "Start upload to #{hostname}"
99
+ def show_upload_start session_directory, hostname
100
+ puts "Start upload from #{session_directory} to #{hostname}"
100
101
  end
101
102
 
102
103
  def show_upload_result result
data/app/controller.rb CHANGED
@@ -42,13 +42,13 @@ class Controller
42
42
  end
43
43
 
44
44
  def upload framework, session_directory
45
- @view.show_upload_start @hostname
46
- if session_directory then
47
- uploader = Uploader.new @hostname, framework, session_directory
48
- @view.show_upload_result uploader.upload
49
- else
50
- @view.show_missing_command_argument_error "upload"
45
+ formatter = FilenameFormatter.new
46
+ if not session_directory then
47
+ session_directory = formatter.session_dir @shell.newest_dir_entry(FilenameFormatter.codersdojo_workspace)
51
48
  end
49
+ @view.show_upload_start session_directory, @hostname
50
+ uploader = Uploader.new @hostname, framework, session_directory
51
+ @view.show_upload_result uploader.upload
52
52
  end
53
53
 
54
54
  end
@@ -8,6 +8,10 @@ class FilenameFormatter
8
8
  STATE_DIR_PREFIX
9
9
  end
10
10
 
11
+ def self.codersdojo_workspace
12
+ CODERSDOJO_WORKSPACE
13
+ end
14
+
11
15
  def source_code_file state_dir
12
16
  Dir.entries(state_dir).each { |file|
13
17
  return state_file state_dir, file unless file =='..' || file == '.' || file == RESULT_FILE }
data/app/shell_wrapper.rb CHANGED
@@ -60,6 +60,13 @@ class ShellWrapper
60
60
  def real_dir_entries dir
61
61
  Dir.new(dir).entries - ["..", "."]
62
62
  end
63
+
64
+ def newest_dir_entry dir
65
+ Dir.new(dir).sort_by do |entry|
66
+ complete_path = File.join dir, entry
67
+ File.mtime(complete_path)
68
+ end.last
69
+ end
63
70
 
64
71
  def file? filename
65
72
  File.file? filename
data/app/state.rb ADDED
@@ -0,0 +1,11 @@
1
+ class State
2
+
3
+ attr_accessor :time, :code, :result
4
+
5
+ def initialize time=nil, code=nil, result=nil
6
+ @time = time
7
+ @code = code
8
+ @result = result
9
+ end
10
+
11
+ end
data/app/state_reader.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'filename_formatter'
2
+ require 'state'
2
3
 
3
4
  class StateReader
4
5
 
@@ -7,9 +8,13 @@ class StateReader
7
8
  def initialize shell
8
9
  @filename_formatter = FilenameFormatter.new
9
10
  @shell = shell
10
- @next_step = 0
11
+ reset
11
12
  end
12
13
 
14
+ def reset
15
+ @next_step = 0
16
+ end
17
+
13
18
  def session_dir= session_dir
14
19
  @session_dir = session_dir
15
20
  @session_id = @filename_formatter.extract_last_path_item @session_dir
@@ -48,15 +53,3 @@ class StateReader
48
53
 
49
54
  end
50
55
 
51
- class State
52
-
53
- attr_accessor :time, :code, :result
54
-
55
- def initialize time=nil, code=nil, result=nil
56
- @time = time
57
- @code = code
58
- @result = result
59
- end
60
-
61
- end
62
-
data/app/uploader.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'state'
1
2
  require 'state_reader'
2
3
  require 'progress'
3
4
  require 'filename_formatter'
@@ -6,42 +7,42 @@ require 'rest_client'
6
7
 
7
8
  class Uploader
8
9
 
10
+ attr_reader :states
11
+
9
12
  def initialize hostname, framework, session_dir, state_reader = StateReader.new(ShellWrapper.new)
13
+ @states = []
10
14
  @hostname = hostname
11
15
  @framework = framework
12
16
  @state_reader = state_reader
13
17
  @state_reader.session_dir = session_dir
14
18
  end
15
19
 
16
- def upload_kata
17
- RestClient.post "#{@hostname}#{@@kata_path}", {:framework => @framework}
18
- end
19
-
20
- def upload_state kata_id
21
- state = @state_reader.read_next_state
22
- RestClient.post "#{@hostname}#{@@kata_path}/#{kata_id}#{@@state_path}", {:code => state.code, :result => state.result, :created_at => state.time}
23
- Progress.next
24
- end
25
-
26
- def upload_states kata_id
27
- Progress.write_empty_progress @state_reader.state_count
28
- while @state_reader.has_next_state
29
- upload_state kata_id
30
- end
31
- Progress.end
20
+ def upload
21
+ return upload_kata_and_states if @state_reader.enough_states?
22
+ return "You need at least two states"
32
23
  end
33
24
 
34
25
  def upload_kata_and_states
26
+ read_states
35
27
  kata = upload_kata
36
- upload_states(XMLElementExtractor.extract('kata/id', kata))
37
28
  finish_url = "#{@hostname}#{@@description_path}/#{XMLElementExtractor.extract('kata/uuid', kata)}"
38
29
  summary_url = XMLElementExtractor.extract('kata/short-url', kata)
39
30
  "Complete kata information at #{finish_url}"
40
31
  end
41
32
 
42
- def upload
43
- return upload_kata_and_states if @state_reader.enough_states?
44
- return "You need at least two states"
33
+ def read_states
34
+ @state_reader.reset
35
+ while @state_reader.has_next_state
36
+ @states << @state_reader.read_next_state
37
+ end
38
+ end
39
+
40
+ def upload_kata
41
+ kata_data = {:framework => @framework}
42
+ states_data = states.each_with_index do |state,index|
43
+ kata_data["states[#{index}]"] = {:code => state.code, :result => state.result, :created_at => state.time}
44
+ end
45
+ RestClient.post "#{@hostname}#{@@kata_path}", kata_data
45
46
  end
46
47
 
47
48
  private
data/bin/codersdojo CHANGED
@@ -2,3 +2,4 @@
2
2
  codersdojo_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'app'))
3
3
  $LOAD_PATH.unshift(codersdojo_dir) unless $LOAD_PATH.include?(codersdojo_dir)
4
4
  require 'codersdojo'
5
+ CodersDojo.new(ARGV).run
@@ -0,0 +1,9 @@
1
+ # Adapt the code to your code kata %kata_file%.
2
+ # Important: Test and production code has to be
3
+ # completely in this file.
4
+
5
+ def foo(num):
6
+ return 'fixme'
7
+
8
+ def test_to_roman():
9
+ assert foo == 'foo'
@@ -0,0 +1,8 @@
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
+
5
+ Run run-endless.%sh% and start your kata.
6
+
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
+ py.test %kata_file%.py
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: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 5
10
- version: 1.1.05
9
+ - 6
10
+ version: 1.1.06
11
11
  platform: ruby
12
12
  authors:
13
13
  - CodersDojo-Team
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-28 00:00:00 +01:00
18
+ date: 2011-02-01 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -55,6 +55,7 @@ files:
55
55
  - app/session_id_generator.rb
56
56
  - app/shell_argument_exception.rb
57
57
  - app/shell_wrapper.rb
58
+ - app/state.rb
58
59
  - app/state_reader.rb
59
60
  - app/text_converter.rb
60
61
  - app/text_template_machine.rb
@@ -86,6 +87,10 @@ files:
86
87
  - templates/javascript.vows/README
87
88
  - templates/javascript.vows/run-endless.%sh%
88
89
  - templates/javascript.vows/spec.js
90
+ - templates/python.pytest/%kata_file%.py
91
+ - templates/python.pytest/README
92
+ - templates/python.pytest/run-endless.%sh%
93
+ - templates/python.pytest/run-once.%sh%
89
94
  - templates/python.pyunit/%kata_file%.py
90
95
  - templates/python.pyunit/README
91
96
  - templates/python.pyunit/run-endless.%sh%