open_gem 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown ADDED
@@ -0,0 +1,28 @@
1
+ OpenGem
2
+ ========
3
+
4
+ Simply opens the specified gem in your default editor.
5
+
6
+ gem open rails
7
+
8
+ Installation:
9
+ ------------
10
+ OpenGem require rubygems 1.3.2 or higher. You may need
11
+ to update rubygems to take advantage of the new plugin support:
12
+
13
+ gem update --system
14
+
15
+ Just install like any normal gem:
16
+
17
+ gem install open_gem
18
+
19
+ Or for the edge version on GitHub:
20
+
21
+ gem sources -a http://gems.github.com
22
+ gem install adamsanderson-open_gem
23
+
24
+ For more help:
25
+
26
+ gem open --help
27
+
28
+ Adam Sanderson, netghost@gmail.com
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |s|
8
+ s.name = "open_gem"
9
+ s.summary = "Gem Command to easily open a ruby gem with the editor of your choice."
10
+ s.description = <<-DESC
11
+ Open a gem's source directory with either the default editor, or a specified command.
12
+ DESC
13
+ s.email = "netghost@gmail.com"
14
+ s.homepage = "http://github.com/adamsanderson/open_gem"
15
+ s.authors = ["Adam Sanderson"]
16
+ s.has_rdoc = false
17
+ s.files = FileList["[A-Z]*", "{bin,lib,test}/**/*"]
18
+
19
+ # Testing
20
+ s.test_files = FileList["test/**/*_test.rb"]
21
+ s.add_development_dependency 'mocha', '~> 0.9.5'
22
+ end
23
+
24
+ rescue LoadError
25
+ puts "Jeweler not available. Install it for jeweler-related tasks with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
26
+ end
27
+
28
+ Rake::TestTask.new do |t|
29
+ t.libs << 'lib'
30
+ t.pattern = 'test/**/*_test.rb'
31
+ t.verbose = false
32
+ end
33
+
34
+ task :default => :test
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 0
3
+ :major: 1
4
+ :minor: 2
@@ -0,0 +1,73 @@
1
+ require 'shellwords'
2
+
3
+ require 'rubygems/command'
4
+ require 'rubygems/dependency'
5
+ require 'rubygems/version_option'
6
+
7
+ # OpenCommand will open a gem's source path
8
+ class Gem::Commands::OpenCommand < Gem::Command
9
+ include Gem::VersionOption
10
+
11
+ def initialize
12
+ super 'open', "Opens the gem's source directory with $GEM_OPEN_EDITOR or $EDITOR",
13
+ :command => nil,
14
+ :version=> Gem::Requirement.default,
15
+ :latest=> false
16
+
17
+ add_option('-c', '--command COMMAND',
18
+ 'Execute command at path of the rubygem') do |value, options|
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
+
27
+ add_version_option
28
+ end
29
+
30
+ def arguments # :nodoc:
31
+ "GEMNAME gem to open"
32
+ end
33
+
34
+ def execute
35
+ name = get_one_gem_name
36
+ path = get_path(name)
37
+
38
+ open_gem(path) if path
39
+ end
40
+
41
+ def get_path(name)
42
+ dep = Gem::Dependency.new name, options[:version]
43
+ specs = Gem.source_index.search dep
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
+
57
+ end
58
+ end
59
+
60
+ def open_gem(path)
61
+ editor = options[:command] || ENV['GEM_OPEN_EDITOR'] || ENV['EDITOR']
62
+ if !editor
63
+ say "Either set $EDITOR, or use -c <command_name>"
64
+ else
65
+ command_parts = Shellwords.shellwords(editor)
66
+ command_parts << path
67
+ success = system(*command_parts)
68
+ if !success
69
+ raise Gem::CommandLineError, "Could not run '#{editor} #{path}', exit code: #{$?.exitstatus}"
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems/command_manager'
2
+
3
+ Gem::CommandManager.instance.register_command :open
@@ -0,0 +1,41 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'mocha'
4
+
5
+ require 'rubygems/commands/open_command'
6
+ require 'rubygems/exceptions'
7
+
8
+ class Test_SomethingToTest < Test::Unit::TestCase
9
+ def setup
10
+ end
11
+
12
+ def test_opening_path
13
+ gem_name = 'neat_gem'
14
+ gem_path = 'some/path'
15
+ command = Gem::Commands::OpenCommand.new
16
+
17
+ command.expects(:get_path).with(gem_name).returns(gem_path)
18
+ command.expects(:open_gem).with(gem_path)
19
+
20
+ command.invoke(gem_name)
21
+ end
22
+
23
+ def test_opening_nonexistent_path
24
+ gem_name = 'neat_gem'
25
+ gem_path = nil
26
+ command = Gem::Commands::OpenCommand.new
27
+
28
+ command.expects(:get_path).with(gem_name).returns(gem_path)
29
+ command.expects(:open_gem).never
30
+
31
+ command.invoke(gem_name)
32
+ end
33
+
34
+ def test_opening_with_no_gem_name
35
+ command = Gem::Commands::OpenCommand.new
36
+
37
+ assert_raises Gem::CommandLineError do
38
+ command.invoke()
39
+ end
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: open_gem
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Sanderson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-02 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: mocha
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.5
24
+ version:
25
+ description: " Open a gem's source directory with either the default editor, or a specified command.\n"
26
+ email: netghost@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README.markdown
33
+ files:
34
+ - README.markdown
35
+ - Rakefile
36
+ - VERSION.yml
37
+ - lib/rubygems/commands/open_command.rb
38
+ - lib/rubygems_plugin.rb
39
+ - test/open_command_test.rb
40
+ has_rdoc: false
41
+ homepage: http://github.com/adamsanderson/open_gem
42
+ licenses: []
43
+
44
+ post_install_message:
45
+ rdoc_options:
46
+ - --charset=UTF-8
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.3.2
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Gem Command to easily open a ruby gem with the editor of your choice.
68
+ test_files:
69
+ - test/open_command_test.rb