tconsole 0.0.2.pre → 0.0.3.pre

Sign up to get free protection for your applications and to get access to all the features.
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: ''