adamsanderson-open_gem 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.markdown +15 -0
- data/README.markdown +19 -7
- data/VERSION.yml +2 -2
- data/lib/open_gem/common_options.rb +36 -0
- data/lib/rubygems/commands/open_command.rb +5 -31
- data/lib/rubygems/commands/read_command.rb +60 -0
- data/lib/rubygems_plugin.rb +9 -1
- metadata +5 -2
data/CHANGELOG.markdown
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
OpenGem
|
2
|
+
========
|
3
|
+
|
4
|
+
1.3
|
5
|
+
----
|
6
|
+
* Added the read command for your reading pleasure.
|
7
|
+
Very similar to open, except it will launch the rdoc files for the gem, or generate them.
|
8
|
+
|
9
|
+
1.2
|
10
|
+
----
|
11
|
+
* Fixed shell parsing so that commands can include arguments
|
12
|
+
|
13
|
+
1.0
|
14
|
+
----
|
15
|
+
* Initial release!
|
data/README.markdown
CHANGED
@@ -1,20 +1,32 @@
|
|
1
|
-
|
1
|
+
OpenGem
|
2
2
|
========
|
3
3
|
|
4
4
|
Simply opens the specified gem in your default editor.
|
5
5
|
|
6
6
|
gem open rails
|
7
7
|
|
8
|
+
If you just want to read documentation you can do:
|
9
|
+
|
10
|
+
gem read activerecord
|
11
|
+
|
8
12
|
Installation:
|
9
13
|
------------
|
14
|
+
OpenGem require rubygems 1.3.2 or higher. You may need
|
15
|
+
to update rubygems to take advantage of the new plugin support:
|
16
|
+
|
17
|
+
gem update --system
|
10
18
|
|
11
19
|
Just install like any normal gem:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
20
|
+
|
21
|
+
gem install open_gem
|
22
|
+
|
23
|
+
Or for the edge version on GitHub:
|
24
|
+
|
25
|
+
gem sources -a http://gems.github.com
|
26
|
+
gem install adamsanderson-open_gem
|
27
|
+
|
17
28
|
For more help:
|
18
|
-
|
29
|
+
|
30
|
+
gem open --help
|
19
31
|
|
20
32
|
Adam Sanderson, netghost@gmail.com
|
data/VERSION.yml
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
module OpenGem
|
2
|
+
module CommonOptions
|
3
|
+
def add_command_option(description=nil)
|
4
|
+
add_option('-c', '--command COMMAND',
|
5
|
+
description || 'Execute command at path of the rubygem') do |value, options|
|
6
|
+
options[:command] = value
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def add_latest_version_option
|
11
|
+
add_option('-l', '--latest',
|
12
|
+
'If there are multiple versions, open the latest') do |value, options|
|
13
|
+
options[:latest] = true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_spec(name)
|
18
|
+
dep = Gem::Dependency.new name, options[:version]
|
19
|
+
specs = Gem.source_index.search(dep).select{|spec| spec.has_rdoc?}
|
20
|
+
|
21
|
+
if specs.length == 0
|
22
|
+
say "Could not find docs for '#{name}'"
|
23
|
+
return nil
|
24
|
+
|
25
|
+
elsif specs.length == 1 || options[:latest]
|
26
|
+
return specs.last
|
27
|
+
|
28
|
+
else
|
29
|
+
choices = specs.map{|s|"#{s.name} #{s.version}"}
|
30
|
+
c,i = choose_from_list "Open which gem?", choices
|
31
|
+
return specs[i] if i
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,11 +1,6 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
|
3
|
-
require 'rubygems/command'
|
4
|
-
require 'rubygems/dependency'
|
5
|
-
require 'rubygems/version_option'
|
6
|
-
|
7
1
|
# OpenCommand will open a gem's source path
|
8
2
|
class Gem::Commands::OpenCommand < Gem::Command
|
3
|
+
include OpenGem::CommonOptions
|
9
4
|
include Gem::VersionOption
|
10
5
|
|
11
6
|
def initialize
|
@@ -14,16 +9,8 @@ class Gem::Commands::OpenCommand < Gem::Command
|
|
14
9
|
:version=> Gem::Requirement.default,
|
15
10
|
:latest=> false
|
16
11
|
|
17
|
-
|
18
|
-
|
19
|
-
options[:command] = value
|
20
|
-
end
|
21
|
-
|
22
|
-
add_option('-l', '--latest',
|
23
|
-
'If there are multiple versions, open the latest') do |value, options|
|
24
|
-
options[:latest] = true
|
25
|
-
end
|
26
|
-
|
12
|
+
add_command_option
|
13
|
+
add_latest_version_option
|
27
14
|
add_version_option
|
28
15
|
end
|
29
16
|
|
@@ -39,21 +26,8 @@ class Gem::Commands::OpenCommand < Gem::Command
|
|
39
26
|
end
|
40
27
|
|
41
28
|
def get_path(name)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
if specs.length == 0
|
46
|
-
say "Could not find '#{name}'"
|
47
|
-
return nil
|
48
|
-
|
49
|
-
elsif specs.length == 1 || options[:latest]
|
50
|
-
return specs.last.full_gem_path
|
51
|
-
|
52
|
-
else
|
53
|
-
choices = specs.map{|s|"#{s.name} #{s.version}"}
|
54
|
-
c,i = choose_from_list "Open which gem?", choices
|
55
|
-
return specs[i].full_gem_path if i
|
56
|
-
|
29
|
+
if spec = get_spec(name)
|
30
|
+
spec.full_gem_path
|
57
31
|
end
|
58
32
|
end
|
59
33
|
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# ReadCommand will open a gem's rdoc
|
2
|
+
class Gem::Commands::ReadCommand < Gem::Command
|
3
|
+
include OpenGem::CommonOptions
|
4
|
+
include Gem::VersionOption
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super 'read', "Opens the gem's documentation",
|
8
|
+
:command => nil,
|
9
|
+
:version=> Gem::Requirement.default,
|
10
|
+
:latest=> false
|
11
|
+
|
12
|
+
add_command_option "Application to read rdoc with"
|
13
|
+
add_latest_version_option
|
14
|
+
add_version_option
|
15
|
+
end
|
16
|
+
|
17
|
+
def arguments # :nodoc:
|
18
|
+
"GEMNAME gem to read"
|
19
|
+
end
|
20
|
+
|
21
|
+
def execute
|
22
|
+
name = get_one_gem_name
|
23
|
+
spec = get_spec name
|
24
|
+
if spec && path = get_path(spec)
|
25
|
+
if File.exists? path
|
26
|
+
read_gem path
|
27
|
+
elsif ask_yes_no "The rdoc seems to be missing, would you like to generate one?", true
|
28
|
+
generate_rdoc spec
|
29
|
+
read_gem path
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_path(spec)
|
35
|
+
File.join(spec.installation_path, "doc", spec.full_name, 'rdoc','index.html')
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_rdoc spec
|
39
|
+
Gem::DocManager.new(spec).generate_rdoc
|
40
|
+
end
|
41
|
+
|
42
|
+
def rdoc_reader
|
43
|
+
options[:command] || case RUBY_PLATFORM.downcase
|
44
|
+
when /darwin/ then 'open'
|
45
|
+
when /mswin/ then 'explorer'
|
46
|
+
when /linux/ then 'firefox'
|
47
|
+
else 'firefox' # Come on, if you write ruby, you probably have firefox installed ;)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def read_gem(path)
|
52
|
+
command_parts = Shellwords.shellwords(rdoc_reader)
|
53
|
+
command_parts << path
|
54
|
+
success = system(*command_parts)
|
55
|
+
if !success
|
56
|
+
raise Gem::CommandLineError, "Could not run '#{editor} #{path}', exit code: #{$?.exitstatus}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
1
|
require 'rubygems/command_manager'
|
2
2
|
|
3
|
-
|
3
|
+
require 'rubygems/command'
|
4
|
+
require 'rubygems/dependency'
|
5
|
+
require 'rubygems/version_option'
|
6
|
+
|
7
|
+
require 'shellwords'
|
8
|
+
require 'open_gem/common_options'
|
9
|
+
|
10
|
+
Gem::CommandManager.instance.register_command :open
|
11
|
+
Gem::CommandManager.instance.register_command :read
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adamsanderson-open_gem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Sanderson
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-06-02 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -31,10 +31,13 @@ extensions: []
|
|
31
31
|
extra_rdoc_files:
|
32
32
|
- README.markdown
|
33
33
|
files:
|
34
|
+
- CHANGELOG.markdown
|
34
35
|
- README.markdown
|
35
36
|
- Rakefile
|
36
37
|
- VERSION.yml
|
38
|
+
- lib/open_gem/common_options.rb
|
37
39
|
- lib/rubygems/commands/open_command.rb
|
40
|
+
- lib/rubygems/commands/read_command.rb
|
38
41
|
- lib/rubygems_plugin.rb
|
39
42
|
- test/open_command_test.rb
|
40
43
|
has_rdoc: false
|