tconsole 0.0.2.pre → 0.0.3.pre

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/tconsole.rb CHANGED
@@ -1,110 +1,100 @@
1
1
  require "tconsole/version"
2
+ require "tconsole/server"
2
3
 
3
- require 'readline'
4
- require 'benchmark'
4
+ require "readline"
5
+ require "benchmark"
6
+ require "drb/drb"
5
7
 
6
8
  module TConsole
7
9
  class Runner
10
+
11
+ SERVER_URI = "druby://localhost:8788"
8
12
  # Spawns a new environment. Looks at the results of the environment to determine whether to stop or
9
13
  # keep running
10
14
  def self.run
11
-
12
15
  stty_save = `stty -g`.chomp
13
16
 
14
- # We're only going to handle interrupts on the inner process
15
- trap("SIGINT", "IGNORE");
16
17
  running = true
18
+ trap("SIGINT", "SYSTEM_DEFAULT")
19
+
20
+ # A little welcome
21
+ puts
22
+ puts "Welcome to tconsole. Type 'help' for help or 'exit' to quit."
17
23
 
24
+ # Start the server
18
25
  while running
26
+ # ignore ctrl-c during load, since things can get kind of messy if we don't
27
+
19
28
  pid = fork do
20
- exit run_environment ? 0 : 1
21
- end
29
+ begin
30
+ server = Server.new
22
31
 
23
- pid, status = Process.wait2(pid)
24
- running = false if status.exitstatus != 0
25
- end
32
+ DRb.start_service(SERVER_URI, server)
26
33
 
27
- puts
28
- puts "Exiting. Bye!"
29
- system("stty", stty_save);
30
- end
31
-
32
- # Starts our Rails environment and listens for console commands
33
- # Returns true if we should keep running or false if we need to exit
34
- def self.run_environment
34
+ DRb.thread.join
35
+ rescue Interrupt
36
+ # do nothing here since the outer process will shut things down for us
37
+ end
38
+ end
35
39
 
36
- trap("SIGINT", "SYSTEM_DEFAULT");
40
+ # Set up our client connection to the server
41
+ server = DRbObject.new_with_uri(SERVER_URI)
42
+
43
+ loaded = false
44
+ wait_until = Time.now + 10
45
+ until loaded || Time.now > wait_until
46
+ begin
47
+ running = server.load_environment
48
+ loaded = true
49
+ rescue
50
+ loaded = false
51
+ rescue Interrupt
52
+ # do nothing if we get an interrupt
53
+ puts "Interrupted in client"
54
+ end
55
+ end
37
56
 
38
- puts
39
- puts "Loading Rails environment..."
40
- time = Benchmark.realtime do
41
- begin
42
- # Ruby environment loading is shamelessly borrowed from spork
43
- ENV["RAILS_ENV"] ||= "test"
44
- $:.unshift("./test")
45
-
46
- require 'rake'
47
- Rake.application.init
48
- Rake.application.load_rakefile
49
- Rake.application.invoke_task("test:prepare")
50
- rescue Exception => e
51
- puts "Error: Loading your environment failed."
52
- puts " #{e.message}"
53
- return false
57
+ if !loaded
58
+ puts
59
+ puts "Couldn't connect to test environment. Exiting."
60
+ exit(1)
54
61
  end
62
+
63
+ running = command_loop(server) if running
64
+
65
+ server.stop
66
+ Process.wait2(pid)
55
67
  end
56
68
 
57
- puts "Environment loaded in #{time}s."
58
69
  puts
70
+ puts "Exiting. Bye!"
71
+ system("stty", stty_save);
72
+ end
59
73
 
60
- while line = Readline.readline('> ', true)
61
- if line == "exit"
74
+ def self.command_loop(server)
75
+ while line = Readline.readline("tconsole> ", true)
76
+ if line == ""
77
+ # do nothing
78
+ elsif line == "exit"
62
79
  return false
63
80
  elsif line == "reload"
64
81
  return true
65
82
  elsif line == "help"
66
83
  help
67
84
  elsif line == "units"
68
- run_tests(["test/unit/**/*_test.rb"])
85
+ server.run_tests(["test/unit/**/*_test.rb"])
69
86
  elsif line == "functionals"
70
- run_tests(["test/functional/**/*_test.rb"])
87
+ server.run_tests(["test/functional/**/*_test.rb"])
71
88
  elsif line == "integration"
72
- run_tests(["test/integration/**/*_test.rb"])
89
+ server.run_tests(["test/integration/**/*_test.rb"])
73
90
  elsif line == "all"
74
- run_tests(["test/unit/**/*_test.rb", "test/functional/**/*_test.rb", "test/integration/**/*_test.rb"])
91
+ server.run_tests(["test/unit/**/*_test.rb", "test/functional/**/*_test.rb", "test/integration/**/*_test.rb"])
75
92
  else
76
- run_tests([line])
77
- end
78
- end
79
-
80
- return false
81
- end
82
-
83
- # Taks an array of globs and loads all of the files in the globs
84
- # and then runs the tests in those files
85
- def self.run_tests(globs)
86
- time = Benchmark.realtime do
87
- pid = fork do
88
-
89
- puts "Running tests..."
90
- puts
91
-
92
- paths = []
93
- globs.each do |glob|
94
- paths.concat(Dir.glob(glob))
95
- end
96
-
97
- paths.each do |path|
98
- require File.realpath(path)
99
- end
93
+ server.run_tests([line])
100
94
  end
101
-
102
- Process.wait2(pid)
103
95
  end
104
96
 
105
- puts
106
- puts "Test time (including load): #{time}s"
107
- puts
97
+ return true
108
98
  end
109
99
 
110
100
  # Prints a list of available commands
@@ -0,0 +1,62 @@
1
+ module TConsole
2
+ class Server
3
+ def stop
4
+ DRb.stop_service
5
+ end
6
+
7
+ def load_environment
8
+ puts
9
+ puts "Loading Rails environment..."
10
+ time = Benchmark.realtime do
11
+ begin
12
+ # Ruby environment loading is shamelessly borrowed from spork
13
+ ENV["RAILS_ENV"] ||= "test"
14
+ $:.unshift("./test")
15
+
16
+ require 'rake'
17
+ Rake.application.init
18
+ Rake.application.load_rakefile
19
+ Rake.application.invoke_task("test:prepare")
20
+ rescue Exception => e
21
+ puts "Error: Loading your environment failed."
22
+ puts " #{e.message}"
23
+ return false
24
+ end
25
+ end
26
+
27
+ puts "Environment loaded in #{time}s."
28
+ puts
29
+
30
+ return true
31
+ end
32
+
33
+ def run_tests(globs)
34
+ time = Benchmark.realtime do
35
+ pid = fork do
36
+
37
+ puts "Running tests..."
38
+ puts
39
+
40
+ paths = []
41
+ globs.each do |glob|
42
+ paths.concat(Dir.glob(glob))
43
+ end
44
+
45
+ paths.each do |path|
46
+ require File.realpath(path)
47
+ end
48
+
49
+ if defined? ActiveRecord
50
+ ActiveRecord::Base.connection.reconnect!
51
+ end
52
+ end
53
+
54
+ Process.wait2(pid)
55
+ end
56
+
57
+ puts
58
+ puts "Test time (including load): #{time}s"
59
+ puts
60
+ end
61
+ end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module TConsole
2
- VERSION = "0.0.2.pre"
2
+ VERSION = "0.0.3.pre"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tconsole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.pre
4
+ version: 0.0.3.pre
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-11 00:00:00.000000000 Z
12
+ date: 2011-12-13 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: tconsole gives you a helpful console for running Rails tests
15
15
  email:
@@ -25,6 +25,7 @@ files:
25
25
  - Rakefile
26
26
  - bin/tconsole
27
27
  - lib/tconsole.rb
28
+ - lib/tconsole/server.rb
28
29
  - lib/tconsole/version.rb
29
30
  - tconsole.gemspec
30
31
  homepage: ''