gem_locate 0.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/LICENSE +20 -0
- data/README.textile +57 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/lib/commands/locate.rb +66 -0
- data/lib/gem_extension/source_index.rb +49 -0
- data/lib/rubygems_plugin.rb +10 -0
- metadata +80 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Kabari Hendrick
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.textile
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
h1. Gem Locate
|
2
|
+
|
3
|
+
Searches gems by name, summary, and description in case you want to find a gem by what it is doing rather than it's name. Currently this only searches your *local* gems.
|
4
|
+
|
5
|
+
_I think someone made something like this before...but I couldn't find it_
|
6
|
+
|
7
|
+
h2. Install
|
8
|
+
|
9
|
+
@[sudo] gem install gem_locate@
|
10
|
+
|
11
|
+
h2. Usage
|
12
|
+
|
13
|
+
pre.. $ gem help locate
|
14
|
+
Usage: gem locate [STRING] [options]
|
15
|
+
Options:
|
16
|
+
-i, --[no-]installed Check for installed gem
|
17
|
+
-v, --version VERSION Specify version of gem to locate
|
18
|
+
-n, --name-matches REGEXP Name of gem(s) to query on matches the
|
19
|
+
provided REGEXP
|
20
|
+
-d, --[no-]details Display detailed information of gem(s)
|
21
|
+
--[no-]versions Display only gem names
|
22
|
+
-a, --all Display all gem versions
|
23
|
+
--prerelease Display prerelease versions
|
24
|
+
|
25
|
+
Local/Remote Options:
|
26
|
+
-l, --local Restrict operations to the LOCAL domain
|
27
|
+
-B, --bulk-threshold COUNT Threshold for switching to bulk
|
28
|
+
synchronization (default 1000)
|
29
|
+
|
30
|
+
Common Options:
|
31
|
+
-h, --help Get help on this command
|
32
|
+
-V, --[no-]verbose Set the verbose level of output
|
33
|
+
-q, --quiet Silence commands
|
34
|
+
--config-file FILE Use this config file instead of default
|
35
|
+
--backtrace Show stack backtrace on errors
|
36
|
+
--debug Turn on Ruby debugging
|
37
|
+
|
38
|
+
Arguments:
|
39
|
+
STRING fragment of gem name,summary, or description to search for
|
40
|
+
|
41
|
+
Summary:
|
42
|
+
Find all gems whose name, summary, or description match STRING
|
43
|
+
|
44
|
+
Defaults:
|
45
|
+
--local
|
46
|
+
|
47
|
+
h1. Note on Patches/Pull Requests
|
48
|
+
|
49
|
+
* Fork the project.
|
50
|
+
* Make your feature addition or bug fix.
|
51
|
+
* Commit, do not mess with rakefile, version, or history.
|
52
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
53
|
+
* Send me a pull request :)
|
54
|
+
|
55
|
+
h1. Copyright
|
56
|
+
|
57
|
+
Copyright (c) 2010 Kabari Hendrick. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "gem_locate"
|
8
|
+
gem.summary = %Q{Same as 'gem search' but search description and summary also}
|
9
|
+
gem.description = %Q{Searches gems by name, summary, and description in case you want to find a gem by what it is doing rather than it's name.}
|
10
|
+
gem.email = "kabari@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/kabari/gem_locate"
|
12
|
+
gem.authors = ["Kabari Hendrick"]
|
13
|
+
gem.files = FileList["lib/rubygems_plugin.rb",
|
14
|
+
"lib/commands/locate.rb",
|
15
|
+
"lib/gem_extension/source_index.rb",
|
16
|
+
"README.rdoc",
|
17
|
+
"LICENSE",
|
18
|
+
"VERSION",
|
19
|
+
"Rakefile"]
|
20
|
+
gem.test_files = []
|
21
|
+
gem.executables = []
|
22
|
+
gem.required_rubygems_version = Gem::Requirement.new(">= 1.3.5") if gem.respond_to? :required_rubygems_version=
|
23
|
+
gem.post_install_message = <<MESSAGE
|
24
|
+
|
25
|
+
========================================================================
|
26
|
+
|
27
|
+
Thanks for installing Gem Locate! You can now run:
|
28
|
+
|
29
|
+
gem locate STRING Same as 'gem search' but search description and summary also
|
30
|
+
|
31
|
+
========================================================================
|
32
|
+
|
33
|
+
MESSAGE
|
34
|
+
|
35
|
+
gem.add_development_dependency "yard", ">= 0"
|
36
|
+
end
|
37
|
+
Jeweler::GemcutterTasks.new
|
38
|
+
rescue LoadError
|
39
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
40
|
+
end
|
41
|
+
|
42
|
+
task :default => :check_dependencies
|
43
|
+
|
44
|
+
begin
|
45
|
+
require 'yard'
|
46
|
+
YARD::Rake::YardocTask.new
|
47
|
+
rescue LoadError
|
48
|
+
task :yardoc do
|
49
|
+
abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
|
50
|
+
end
|
51
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.5.0
|
@@ -0,0 +1,66 @@
|
|
1
|
+
class Gem::Commands::LocateCommand < Gem::Commands::QueryCommand
|
2
|
+
def initialize
|
3
|
+
super 'locate', 'Find all gems whose name, summary, or description match STRING'
|
4
|
+
|
5
|
+
%w(-r -b --source -p -u).each{|com| remove_option com }
|
6
|
+
end
|
7
|
+
|
8
|
+
def arguments # :nodoc:
|
9
|
+
"STRING fragment of gem name,summary, or description to search for"
|
10
|
+
end
|
11
|
+
|
12
|
+
def defaults_str # :nodoc:
|
13
|
+
"--local"
|
14
|
+
end
|
15
|
+
|
16
|
+
def usage # :nodoc:
|
17
|
+
"#{program_name} [STRING]"
|
18
|
+
end
|
19
|
+
|
20
|
+
def execute
|
21
|
+
string = get_one_optional_argument
|
22
|
+
options[:name] = /#{string}/i
|
23
|
+
exit_code = 0
|
24
|
+
|
25
|
+
name = options[:name]
|
26
|
+
prerelease = options[:prerelease]
|
27
|
+
|
28
|
+
if options[:installed] then
|
29
|
+
if name.source.empty? then
|
30
|
+
alert_error "You must specify a gem name"
|
31
|
+
exit_code |= 4
|
32
|
+
elsif installed? name, options[:version] then
|
33
|
+
say "true"
|
34
|
+
else
|
35
|
+
say "false"
|
36
|
+
exit_code |= 1
|
37
|
+
end
|
38
|
+
|
39
|
+
raise Gem::SystemExitException, exit_code
|
40
|
+
end
|
41
|
+
|
42
|
+
dep = Gem::Dependency.new name, Gem::Requirement.default
|
43
|
+
|
44
|
+
if prerelease and not both? then
|
45
|
+
alert_warning "prereleases are always shown locally"
|
46
|
+
end
|
47
|
+
|
48
|
+
if ui.outs.tty? or both? then
|
49
|
+
say
|
50
|
+
say "*** LOCAL GEMS ***"
|
51
|
+
say
|
52
|
+
end
|
53
|
+
|
54
|
+
specs = Gem.source_index.locate dep
|
55
|
+
|
56
|
+
spec_tuples = specs.map do |spec|
|
57
|
+
[[spec.name, spec.version, spec.original_platform, spec], :local]
|
58
|
+
end
|
59
|
+
|
60
|
+
output_query_results spec_tuples
|
61
|
+
|
62
|
+
# TODO support remote gem search
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
class Gem::SourceIndex
|
2
|
+
|
3
|
+
# This is basically the same as Gem::SourceIndex.search
|
4
|
+
def locate(gem_pattern, platform_only = false)
|
5
|
+
version_requirement = nil
|
6
|
+
only_platform = false
|
7
|
+
|
8
|
+
# TODO - Remove support and warning for legacy arguments after 2008/11
|
9
|
+
unless Gem::Dependency === gem_pattern
|
10
|
+
warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated, use #find_name"
|
11
|
+
end
|
12
|
+
|
13
|
+
case gem_pattern
|
14
|
+
when Regexp then
|
15
|
+
version_requirement = platform_only || Gem::Requirement.default
|
16
|
+
when Gem::Dependency then
|
17
|
+
only_platform = platform_only
|
18
|
+
version_requirement = gem_pattern.version_requirements
|
19
|
+
gem_pattern = if Regexp === gem_pattern.name then
|
20
|
+
gem_pattern.name
|
21
|
+
elsif gem_pattern.name.empty? then
|
22
|
+
//
|
23
|
+
else
|
24
|
+
/^#{Regexp.escape gem_pattern.name}$/
|
25
|
+
end
|
26
|
+
else
|
27
|
+
version_requirement = platform_only || Gem::Requirement.default
|
28
|
+
gem_pattern = /#{gem_pattern}/i
|
29
|
+
end
|
30
|
+
|
31
|
+
unless Gem::Requirement === version_requirement then
|
32
|
+
version_requirement = Gem::Requirement.create version_requirement
|
33
|
+
end
|
34
|
+
|
35
|
+
specs = all_gems.values.select do |spec|
|
36
|
+
if version_requirement.satisfied_by? spec.version
|
37
|
+
[spec.name, spec.description, spec.summary].detect{|q| (q =~ gem_pattern) if q }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
if only_platform then
|
42
|
+
specs = specs.select do |spec|
|
43
|
+
Gem::Platform.match spec.platform
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
specs.sort_by { |s| s.sort_obj }
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__) # For use/testing when no gem is installed
|
2
|
+
|
3
|
+
require 'rubygems/command_manager'
|
4
|
+
require 'rubygems/command'
|
5
|
+
require 'rubygems/commands/query_command'
|
6
|
+
|
7
|
+
require "commands/locate"
|
8
|
+
require "gem_extension/source_index"
|
9
|
+
# register gem command
|
10
|
+
Gem::CommandManager.instance.register_command :locate
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gem_locate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kabari Hendrick
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-11 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: yard
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: Searches gems by name, summary, and description in case you want to find a gem by what it is doing rather than it's name.
|
26
|
+
email: kabari@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- LICENSE
|
33
|
+
- README.textile
|
34
|
+
files:
|
35
|
+
- LICENSE
|
36
|
+
- Rakefile
|
37
|
+
- VERSION
|
38
|
+
- lib/commands/locate.rb
|
39
|
+
- lib/gem_extension/source_index.rb
|
40
|
+
- lib/rubygems_plugin.rb
|
41
|
+
- README.textile
|
42
|
+
has_rdoc: true
|
43
|
+
homepage: http://github.com/kabari/gem_locate
|
44
|
+
licenses: []
|
45
|
+
|
46
|
+
post_install_message: |+
|
47
|
+
|
48
|
+
========================================================================
|
49
|
+
|
50
|
+
Thanks for installing Gem Locate! You can now run:
|
51
|
+
|
52
|
+
gem locate STRING Same as 'gem search' but search description and summary also
|
53
|
+
|
54
|
+
========================================================================
|
55
|
+
|
56
|
+
rdoc_options:
|
57
|
+
- --charset=UTF-8
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.3.5
|
71
|
+
version:
|
72
|
+
requirements: []
|
73
|
+
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 1.3.5
|
76
|
+
signing_key:
|
77
|
+
specification_version: 3
|
78
|
+
summary: Same as 'gem search' but search description and summary also
|
79
|
+
test_files: []
|
80
|
+
|