rails-sh 1.3.0 → 1.4.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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
1
+ 1.4.0
@@ -1,28 +1,20 @@
1
1
  require 'readline'
2
- require 'rails/sh/hook_for_fork'
2
+ require 'rails/sh/forkable'
3
+ require 'rails/sh/rails'
3
4
  require 'rails/sh/rake'
4
5
  require 'rails/sh/command'
5
- require 'rails/sh/commands'
6
+ require 'rails/sh/bundler'
6
7
 
7
8
  module Rails
8
9
  module Sh
9
- extend HookForFork
10
-
11
- RAILS_SUB_COMMANDS = ['generate', 'destroy', 'plugin', 'benchmarker', 'profiler',
12
- 'console', 'server', 'dbconsole', 'application', 'runner']
13
-
14
10
  class << self
15
11
  def start
16
- before_fork do
17
- ActiveRecord::Base.remove_connection if defined?(ActiveRecord::Base)
18
- end
19
- after_fork do
20
- ActiveRecord::Base.establish_connection if defined?(ActiveRecord::Base)
21
- end
12
+ ::Rails::Sh::Rails.init
13
+ ::Rails::Sh::Rake.init
22
14
 
23
- init_rake
15
+ require 'rails/sh/commands'
24
16
 
25
- puts "Rails.env: #{Rails.env}"
17
+ puts "Rails.env: #{::Rails.env}"
26
18
  puts "type `help` to print help"
27
19
 
28
20
  setup_readline
@@ -40,25 +32,9 @@ module Rails
40
32
  end
41
33
  end
42
34
 
43
- def init_rake
44
- Rails::Sh::Rake.init
45
- Rails::Sh::Rake.before_fork do
46
- run_before_fork
47
- end
48
- Rails::Sh::Rake.after_fork do
49
- run_after_fork
50
- end
51
- end
52
-
53
35
  def setup_readline
54
36
  Readline.basic_word_break_characters = ""
55
- Readline.completion_proc = lambda do |word|
56
- (
57
- Command.command_names.map { |name| name.to_s } +
58
- RAILS_SUB_COMMANDS.map { |name| "rails #{name}" } +
59
- Rails::Sh::Rake.task_names.map { |name| "rake #{name}" }
60
- ).grep(/#{Regexp.quote(word)}/)
61
- end
37
+ Readline.completion_proc = Command.completion_proc
62
38
  end
63
39
 
64
40
  def execute(line)
@@ -71,23 +47,6 @@ module Rails
71
47
  puts "\e[41mCommand not found\e[0m"
72
48
  end
73
49
  end
74
-
75
- def execute_rails_command(line)
76
- run_before_fork
77
- pid = fork do
78
- run_after_fork
79
- reload!
80
- ARGV.clear
81
- ARGV.concat line.split(/\s+/)
82
- puts "\e[42m$ rails #{ARGV.join(" ")}\e[0m"
83
- require 'rails/commands'
84
- end
85
- Process.waitpid(pid)
86
- end
87
-
88
- def reload!
89
- ActionDispatch::Callbacks.new(Proc.new {}, false).call({})
90
- end
91
50
  end
92
51
  end
93
52
  end
@@ -0,0 +1,22 @@
1
+ module Rails
2
+ module Sh
3
+ module Bundler
4
+ extend Forkable
5
+
6
+ class << self
7
+ def _invoke(line)
8
+ line ||= 'install'
9
+ command, *args = line.split(/\s+/)
10
+ ARGV.clear
11
+ ARGV.concat args
12
+ require 'bundler/cli'
13
+ ::Bundler::CLI.new.send(command.to_sym)
14
+ end
15
+
16
+ def sub_commands
17
+ %w(exec install update open package config check list show console open viz init gem)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -9,6 +9,7 @@ module Rails
9
9
  def define(*names, &block)
10
10
  names.each do |name|
11
11
  commands[name.to_sym] = block
12
+ completions << name.to_s
12
13
  end
13
14
  end
14
15
 
@@ -25,7 +26,20 @@ module Rails
25
26
  end
26
27
 
27
28
  def [](name)
28
- commands[name]
29
+ commands[name.to_sym]
30
+ end
31
+
32
+ def completion_proc
33
+ lambda { |line| completions.grep(/#{Regexp.quote(line)}/) }
34
+ end
35
+
36
+ def completions
37
+ @completions ||= []
38
+ end
39
+
40
+ def clear
41
+ commands.clear
42
+ completions.clear
29
43
  end
30
44
  end
31
45
  end
@@ -1,25 +1,36 @@
1
1
  include Rails::Sh
2
2
 
3
3
  Command.define 'help' do
4
+ print "\e[36m"
4
5
  puts <<HELP
5
- \e[36mhelp print help
6
- rails ARG execute rails command
7
- rake TASK execute rake task
8
- t, tasks PATTERN print rake tasks
9
- exit exit from rails-sh
10
- restart restart rails-sh
11
- reload reload the environment
12
- !, system execute a system command
13
- eval eval as ruby script\e[0m
6
+ help print help
7
+ rails ARG execute rails command
8
+ rake TASK execute rake task
9
+ t, tasks PATTERN print rake tasks
10
+ bundle execute bundler command
11
+ exit exit from rails-sh
12
+ restart restart rails-sh
13
+ reload reload the environment
14
+ ! execute a system command
15
+ eval eval as ruby script
14
16
  HELP
17
+ print "\e[0m"
15
18
  end
16
19
 
17
20
  Command.define 'rails' do |arg|
18
- Rails::Sh.execute_rails_command(arg)
21
+ Rails::Sh::Rails.invoke(arg)
22
+ end
23
+
24
+ Rails::Sh::Rails.sub_commands.map do |c|
25
+ Command.completions << "rails #{c}"
19
26
  end
20
27
 
21
28
  Command.define 'rake' do |arg|
22
- Rails::Sh::Rake.invoke(arg || :default)
29
+ Rails::Sh::Rake.invoke(arg)
30
+ end
31
+
32
+ Rails::Sh::Rake.task_names.map do |name|
33
+ Command.completions << "rake #{name}"
23
34
  end
24
35
 
25
36
  Command.define 'tasks', 't' do |arg|
@@ -27,7 +38,15 @@ Command.define 'tasks', 't' do |arg|
27
38
  Rake.application.display_tasks_and_comments
28
39
  end
29
40
 
30
- Command.define 'system', '!' do |arg|
41
+ Command.define 'bundle' do |arg|
42
+ Rails::Sh::Bundler.invoke(arg)
43
+ end
44
+
45
+ Rails::Sh::Bundler.sub_commands.map do |c|
46
+ Command.completions << "bundle #{c}"
47
+ end
48
+
49
+ Command.define '!' do |arg|
31
50
  system arg
32
51
  end
33
52
 
@@ -41,7 +60,7 @@ Command.define 'restart' do
41
60
  end
42
61
 
43
62
  Command.define 'reload' do
44
- Rails::Sh.reload!
63
+ Rails::Sh::Rails.reload!
45
64
  end
46
65
 
47
66
  Command.define 'exit' do
@@ -1,6 +1,19 @@
1
1
  module Rails
2
2
  module Sh
3
- module HookForFork
3
+ module Forkable
4
+ def invoke(line)
5
+ run_before_fork
6
+ pid = fork do
7
+ run_after_fork
8
+ _invoke(line)
9
+ end
10
+ Process.waitpid(pid)
11
+ end
12
+
13
+ def _invoke
14
+ raise NotImplementedError
15
+ end
16
+
4
17
  def before_fork(&block)
5
18
  @before_fork = block
6
19
  end
@@ -0,0 +1,35 @@
1
+ module Rails
2
+ module Sh
3
+ module Rails
4
+ extend Forkable
5
+
6
+ class << self
7
+ def init
8
+ before_fork do
9
+ ActiveRecord::Base.remove_connection if defined?(ActiveRecord::Base)
10
+ end
11
+ after_fork do
12
+ ActiveRecord::Base.establish_connection if defined?(ActiveRecord::Base)
13
+ end
14
+ end
15
+
16
+ def _invoke(line)
17
+ reload!
18
+ ARGV.clear
19
+ ARGV.concat line.split(/\s+/)
20
+ puts "\e[42m$ rails #{ARGV.join(" ")}\e[0m"
21
+ require 'rails/commands'
22
+ end
23
+
24
+ def reload!
25
+ ActionDispatch::Callbacks.new(Proc.new {}, false).call({})
26
+ end
27
+
28
+ def sub_commands
29
+ %w(generate destroy plugin benchmarker profiler
30
+ console server dbconsole application runner)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -4,11 +4,19 @@ require 'stringio'
4
4
  module Rails
5
5
  module Sh
6
6
  module Rake
7
- extend HookForFork
7
+ extend Forkable
8
8
 
9
9
  class << self
10
10
  def init
11
11
  $stdout = StringIO.new
12
+
13
+ before_fork do
14
+ ActiveRecord::Base.remove_connection if defined?(ActiveRecord::Base)
15
+ end
16
+ after_fork do
17
+ ActiveRecord::Base.establish_connection if defined?(ActiveRecord::Base)
18
+ end
19
+
12
20
  ::Rake.application = ::Rake::Application.new
13
21
  ::Rake.application.init
14
22
  ::Rake.application.load_rakefile
@@ -17,19 +25,15 @@ module Rails
17
25
  $stdout = STDOUT
18
26
  end
19
27
 
20
- def invoke(line)
28
+ def _invoke(line)
29
+ line ||= 'default'
21
30
  name, *args = line.split(/\s+/)
22
- run_before_fork
23
- pid = fork do
24
- run_after_fork
25
- args.each do |arg|
26
- env, value = arg.split('=')
27
- next unless env && !env.empty? && value && !value.empty?
28
- ENV[env] = value
29
- end
30
- ::Rake.application[name].invoke
31
+ args.each do |arg|
32
+ env, value = arg.split('=')
33
+ next unless env && !env.empty? && value && !value.empty?
34
+ ENV[env] = value
31
35
  end
32
- Process.waitpid(pid)
36
+ ::Rake.application[name].invoke
33
37
  end
34
38
 
35
39
  def task_names
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rails-sh}
8
- s.version = "1.3.0"
8
+ s.version = "1.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["jugyo"]
@@ -29,9 +29,11 @@ Gem::Specification.new do |s|
29
29
  "VERSION",
30
30
  "bin/rails-sh",
31
31
  "lib/rails/sh.rb",
32
+ "lib/rails/sh/bundler.rb",
32
33
  "lib/rails/sh/command.rb",
33
34
  "lib/rails/sh/commands.rb",
34
- "lib/rails/sh/hook_for_fork.rb",
35
+ "lib/rails/sh/forkable.rb",
36
+ "lib/rails/sh/rails.rb",
35
37
  "lib/rails/sh/rake.rb",
36
38
  "rails-sh.gemspec",
37
39
  "spec/rails/sh/command_spec.rb",
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Rails::Sh::Command do
4
4
  before do
5
- Rails::Sh::Command.commands.clear
5
+ Rails::Sh::Command.clear
6
6
  end
7
7
 
8
8
  context 'when define a command' do
@@ -23,10 +23,40 @@ describe Rails::Sh::Command do
23
23
  Rails::Sh::Command.command_names.should =~ [:foo]
24
24
  end
25
25
 
26
- define 'Command.[]' do
26
+ describe 'Command.[]' do
27
27
  it 'can get a command' do
28
28
  Rails::Sh::Command['foo'].should eq(@block)
29
29
  end
30
30
  end
31
31
  end
32
+
33
+ describe '.completions' do
34
+ context 'when command does not exist' do
35
+ it 'completions is empty' do
36
+ Rails::Sh::Command.completions.should be_empty
37
+ end
38
+ end
39
+
40
+ context 'when commands exist' do
41
+ before do
42
+ Rails::Sh::Command.define('foo') {}
43
+ Rails::Sh::Command.define('bar') {}
44
+ end
45
+
46
+ it 'completions is empty' do
47
+ Rails::Sh::Command.completions.should =~ ['foo', 'bar']
48
+ end
49
+ end
50
+ end
51
+
52
+ describe '.completion_proc' do
53
+ before do
54
+ ['foo', 'rails generate', 'rake routes', 'rake spec'].each { |c| Rails::Sh::Command.completions << c }
55
+ end
56
+
57
+ it 'return completions' do
58
+ Rails::Sh::Command.completion_proc.call('foo').should =~ ['foo']
59
+ Rails::Sh::Command.completion_proc.call('rake').should =~ ['rake routes', 'rake spec']
60
+ end
61
+ end
32
62
  end
@@ -1,26 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rails::Sh do
4
- context 'when define a command' do
5
- before do
6
- @block = lambda {}
7
- Rails::Sh::Command.define('foo', &@block)
8
- end
9
-
10
- ['foo'].each do |line|
11
- it "the command should be executed if the line is '#{line}'" do
12
- @block.should_receive(:call).with(nil).once
13
- Rails::Sh.should_receive(:execute_rails_command).with(line).exactly(0).times
14
- Rails::Sh.execute(line)
15
- end
16
- end
17
-
18
- ['fo', 'bar'].each do |line|
19
- it "the command should not be executed if the line is '#{line}'" do
20
- @block.should_receive(:call).with(nil).exactly(0).times
21
- Rails::Sh.should_receive(:execute_rails_command).with(line).once
22
- Rails::Sh.execute(line)
23
- end
24
- end
25
- end
4
+ pending
26
5
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rails-sh
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.3.0
5
+ version: 1.4.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - jugyo
@@ -77,9 +77,11 @@ files:
77
77
  - VERSION
78
78
  - bin/rails-sh
79
79
  - lib/rails/sh.rb
80
+ - lib/rails/sh/bundler.rb
80
81
  - lib/rails/sh/command.rb
81
82
  - lib/rails/sh/commands.rb
82
- - lib/rails/sh/hook_for_fork.rb
83
+ - lib/rails/sh/forkable.rb
84
+ - lib/rails/sh/rails.rb
83
85
  - lib/rails/sh/rake.rb
84
86
  - rails-sh.gemspec
85
87
  - spec/rails/sh/command_spec.rb
@@ -99,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
101
  requirements:
100
102
  - - ">="
101
103
  - !ruby/object:Gem::Version
102
- hash: -3249246770813538482
104
+ hash: -857922454327872908
103
105
  segments:
104
106
  - 0
105
107
  version: "0"