commands 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -0
- data/commands-0.1.0.gem +0 -0
- data/commands.gemspec +1 -1
- data/lib/commands.rb +2 -2
- data/lib/rails/commands/commander.rb +21 -0
- data/lib/rails/commands/console_delegation.rb +13 -0
- data/lib/rails/commands/environment.rb +16 -0
- data/lib/rails/commands/generator.rb +42 -0
- data/lib/rails/commands/raker.rb +62 -0
- data/lib/rails/commands/test_environment.rb +59 -0
- data/lib/rails/commands/tester.rb +49 -0
- metadata +9 -6
- data/lib/commands/commander.rb +0 -32
- data/lib/commands/console_delegation.rb +0 -11
- data/lib/commands/generator.rb +0 -40
- data/lib/commands/raker.rb +0 -36
- data/lib/commands/tester.rb +0 -81
data/README.md
CHANGED
@@ -23,3 +23,5 @@ When your console boots, it'll automatically have a `commander` object instantia
|
|
23
23
|
> generate "scaffold post title:string"
|
24
24
|
> rake "db:migrate"
|
25
25
|
> test "models/person"
|
26
|
+
|
27
|
+
You can see the options available for all the commands by running them with no parameters.
|
data/commands-0.1.0.gem
ADDED
Binary file
|
data/commands.gemspec
CHANGED
data/lib/commands.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rails/commands/raker'
|
2
|
+
require 'rails/commands/tester'
|
3
|
+
require 'rails/commands/generator'
|
4
|
+
|
5
|
+
module Rails
|
6
|
+
module Commands
|
7
|
+
class Commander
|
8
|
+
delegate :rake, to: :raker
|
9
|
+
delegate :test, to: :tester
|
10
|
+
delegate :generate, :destroy, :update, to: :generator
|
11
|
+
|
12
|
+
attr_reader :raker, :tester, :generator
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@raker = Raker.new
|
16
|
+
@tester = Tester.new
|
17
|
+
@generator = Generator.new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Commands
|
5
|
+
class Generator
|
6
|
+
def initialize
|
7
|
+
load_rails_generators
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate(argv = nil)
|
11
|
+
generator :generate, argv
|
12
|
+
end
|
13
|
+
|
14
|
+
def update(argv = nil)
|
15
|
+
generator :update, argv
|
16
|
+
end
|
17
|
+
|
18
|
+
def destroy(argv = nil)
|
19
|
+
generator :destroy, argv
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
private
|
24
|
+
def load_rails_generators
|
25
|
+
Rails.application.load_generators
|
26
|
+
end
|
27
|
+
|
28
|
+
def generator(name, argv = nil)
|
29
|
+
if argv.nil?
|
30
|
+
# FIXME: I don't know why we can't just catch SystemExit here, then we wouldn't need this if block
|
31
|
+
Rails::Generators.help name
|
32
|
+
else
|
33
|
+
ARGV.replace argv.nil? ? [nil] : argv.split(" ")
|
34
|
+
load "rails/commands/#{name}.rb"
|
35
|
+
ARGV.replace [nil]
|
36
|
+
end
|
37
|
+
|
38
|
+
"Completed"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Commands
|
5
|
+
class Raker
|
6
|
+
include Rake::DSL
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
load_rake_tasks
|
10
|
+
end
|
11
|
+
|
12
|
+
def rake(task = nil)
|
13
|
+
task.nil? ? print_rake_tasks : invoke_rake_task(task)
|
14
|
+
"Completed"
|
15
|
+
rescue SystemExit, RuntimeError => e
|
16
|
+
"Failed: #{e.message}"
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
private
|
21
|
+
def load_rake_tasks
|
22
|
+
Rake::TaskManager.record_task_metadata = true # needed to capture comments from define_task
|
23
|
+
load Rails.root.join('Rakefile')
|
24
|
+
end
|
25
|
+
|
26
|
+
def print_rake_tasks
|
27
|
+
Rake.application.options.show_tasks = :tasks
|
28
|
+
Rake.application.options.show_task_pattern = Regexp.new('')
|
29
|
+
Rake.application.display_tasks_and_comments
|
30
|
+
end
|
31
|
+
|
32
|
+
def invoke_rake_task(task)
|
33
|
+
task, *options = task.split(" ")
|
34
|
+
|
35
|
+
ARGV.replace options
|
36
|
+
|
37
|
+
# FIXME: Before we can use this, we need a way to reset the options again
|
38
|
+
# Rake.application.handle_options
|
39
|
+
|
40
|
+
expose_argv_arguments_via_env { Rake::Task[task].invoke }
|
41
|
+
Rake.application.tasks.each(&:reenable) # Rake by default only allows tasks to be run once per session
|
42
|
+
ensure
|
43
|
+
ARGV.replace([])
|
44
|
+
end
|
45
|
+
|
46
|
+
def expose_argv_arguments_via_env
|
47
|
+
argv_arguments.each { |key, value| ENV[key] = value }
|
48
|
+
yield
|
49
|
+
ensure
|
50
|
+
argv_arguments.keys.each { |key| ENV.delete(key) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def argv_arguments
|
54
|
+
ARGV.each_with_object({}) do |arg, arguments|
|
55
|
+
if arg =~ /^(\w+)=(.*)$/
|
56
|
+
arguments[$1] = $2
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'rails/commands/environment'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Commands
|
5
|
+
module TestEnvironment
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def fork
|
9
|
+
Environment.fork do
|
10
|
+
switch_to_test
|
11
|
+
yield
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
private
|
17
|
+
def switch_to_test
|
18
|
+
switch_rails
|
19
|
+
switch_bundler
|
20
|
+
|
21
|
+
reset_active_record
|
22
|
+
reload_classes
|
23
|
+
|
24
|
+
add_test_dir_to_load_path
|
25
|
+
end
|
26
|
+
|
27
|
+
def switch_rails
|
28
|
+
ENV['RAILS_ENV'] = Rails.env = "test"
|
29
|
+
|
30
|
+
Kernel.silence_warnings do
|
31
|
+
Dir[Rails.root.join('config', 'initializers', '*.rb')].map { |file| load file }
|
32
|
+
load Rails.root.join('config', 'environments', "test.rb")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def switch_bundler
|
37
|
+
Bundler.require "test"
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
def reload_classes
|
42
|
+
ActionDispatch::Reloader.cleanup!
|
43
|
+
ActionDispatch::Reloader.prepare!
|
44
|
+
end
|
45
|
+
|
46
|
+
def reset_active_record
|
47
|
+
if defined? ActiveRecord
|
48
|
+
ActiveRecord::Base.clear_active_connections!
|
49
|
+
ActiveRecord::Base.establish_connection
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
def add_test_dir_to_load_path
|
55
|
+
$:.unshift("./test")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rails/commands/test_environment'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Commands
|
5
|
+
class Tester
|
6
|
+
def test(what = nil)
|
7
|
+
case what
|
8
|
+
when NilClass
|
9
|
+
print_test_usage
|
10
|
+
when "all"
|
11
|
+
run "test/**/**/*_test.rb"
|
12
|
+
when /^[^\/]+$/ # models
|
13
|
+
run "test/#{what}/**/*_test.rb"
|
14
|
+
when /[\/]+/ # models/person
|
15
|
+
run "test/#{what}_test.rb"
|
16
|
+
end
|
17
|
+
|
18
|
+
"Completed"
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
private
|
23
|
+
def run(*test_patterns)
|
24
|
+
TestEnvironment.fork do
|
25
|
+
test_patterns.each do |test_pattern|
|
26
|
+
Dir[test_pattern].each do |path|
|
27
|
+
require File.expand_path(path)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def print_test_usage
|
34
|
+
puts <<-EOT
|
35
|
+
Usage:
|
36
|
+
test "WHAT"
|
37
|
+
|
38
|
+
Description:
|
39
|
+
Runs either a full set of test suites or single suite.
|
40
|
+
|
41
|
+
If you supply WHAT with either models, controllers, helpers, integration, or performance,
|
42
|
+
those whole sets will be run.
|
43
|
+
|
44
|
+
If you supply WHAT with models/person, just test/models/person_test.rb will be run.
|
45
|
+
EOT
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commands
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -34,15 +34,18 @@ extensions: []
|
|
34
34
|
extra_rdoc_files: []
|
35
35
|
files:
|
36
36
|
- ./commands-0.0.1.gem
|
37
|
+
- ./commands-0.1.0.gem
|
37
38
|
- ./commands.gemspec
|
38
39
|
- ./Gemfile
|
39
40
|
- ./Gemfile.lock
|
40
|
-
- ./lib/commands/commander.rb
|
41
|
-
- ./lib/commands/console_delegation.rb
|
42
|
-
- ./lib/commands/generator.rb
|
43
|
-
- ./lib/commands/raker.rb
|
44
|
-
- ./lib/commands/tester.rb
|
45
41
|
- ./lib/commands.rb
|
42
|
+
- ./lib/rails/commands/commander.rb
|
43
|
+
- ./lib/rails/commands/console_delegation.rb
|
44
|
+
- ./lib/rails/commands/environment.rb
|
45
|
+
- ./lib/rails/commands/generator.rb
|
46
|
+
- ./lib/rails/commands/raker.rb
|
47
|
+
- ./lib/rails/commands/test_environment.rb
|
48
|
+
- ./lib/rails/commands/tester.rb
|
46
49
|
- ./MIT-LICENSE
|
47
50
|
- ./Rakefile
|
48
51
|
- ./README.md
|
data/lib/commands/commander.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'commands/raker'
|
2
|
-
require 'commands/tester'
|
3
|
-
require 'commands/generator'
|
4
|
-
|
5
|
-
module Commands
|
6
|
-
class Commander
|
7
|
-
delegate :rake, to: :raker
|
8
|
-
delegate :test, to: :tester
|
9
|
-
delegate :generate, :destroy, :update, to: :generator
|
10
|
-
|
11
|
-
# Only just ensured that this method is available in rails/master, so need a guard for a bit.
|
12
|
-
def self.silence_active_record_logger
|
13
|
-
return yield unless defined? ActiveRecord::Base.logger
|
14
|
-
|
15
|
-
begin
|
16
|
-
old_logger_level, ActiveRecord::Base.logger.level = ActiveRecord::Base.logger.level, Logger::ERROR
|
17
|
-
yield
|
18
|
-
ensure
|
19
|
-
ActiveRecord::Base.logger.level = old_logger_level
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
attr_reader :raker, :tester, :generator
|
24
|
-
|
25
|
-
def initialize
|
26
|
-
@raker = Raker.new
|
27
|
-
@tester = Tester.new
|
28
|
-
@generator = Generator.new
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
data/lib/commands/generator.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'rails/generators'
|
2
|
-
|
3
|
-
module Commands
|
4
|
-
class Generator
|
5
|
-
def initialize
|
6
|
-
load_rails_generators
|
7
|
-
end
|
8
|
-
|
9
|
-
def generate(argv = nil)
|
10
|
-
generator :generate, argv
|
11
|
-
end
|
12
|
-
|
13
|
-
def update(argv = nil)
|
14
|
-
generator :update, argv
|
15
|
-
end
|
16
|
-
|
17
|
-
def destroy(argv = nil)
|
18
|
-
generator :destroy, argv
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
|
-
private
|
23
|
-
def load_rails_generators
|
24
|
-
Rails.application.load_generators
|
25
|
-
end
|
26
|
-
|
27
|
-
def generator(name, argv = nil)
|
28
|
-
if argv.nil?
|
29
|
-
# FIXME: I don't know why we can't just catch SystemExit here, then we wouldn't need this if block
|
30
|
-
Rails::Generators.help name
|
31
|
-
else
|
32
|
-
ARGV.replace argv.nil? ? [nil] : argv.split(" ")
|
33
|
-
load "rails/commands/#{name}.rb"
|
34
|
-
ARGV.replace [nil]
|
35
|
-
end
|
36
|
-
|
37
|
-
"Completed"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/lib/commands/raker.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
|
3
|
-
module Commands
|
4
|
-
class Raker
|
5
|
-
include Rake::DSL
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
load_rake_tasks
|
9
|
-
end
|
10
|
-
|
11
|
-
def rake(task = nil, *args)
|
12
|
-
task.nil? ? print_rake_tasks : invoke_rake_task(task, *args)
|
13
|
-
"Completed"
|
14
|
-
rescue SystemExit, RuntimeError
|
15
|
-
"Failed"
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
private
|
20
|
-
def load_rake_tasks
|
21
|
-
Rake::TaskManager.record_task_metadata = true # needed to capture comments from define_task
|
22
|
-
load Rails.root.join('Rakefile')
|
23
|
-
end
|
24
|
-
|
25
|
-
def print_rake_tasks
|
26
|
-
Rake.application.options.show_tasks = :tasks
|
27
|
-
Rake.application.options.show_task_pattern = Regexp.new('')
|
28
|
-
Rake.application.display_tasks_and_comments
|
29
|
-
end
|
30
|
-
|
31
|
-
def invoke_rake_task(task, *args)
|
32
|
-
Commander.silence_active_record_logger { Rake::Task[task].invoke(*args) }
|
33
|
-
Rake.application.tasks.each(&:reenable) # Rake by default only allows tasks to be run once per session
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/lib/commands/tester.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
module Commands
|
2
|
-
class Tester
|
3
|
-
# FIXME: Turn this into calls directly to the test classes, so we don't have to load environment again.
|
4
|
-
# Also need to toggle the environment to test and back to dev after running.
|
5
|
-
def test(what = nil)
|
6
|
-
case what
|
7
|
-
when NilClass
|
8
|
-
print_test_usage
|
9
|
-
when "all"
|
10
|
-
# test/**/*_test.rb doesn't work because of performance tests
|
11
|
-
run "test/models/**/*_test.rb", "test/controllers/**/*_test.rb", "test/integration/**/*_test.rb"
|
12
|
-
when /^[^\/]+$/ # models
|
13
|
-
run "test/#{what}/**/*_test.rb"
|
14
|
-
when /[\/]+/ # models/person
|
15
|
-
run "test/#{what}_test.rb"
|
16
|
-
end
|
17
|
-
|
18
|
-
"Completed"
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
|
-
private
|
23
|
-
# Executes the tests matching the passed filename globs
|
24
|
-
def run(*test_patterns)
|
25
|
-
forking do
|
26
|
-
switch_env_to :test
|
27
|
-
redirect_active_record_logger
|
28
|
-
require_test_files(test_patterns)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def switch_env_to(new_env)
|
33
|
-
Rails.env = new_env.to_s
|
34
|
-
Rails.application
|
35
|
-
|
36
|
-
$:.unshift("./#{new_env}")
|
37
|
-
|
38
|
-
reset_active_record
|
39
|
-
end
|
40
|
-
|
41
|
-
def reset_active_record
|
42
|
-
if defined? ::ActiveRecord
|
43
|
-
::ActiveRecord::Base.clear_active_connections!
|
44
|
-
::ActiveRecord::Base.establish_connection
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def require_test_files(test_patterns)
|
49
|
-
# load the test files
|
50
|
-
test_patterns.each do |test_pattern|
|
51
|
-
Dir[test_pattern].each do |path|
|
52
|
-
require File.expand_path(path)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def forking
|
58
|
-
Kernel.fork do
|
59
|
-
yield
|
60
|
-
Kernel.exit
|
61
|
-
end
|
62
|
-
|
63
|
-
Process.waitall
|
64
|
-
end
|
65
|
-
|
66
|
-
def print_test_usage
|
67
|
-
puts <<-EOT
|
68
|
-
Usage:
|
69
|
-
test "WHAT"
|
70
|
-
|
71
|
-
Description:
|
72
|
-
Runs either a full set of test suites or single suite.
|
73
|
-
|
74
|
-
If you supply WHAT with either models, controllers, helpers, integration, or performance,
|
75
|
-
those whole sets will be run.
|
76
|
-
|
77
|
-
If you supply WHAT with models/person, just test/models/person_test.rb will be run.
|
78
|
-
EOT
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|