commands 0.1.0 → 0.2.0
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/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
|