rails-sh 1.4.0 → 1.5.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/Gemfile +1 -0
- data/Gemfile.lock +1 -0
- data/README.rdoc +12 -1
- data/VERSION +1 -1
- data/lib/rails/sh.rb +10 -3
- data/lib/rails/sh/command.rb +15 -1
- data/lib/rails/sh/commands.rb +7 -1
- data/lib/rails/sh/forkable.rb +13 -1
- data/lib/rails/sh/helpers.rb +60 -0
- data/rails-sh.gemspec +12 -9
- data/spec/rails/sh/command_spec.rb +11 -0
- metadata +59 -53
data/Gemfile
CHANGED
@@ -6,6 +6,7 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development do
|
9
|
+
gem "rake", "0.8.7"
|
9
10
|
gem "rspec", "~> 2.3.0"
|
10
11
|
gem "bundler", "~> 1.0.0"
|
11
12
|
gem "jeweler", "~> 1.5.2"
|
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -23,7 +23,7 @@ Execute rake task:
|
|
23
23
|
|
24
24
|
Generate a controller:
|
25
25
|
|
26
|
-
rails>
|
26
|
+
rails> rails generate controller foo bar
|
27
27
|
$ rails g controller foo bar
|
28
28
|
create app/controllers/foo_controller.rb
|
29
29
|
route get "foo/bar"
|
@@ -45,6 +45,17 @@ Run console:
|
|
45
45
|
|
46
46
|
please type help
|
47
47
|
|
48
|
+
== Configuration
|
49
|
+
|
50
|
+
rails-sh will try to load '~/railsshrc' as configuration.
|
51
|
+
|
52
|
+
Example:
|
53
|
+
|
54
|
+
# ~/railsshrc
|
55
|
+
Rails::Sh::Command.define 'my_command' do |arg|
|
56
|
+
puts "Execute my_command with arg(`#{arg}`)!"
|
57
|
+
end
|
58
|
+
|
48
59
|
== TODO
|
49
60
|
|
50
61
|
== Contributing to rails-sh
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.5.0
|
data/lib/rails/sh.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'readline'
|
2
|
+
require 'rails/sh/helpers'
|
2
3
|
require 'rails/sh/forkable'
|
3
4
|
require 'rails/sh/rails'
|
4
5
|
require 'rails/sh/rake'
|
@@ -14,11 +15,13 @@ module Rails
|
|
14
15
|
|
15
16
|
require 'rails/sh/commands'
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
begin; load "~/.railsshrc"; rescue LoadError; end
|
19
|
+
|
20
|
+
puts "\e[36mRails.env: #{::Rails.env}\e[0m"
|
21
|
+
puts "\e[36mtype `help` to print help\e[0m"
|
19
22
|
|
20
23
|
setup_readline
|
21
|
-
while buf = Readline.readline(
|
24
|
+
while buf = Readline.readline(prompt, true)
|
22
25
|
line = buf.strip
|
23
26
|
next if line.empty?
|
24
27
|
begin
|
@@ -32,6 +35,10 @@ module Rails
|
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
38
|
+
def prompt
|
39
|
+
"%s> " % "rails-sh(#{::Rails.root.basename})"
|
40
|
+
end
|
41
|
+
|
35
42
|
def setup_readline
|
36
43
|
Readline.basic_word_break_characters = ""
|
37
44
|
Readline.completion_proc = Command.completion_proc
|
data/lib/rails/sh/command.rb
CHANGED
@@ -30,13 +30,27 @@ module Rails
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def completion_proc
|
33
|
-
lambda { |line|
|
33
|
+
lambda { |line|
|
34
|
+
regex = /#{Regexp.quote(line)}/
|
35
|
+
completions.map { |completion|
|
36
|
+
case completion
|
37
|
+
when String
|
38
|
+
completion if completion.match(regex)
|
39
|
+
when Proc
|
40
|
+
completion.call(line)
|
41
|
+
end
|
42
|
+
}.compact
|
43
|
+
}
|
34
44
|
end
|
35
45
|
|
36
46
|
def completions
|
37
47
|
@completions ||= []
|
38
48
|
end
|
39
49
|
|
50
|
+
def completions=(completions)
|
51
|
+
@completions = completions
|
52
|
+
end
|
53
|
+
|
40
54
|
def clear
|
41
55
|
commands.clear
|
42
56
|
completions.clear
|
data/lib/rails/sh/commands.rb
CHANGED
@@ -42,7 +42,7 @@ Command.define 'bundle' do |arg|
|
|
42
42
|
Rails::Sh::Bundler.invoke(arg)
|
43
43
|
end
|
44
44
|
|
45
|
-
Rails::Sh::Bundler.sub_commands.map do |c|
|
45
|
+
(Rails::Sh::Bundler.sub_commands - ['init']).map do |c|
|
46
46
|
Command.completions << "bundle #{c}"
|
47
47
|
end
|
48
48
|
|
@@ -63,6 +63,12 @@ Command.define 'reload' do
|
|
63
63
|
Rails::Sh::Rails.reload!
|
64
64
|
end
|
65
65
|
|
66
|
+
Command.define 'log' do |arg|
|
67
|
+
puts "\e[7mCtrl-C to quit\e[0m"
|
68
|
+
system 'tail', '-f', Rails.root.join('log', (arg || 'development') + '.log').to_s
|
69
|
+
end
|
70
|
+
Command.completions += %w(development test production).map { |i| "log #{i}" }
|
71
|
+
|
66
72
|
Command.define 'exit' do
|
67
73
|
exit
|
68
74
|
end
|
data/lib/rails/sh/forkable.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
1
3
|
module Rails
|
2
4
|
module Sh
|
3
5
|
module Forkable
|
6
|
+
include Rails::Sh::Helpers
|
7
|
+
|
4
8
|
def invoke(line)
|
5
9
|
run_before_fork
|
6
10
|
pid = fork do
|
7
11
|
run_after_fork
|
8
|
-
|
12
|
+
|
13
|
+
begin
|
14
|
+
$stdout = StringIO.new
|
15
|
+
_invoke(line)
|
16
|
+
ensure
|
17
|
+
output = $stdout.string
|
18
|
+
lesspipe output
|
19
|
+
$stdout = STDOUT
|
20
|
+
end
|
9
21
|
end
|
10
22
|
Process.waitpid(pid)
|
11
23
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Rails
|
2
|
+
module Sh
|
3
|
+
module Helpers
|
4
|
+
# copy from pry: https://github.com/pry/pry
|
5
|
+
#
|
6
|
+
# Create scrollable output via less!
|
7
|
+
#
|
8
|
+
# This command runs `less` in a subprocess, and gives you the IO to its STDIN pipe
|
9
|
+
# so that you can communicate with it.
|
10
|
+
#
|
11
|
+
# Example:
|
12
|
+
#
|
13
|
+
# lesspipe do |less|
|
14
|
+
# 50.times { less.puts "Hi mom!" }
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# The default less parameters are:
|
18
|
+
# * Allow colour
|
19
|
+
# * Don't wrap lines longer than the screen
|
20
|
+
# * Quit immediately (without paging) if there's less than one screen of text.
|
21
|
+
#
|
22
|
+
# You can change these options by passing a hash to `lesspipe`, like so:
|
23
|
+
#
|
24
|
+
# lesspipe(:wrap=>false) { |less| less.puts essay.to_s }
|
25
|
+
#
|
26
|
+
# It accepts the following boolean options:
|
27
|
+
# :color => Allow ANSI colour codes?
|
28
|
+
# :wrap => Wrap long lines?
|
29
|
+
# :always => Always page, even if there's less than one page of text?
|
30
|
+
#
|
31
|
+
def lesspipe(*args)
|
32
|
+
if args.any? and args.last.is_a?(Hash)
|
33
|
+
options = args.pop
|
34
|
+
else
|
35
|
+
options = {}
|
36
|
+
end
|
37
|
+
|
38
|
+
output = args.first if args.any?
|
39
|
+
|
40
|
+
params = []
|
41
|
+
params << "-R" unless options[:color] == false
|
42
|
+
params << "-S" unless options[:wrap] == true
|
43
|
+
params << "-F" unless options[:always] == true
|
44
|
+
if options[:tail] == true
|
45
|
+
params << "+\\>"
|
46
|
+
$stderr.puts "Seeking to end of stream..."
|
47
|
+
end
|
48
|
+
params << "-X"
|
49
|
+
|
50
|
+
IO.popen("less #{params * ' '}", "w") do |less|
|
51
|
+
if output
|
52
|
+
less.puts output
|
53
|
+
else
|
54
|
+
yield less
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/rails-sh.gemspec
CHANGED
@@ -4,15 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "1.
|
7
|
+
s.name = "rails-sh"
|
8
|
+
s.version = "1.5.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"]
|
12
|
-
s.date =
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.email = %q{jugyo.org@gmail.com}
|
12
|
+
s.date = "2011-11-23"
|
13
|
+
s.description = "The Rails Shell to execute sub commands of rails quickly."
|
14
|
+
s.email = "jugyo.org@gmail.com"
|
16
15
|
s.executables = ["rails-sh"]
|
17
16
|
s.extra_rdoc_files = [
|
18
17
|
"LICENSE.txt",
|
@@ -33,6 +32,7 @@ Gem::Specification.new do |s|
|
|
33
32
|
"lib/rails/sh/command.rb",
|
34
33
|
"lib/rails/sh/commands.rb",
|
35
34
|
"lib/rails/sh/forkable.rb",
|
35
|
+
"lib/rails/sh/helpers.rb",
|
36
36
|
"lib/rails/sh/rails.rb",
|
37
37
|
"lib/rails/sh/rake.rb",
|
38
38
|
"rails-sh.gemspec",
|
@@ -40,11 +40,11 @@ Gem::Specification.new do |s|
|
|
40
40
|
"spec/rails/sh_spec.rb",
|
41
41
|
"spec/spec_helper.rb"
|
42
42
|
]
|
43
|
-
s.homepage =
|
43
|
+
s.homepage = "http://github.com/jugyo/rails-sh"
|
44
44
|
s.licenses = ["MIT"]
|
45
45
|
s.require_paths = ["lib"]
|
46
|
-
s.rubygems_version =
|
47
|
-
s.summary =
|
46
|
+
s.rubygems_version = "1.8.11"
|
47
|
+
s.summary = "The Rails Shell"
|
48
48
|
s.test_files = [
|
49
49
|
"spec/rails/sh/command_spec.rb",
|
50
50
|
"spec/rails/sh_spec.rb",
|
@@ -55,17 +55,20 @@ Gem::Specification.new do |s|
|
|
55
55
|
s.specification_version = 3
|
56
56
|
|
57
57
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
58
|
+
s.add_development_dependency(%q<rake>, ["= 0.8.7"])
|
58
59
|
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
59
60
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
60
61
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
61
62
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
62
63
|
else
|
64
|
+
s.add_dependency(%q<rake>, ["= 0.8.7"])
|
63
65
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
64
66
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
65
67
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
66
68
|
s.add_dependency(%q<rcov>, [">= 0"])
|
67
69
|
end
|
68
70
|
else
|
71
|
+
s.add_dependency(%q<rake>, ["= 0.8.7"])
|
69
72
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
70
73
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
71
74
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
@@ -58,5 +58,16 @@ describe Rails::Sh::Command do
|
|
58
58
|
Rails::Sh::Command.completion_proc.call('foo').should =~ ['foo']
|
59
59
|
Rails::Sh::Command.completion_proc.call('rake').should =~ ['rake routes', 'rake spec']
|
60
60
|
end
|
61
|
+
|
62
|
+
context 'with blocks for completion' do
|
63
|
+
before do
|
64
|
+
Rails::Sh::Command.completions.clear
|
65
|
+
Rails::Sh::Command.completions << lambda { |line| 'block' }
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'return completions' do
|
69
|
+
Rails::Sh::Command.completion_proc.call('foo').should =~ ['block']
|
70
|
+
end
|
71
|
+
end
|
61
72
|
end
|
62
73
|
end
|
metadata
CHANGED
@@ -1,72 +1,80 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-sh
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.5.0
|
4
5
|
prerelease:
|
5
|
-
version: 1.4.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- jugyo
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
date: 2011-11-23 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &2177367420 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.8.7
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2177367420
|
25
|
+
- !ruby/object:Gem::Dependency
|
17
26
|
name: rspec
|
18
|
-
requirement: &
|
27
|
+
requirement: &2177366860 !ruby/object:Gem::Requirement
|
19
28
|
none: false
|
20
|
-
requirements:
|
29
|
+
requirements:
|
21
30
|
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
31
|
+
- !ruby/object:Gem::Version
|
23
32
|
version: 2.3.0
|
24
33
|
type: :development
|
25
34
|
prerelease: false
|
26
|
-
version_requirements: *
|
27
|
-
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: *2177366860
|
36
|
+
- !ruby/object:Gem::Dependency
|
28
37
|
name: bundler
|
29
|
-
requirement: &
|
38
|
+
requirement: &2177366240 !ruby/object:Gem::Requirement
|
30
39
|
none: false
|
31
|
-
requirements:
|
40
|
+
requirements:
|
32
41
|
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
42
|
+
- !ruby/object:Gem::Version
|
34
43
|
version: 1.0.0
|
35
44
|
type: :development
|
36
45
|
prerelease: false
|
37
|
-
version_requirements: *
|
38
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
version_requirements: *2177366240
|
47
|
+
- !ruby/object:Gem::Dependency
|
39
48
|
name: jeweler
|
40
|
-
requirement: &
|
49
|
+
requirement: &2177365660 !ruby/object:Gem::Requirement
|
41
50
|
none: false
|
42
|
-
requirements:
|
51
|
+
requirements:
|
43
52
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
53
|
+
- !ruby/object:Gem::Version
|
45
54
|
version: 1.5.2
|
46
55
|
type: :development
|
47
56
|
prerelease: false
|
48
|
-
version_requirements: *
|
49
|
-
- !ruby/object:Gem::Dependency
|
57
|
+
version_requirements: *2177365660
|
58
|
+
- !ruby/object:Gem::Dependency
|
50
59
|
name: rcov
|
51
|
-
requirement: &
|
60
|
+
requirement: &2177365100 !ruby/object:Gem::Requirement
|
52
61
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
57
66
|
type: :development
|
58
67
|
prerelease: false
|
59
|
-
version_requirements: *
|
68
|
+
version_requirements: *2177365100
|
60
69
|
description: The Rails Shell to execute sub commands of rails quickly.
|
61
70
|
email: jugyo.org@gmail.com
|
62
|
-
executables:
|
71
|
+
executables:
|
63
72
|
- rails-sh
|
64
73
|
extensions: []
|
65
|
-
|
66
|
-
extra_rdoc_files:
|
74
|
+
extra_rdoc_files:
|
67
75
|
- LICENSE.txt
|
68
76
|
- README.rdoc
|
69
|
-
files:
|
77
|
+
files:
|
70
78
|
- .document
|
71
79
|
- .rspec
|
72
80
|
- Gemfile
|
@@ -81,44 +89,42 @@ files:
|
|
81
89
|
- lib/rails/sh/command.rb
|
82
90
|
- lib/rails/sh/commands.rb
|
83
91
|
- lib/rails/sh/forkable.rb
|
92
|
+
- lib/rails/sh/helpers.rb
|
84
93
|
- lib/rails/sh/rails.rb
|
85
94
|
- lib/rails/sh/rake.rb
|
86
95
|
- rails-sh.gemspec
|
87
96
|
- spec/rails/sh/command_spec.rb
|
88
97
|
- spec/rails/sh_spec.rb
|
89
98
|
- spec/spec_helper.rb
|
90
|
-
has_rdoc: true
|
91
99
|
homepage: http://github.com/jugyo/rails-sh
|
92
|
-
licenses:
|
100
|
+
licenses:
|
93
101
|
- MIT
|
94
102
|
post_install_message:
|
95
103
|
rdoc_options: []
|
96
|
-
|
97
|
-
require_paths:
|
104
|
+
require_paths:
|
98
105
|
- lib
|
99
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
107
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
segments:
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
segments:
|
106
113
|
- 0
|
107
|
-
|
108
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
hash: 3117646239956155231
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
116
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version:
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
114
121
|
requirements: []
|
115
|
-
|
116
122
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
123
|
+
rubygems_version: 1.8.11
|
118
124
|
signing_key:
|
119
125
|
specification_version: 3
|
120
126
|
summary: The Rails Shell
|
121
|
-
test_files:
|
127
|
+
test_files:
|
122
128
|
- spec/rails/sh/command_spec.rb
|
123
129
|
- spec/rails/sh_spec.rb
|
124
130
|
- spec/spec_helper.rb
|