gem-search 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +32 -0
- data/gem-search.gemspec +1 -0
- data/lib/gem_search/command.rb +9 -5
- data/lib/gem_search/executor.rb +14 -3
- data/lib/gem_search/rendering.rb +23 -8
- data/lib/gem_search/version.rb +1 -1
- data/spec/bin/gem_search_spec.rb +1 -0
- data/spec/command_spec.rb +2 -2
- data/spec/executor_spec.rb +35 -13
- data/spec/spec_helper.rb +7 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9f10dc591dfbf9e885007e8e2580719038dd36b
|
4
|
+
data.tar.gz: d62a21ea00f03fbfe5754d0d944d5acdbbc1d417
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a858c132709e646532309ded6096d6b12a3514a72316631705966684521a6796b6d202a68c975a0ac6599eff8d5cea3d76aa5962c78e5e4ba4c6654c9e84e3cf
|
7
|
+
data.tar.gz: 6f0d063bd87eee11f0f9b15f79bcdea9f64444e8e9e03818e437ff2fa934ee746cb41a081b64549476105d987750eb5313358c193d10315f88fda9adc855278e
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -83,6 +83,38 @@ gtk-webkit-ruby (0.0.3) 289 289
|
|
83
83
|
capybara-webkit-remote (0.0.4) 209 838
|
84
84
|
```
|
85
85
|
|
86
|
+
### Display Homepage URL
|
87
|
+
gem-search `keyword' -d
|
88
|
+
|
89
|
+
or
|
90
|
+
|
91
|
+
gem-search `keyword' --detail
|
92
|
+
|
93
|
+
e.g.:
|
94
|
+
```
|
95
|
+
$ gem-search webkit -d
|
96
|
+
NAME DL(ver) DL(all) HOMEPAGE
|
97
|
+
-------------------------------------------------- -------- --------- ------------------------------------------------------------
|
98
|
+
capybara-webkit (1.2.0) 11691 1291179 http://github.com/thoughtbot/capybara-webkit
|
99
|
+
jasmine-headless-webkit (0.8.4) 213767 273893
|
100
|
+
guard-jasmine-headless-webkit (0.3.2) 66446 80976
|
101
|
+
rspec-formatter-webkit (2.4.0) 1532 14984 http://deveiate.org/webkit-rspec-formatter.html
|
102
|
+
webkit_remote (0.5.5) 224 6111 http://github.com/pwnall/webkit_remote
|
103
|
+
webkit-gtk (2.2.0) 297 5571 http://ruby-gnome2.sourceforge.jp/
|
104
|
+
gtk-webkit-ruby (0.0.8) 716 4585 http://github.com/geoffyoungs/gtk-webkit-ruby
|
105
|
+
capybara-webkit-remote (0.0.4) 1206 4450 http://github.com/pettyjamesm/capybara-webkit-remote
|
106
|
+
intentmedia-capybara-webkit (0.7.2.4) 1155 4208 http://github.com/thoughtbot/capybara-webkit
|
107
|
+
webkit-gtk2 (2.2.0) 282 3976 http://ruby-gnome2.sourceforge.jp/
|
108
|
+
webkit-rspec-formatter (2.0.2) 1417 3614 http://deveiate.org/webkit-rspec-formatter.html
|
109
|
+
gtk_webkit_pdf (0.0.2.2) 698 3314 https://github.com/mohanraj-ramanujam/gtk_webkit_pdf
|
110
|
+
otherinbox-capybara-webkit (0.12.0.1) 2343 3145 http://github.com/thoughtbot/capybara-webkit
|
111
|
+
jasmine-headless-webkit-firstbanco (0.9.0.rc.4) 179 1591
|
112
|
+
webkit_remote_unstable (0.1.3) 222 1295 http://github.com/pwnall/webkit_remote_unstable
|
113
|
+
imseng-capybara-webkit (0.12.1) 549 549 http://github.com/imseng/capybara-webkit
|
114
|
+
bitium-capybara-webkit (1.1.1) 388 388 http://github.com/thoughtbot/capybara-webkit
|
115
|
+
node-webkit-bootstrap (1.0.0) 226 226 https://github.com/audiosocket/node-webkit-bootstrap
|
116
|
+
```
|
117
|
+
|
86
118
|
### Browse
|
87
119
|
It open rubygem's homepage in the system's default web browser.
|
88
120
|
|
data/gem-search.gemspec
CHANGED
@@ -33,6 +33,7 @@ Gem::Specification.new do |gem|
|
|
33
33
|
gem.add_dependency 'slop', '~>3.6.0'
|
34
34
|
gem.add_dependency 'json', '~>1.8.1'
|
35
35
|
|
36
|
+
# gem.add_development_dependency 'pry', '~>0.9.12.6'
|
36
37
|
gem.add_development_dependency 'webmock', '~>1.18.0'
|
37
38
|
gem.add_development_dependency 'rake', '~>10.3.1'
|
38
39
|
|
data/lib/gem_search/command.rb
CHANGED
@@ -24,6 +24,7 @@ module Gem::Search
|
|
24
24
|
' [v]er :DL(ver) eg. gem-search webkit -s v',
|
25
25
|
' [n]ame : eg. gem-search webkit -s n',
|
26
26
|
]), argument: :optional
|
27
|
+
on :d, :detail, 'Display homepage url of gem'
|
27
28
|
on :v, :version, 'Display the version.'
|
28
29
|
|
29
30
|
command 'browse' do
|
@@ -51,11 +52,7 @@ module Gem::Search
|
|
51
52
|
validate
|
52
53
|
|
53
54
|
gs = Executor.new
|
54
|
-
|
55
|
-
gs.search(ARGV[0], ENABLE_SORT_OPT[OPTS['sort']])
|
56
|
-
else
|
57
|
-
gs.search(ARGV[0])
|
58
|
-
end
|
55
|
+
gs.search(ARGV[0], setup_opts)
|
59
56
|
rescue LibraryNotFound => e
|
60
57
|
puts e.message
|
61
58
|
abort
|
@@ -65,6 +62,13 @@ module Gem::Search
|
|
65
62
|
abort
|
66
63
|
end
|
67
64
|
|
65
|
+
def setup_opts
|
66
|
+
{
|
67
|
+
sort: ENABLE_SORT_OPT[OPTS['sort']] || 'downloads',
|
68
|
+
detail: OPTS.detail?
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
68
72
|
private
|
69
73
|
|
70
74
|
def version
|
data/lib/gem_search/executor.rb
CHANGED
@@ -11,7 +11,7 @@ module Gem::Search
|
|
11
11
|
|
12
12
|
MAX_REQUEST_COUNT = 20
|
13
13
|
|
14
|
-
def search(query,
|
14
|
+
def search(query, opts)
|
15
15
|
return unless query
|
16
16
|
print 'Searching '
|
17
17
|
gems = []
|
@@ -25,8 +25,8 @@ module Gem::Search
|
|
25
25
|
puts
|
26
26
|
|
27
27
|
fail Gem::Search::LibraryNotFound, 'We did not find results.' if gems.size.zero?
|
28
|
-
gems_sort!(gems,
|
29
|
-
Executor.render(gems)
|
28
|
+
gems_sort!(gems, opts[:sort])
|
29
|
+
Executor.render(gems, opts[:detail])
|
30
30
|
end
|
31
31
|
|
32
32
|
def browse(gem)
|
@@ -55,6 +55,17 @@ module Gem::Search
|
|
55
55
|
RbConfig::CONFIG['host_os'].to_s.include?('darwin')
|
56
56
|
end
|
57
57
|
|
58
|
+
def which(cmd)
|
59
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
60
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
61
|
+
exts.each { |ext|
|
62
|
+
exe = "#{path}/#{cmd}#{ext}"
|
63
|
+
return exe if File.executable? exe
|
64
|
+
}
|
65
|
+
end
|
66
|
+
return nil
|
67
|
+
end
|
68
|
+
|
58
69
|
def open_rubygems_api(url)
|
59
70
|
option = {}
|
60
71
|
proxy = URI.parse(url).find_proxy
|
data/lib/gem_search/rendering.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
module Gem::Search
|
2
2
|
module Rendering
|
3
|
-
|
3
|
+
# NAME', 'DL(ver)', 'DL(all)', 'HOMEPAGE'
|
4
|
+
DEFAULT_RULED_LINE_SIZE = [50, 8, 9, 60]
|
4
5
|
|
5
6
|
def self.included(base)
|
6
7
|
base.extend(self)
|
7
8
|
end
|
8
9
|
|
9
|
-
def render(gems)
|
10
|
+
def render(gems, opt_detail)
|
11
|
+
@opt_detail = opt_detail
|
10
12
|
ruled_line_size(gems)
|
11
13
|
render_to_header
|
12
14
|
render_to_body(gems)
|
@@ -15,26 +17,39 @@ module Gem::Search
|
|
15
17
|
private
|
16
18
|
|
17
19
|
def ruled_line_size(gems)
|
20
|
+
@ruled_line_size = DEFAULT_RULED_LINE_SIZE.dup
|
18
21
|
max_name_size = gems.map { |gem| "#{gem['name'] } (#{gem['version']})".size }.max
|
19
|
-
|
22
|
+
@ruled_line_size[0] = max_name_size if max_name_size > @ruled_line_size[0]
|
20
23
|
end
|
21
24
|
|
22
25
|
def render_to_header
|
23
|
-
f =
|
26
|
+
f = @ruled_line_size
|
24
27
|
fmt = "%-#{f[0]}s %#{f[1]}s %#{f[2]}s"
|
25
|
-
|
26
|
-
|
28
|
+
titles = ['NAME', 'DL(ver)', 'DL(all)']
|
29
|
+
hyphens = ['-'*f[0], '-'*f[1], '-'*f[2]]
|
30
|
+
if @opt_detail
|
31
|
+
fmt << " %-#{f[3]}s"
|
32
|
+
titles << 'HOMEPAGE'
|
33
|
+
hyphens << '-'*f[3]
|
34
|
+
end
|
35
|
+
|
36
|
+
puts fmt % titles
|
37
|
+
puts fmt % hyphens
|
27
38
|
end
|
28
39
|
|
29
40
|
def render_to_body(gems)
|
30
|
-
f =
|
41
|
+
f = @ruled_line_size
|
42
|
+
|
31
43
|
fmt = "%-#{f[0]}s %#{f[1]}d %#{f[2]}d"
|
44
|
+
fmt << " %-#{f[3]}s" if @opt_detail
|
32
45
|
gems.each do |gem|
|
33
|
-
|
46
|
+
columns = [
|
34
47
|
"#{gem['name']} (#{gem['version']})",
|
35
48
|
gem['version_downloads'],
|
36
49
|
gem['downloads']
|
37
50
|
]
|
51
|
+
columns << gem['homepage_uri'] if @opt_detail
|
52
|
+
puts fmt % columns
|
38
53
|
end
|
39
54
|
end
|
40
55
|
end
|
data/lib/gem_search/version.rb
CHANGED
data/spec/bin/gem_search_spec.rb
CHANGED
@@ -9,6 +9,7 @@ Usage: gem-search gem_name [options]
|
|
9
9
|
[a]ll :DL(all) eg. gem-search webkit -s a
|
10
10
|
[v]er :DL(ver) eg. gem-search webkit -s v
|
11
11
|
[n]ame : eg. gem-search webkit -s n
|
12
|
+
-d, --detail Display homepage url of gem
|
12
13
|
-v, --version Display the version.
|
13
14
|
-h, --help Display this help message.
|
14
15
|
|
data/spec/command_spec.rb
CHANGED
@@ -18,7 +18,7 @@ RSpec.describe Command do
|
|
18
18
|
allow(Command::OPTS).to receive(:[]).and_return(nil)
|
19
19
|
end
|
20
20
|
it 'called with no sort option' do
|
21
|
-
expect(@executor).to receive(:search).with(query).once
|
21
|
+
expect(@executor).to receive(:search).with(query, default_opts).once
|
22
22
|
Command.new.run
|
23
23
|
end
|
24
24
|
end
|
@@ -29,7 +29,7 @@ RSpec.describe Command do
|
|
29
29
|
allow(Command::OPTS).to receive(:[]).with('sort').and_return('a')
|
30
30
|
end
|
31
31
|
it 'called with sort option' do
|
32
|
-
expect(@executor).to receive(:search).with(query, 'downloads').once
|
32
|
+
expect(@executor).to receive(:search).with(query, default_opts(sort: 'downloads')).once
|
33
33
|
Command.new.run
|
34
34
|
end
|
35
35
|
end
|
data/spec/executor_spec.rb
CHANGED
@@ -20,7 +20,29 @@ RSpec.describe Executor do
|
|
20
20
|
context 'when no matching gem' do
|
21
21
|
before { stub_request_search_no_result_with_page(query, 1) }
|
22
22
|
let(:query) { 'no_match_gem_name' }
|
23
|
-
it { expect { @executor.search(query) }.to raise_error(LibraryNotFound) }
|
23
|
+
it { expect { @executor.search(query, default_opts) }.to raise_error(LibraryNotFound) }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'with detail' do
|
27
|
+
before do
|
28
|
+
stub_request_search(query, 1, dummy_search_result)
|
29
|
+
stub_request_search_no_result_with_page(query, 2)
|
30
|
+
end
|
31
|
+
let(:query) { 'factory_girl' }
|
32
|
+
|
33
|
+
context 'with no sort option' do
|
34
|
+
it 'display rubygems ordering by DL(all)' do
|
35
|
+
res = <<-'EOS'.unindent
|
36
|
+
|Searching ..
|
37
|
+
|NAME DL(ver) DL(all) HOMEPAGE
|
38
|
+
|-------------------------------------------------- -------- --------- ------------------------------------------------------------
|
39
|
+
|factory_girl (3.6.0) 541 2042859 https://github.com/thoughtbot/factory_girl
|
40
|
+
|factory_girl_rails (3.5.0) 39724 1238780 http://github.com/thoughtbot/factory_girl_rails
|
41
|
+
|factory_girl_generator (0.0.3) 8015 15547 http://github.com/leshill/factory_girl_generator
|
42
|
+
EOS
|
43
|
+
expect { @executor.search(query, default_opts(detail: true)) }.to output(res).to_stdout
|
44
|
+
end
|
45
|
+
end
|
24
46
|
end
|
25
47
|
|
26
48
|
describe 'sorting' do
|
@@ -31,7 +53,7 @@ RSpec.describe Executor do
|
|
31
53
|
let(:query) { 'factory_girl' }
|
32
54
|
|
33
55
|
context 'with no sort option' do
|
34
|
-
it 'display rubygems ordering by
|
56
|
+
it 'display rubygems ordering by DL(all)' do
|
35
57
|
res = <<-'EOS'.unindent
|
36
58
|
|Searching ..
|
37
59
|
|NAME DL(ver) DL(all)
|
@@ -40,12 +62,12 @@ RSpec.describe Executor do
|
|
40
62
|
|factory_girl_rails (3.5.0) 39724 1238780
|
41
63
|
|factory_girl_generator (0.0.3) 8015 15547
|
42
64
|
EOS
|
43
|
-
expect { @executor.search(query) }.to output(res).to_stdout
|
65
|
+
expect { @executor.search(query, default_opts) }.to output(res).to_stdout
|
44
66
|
end
|
45
67
|
end
|
46
68
|
|
47
69
|
context 'with sort option: [a]download' do
|
48
|
-
it 'display rubygems ordering by
|
70
|
+
it 'display rubygems ordering by DL(all)' do
|
49
71
|
res = <<-'EOS'.unindent
|
50
72
|
|Searching ..
|
51
73
|
|NAME DL(ver) DL(all)
|
@@ -54,12 +76,12 @@ RSpec.describe Executor do
|
|
54
76
|
|factory_girl_rails (3.5.0) 39724 1238780
|
55
77
|
|factory_girl_generator (0.0.3) 8015 15547
|
56
78
|
EOS
|
57
|
-
expect { @executor.search(query,
|
79
|
+
expect { @executor.search(query, default_opts) }.to output(res).to_stdout
|
58
80
|
end
|
59
81
|
end
|
60
82
|
|
61
83
|
context 'with sort option: [v]version_downloads' do
|
62
|
-
it 'display rubygems ordering by
|
84
|
+
it 'display rubygems ordering by DL(ver)' do
|
63
85
|
res = <<-'EOS'.unindent
|
64
86
|
|Searching ..
|
65
87
|
|NAME DL(ver) DL(all)
|
@@ -68,7 +90,7 @@ RSpec.describe Executor do
|
|
68
90
|
|factory_girl_generator (0.0.3) 8015 15547
|
69
91
|
|factory_girl (3.6.0) 541 2042859
|
70
92
|
EOS
|
71
|
-
expect { @executor.search(query, 'version_downloads') }.to output(res).to_stdout
|
93
|
+
expect { @executor.search(query, default_opts(sort: 'version_downloads')) }.to output(res).to_stdout
|
72
94
|
end
|
73
95
|
end
|
74
96
|
|
@@ -82,7 +104,7 @@ RSpec.describe Executor do
|
|
82
104
|
|factory_girl_generator (0.0.3) 8015 15547
|
83
105
|
|factory_girl_rails (3.5.0) 39724 1238780
|
84
106
|
EOS
|
85
|
-
expect { @executor.search(query, 'name') }.to output(res).to_stdout
|
107
|
+
expect { @executor.search(query, default_opts(sort: 'name')) }.to output(res).to_stdout
|
86
108
|
end
|
87
109
|
end
|
88
110
|
end
|
@@ -164,7 +186,7 @@ RSpec.describe Executor do
|
|
164
186
|
|tasty-cucumber-client (0.1.10) 1504 11518
|
165
187
|
|vagrant-cucumber-host (0.1.14) 163 163
|
166
188
|
EOS
|
167
|
-
expect { @executor.search(query, 'name') }.to output(res).to_stdout
|
189
|
+
expect { @executor.search(query, default_opts(sort: 'name')) }.to output(res).to_stdout
|
168
190
|
end
|
169
191
|
end
|
170
192
|
|
@@ -182,7 +204,7 @@ RSpec.describe Executor do
|
|
182
204
|
|-------------------------------------------------- -------- ---------
|
183
205
|
|size_is_42_2345678901234567890123456789012 (0.0.1) 100 1000
|
184
206
|
EOS
|
185
|
-
expect { @executor.search(query) }.to output(res).to_stdout
|
207
|
+
expect { @executor.search(query, default_opts) }.to output(res).to_stdout
|
186
208
|
end
|
187
209
|
end
|
188
210
|
|
@@ -199,7 +221,7 @@ RSpec.describe Executor do
|
|
199
221
|
|--------------------------------------------------- -------- ---------
|
200
222
|
|size_is_43_23456789012345678901234567890123 (0.0.2) 200 2000
|
201
223
|
EOS
|
202
|
-
expect { @executor.search(query) }.to output(res).to_stdout
|
224
|
+
expect { @executor.search(query, default_opts) }.to output(res).to_stdout
|
203
225
|
end
|
204
226
|
end
|
205
227
|
end
|
@@ -224,7 +246,7 @@ RSpec.describe Executor do
|
|
224
246
|
context 'when no homepage_uri' do
|
225
247
|
before do
|
226
248
|
url = Executor::GEM_URL % query
|
227
|
-
allow(@executor).to receive(:system).with(
|
249
|
+
allow(@executor).to receive(:system).with(anything(), url)
|
228
250
|
stub_request_gems(query, load_http_stubs("gems/#{query}.json"))
|
229
251
|
end
|
230
252
|
let(:query) { 'git-trend_no_homepage' }
|
@@ -238,7 +260,7 @@ RSpec.describe Executor do
|
|
238
260
|
before do
|
239
261
|
http_stub = load_http_stubs("gems/#{query}.json")
|
240
262
|
url = JSON.parse(http_stub)['homepage_uri']
|
241
|
-
allow(@executor).to receive(:system).with(
|
263
|
+
allow(@executor).to receive(:system).with(anything(), url)
|
242
264
|
stub_request_gems(query, http_stub)
|
243
265
|
end
|
244
266
|
let(:query) { 'git-trend' }
|
data/spec/spec_helper.rb
CHANGED
@@ -4,6 +4,7 @@ require 'simplecov'
|
|
4
4
|
SimpleCov.start
|
5
5
|
|
6
6
|
require 'webmock/rspec'
|
7
|
+
# require 'pry'
|
7
8
|
require 'gem_search'
|
8
9
|
|
9
10
|
RSpec.configure do |config|
|
@@ -117,6 +118,12 @@ def dummy_search_result
|
|
117
118
|
].to_json
|
118
119
|
end
|
119
120
|
|
121
|
+
def default_opts(merge_opts = nil)
|
122
|
+
opts = { sort: 'downloads', detail: false }
|
123
|
+
opts.merge!(merge_opts) if merge_opts
|
124
|
+
opts
|
125
|
+
end
|
126
|
+
|
120
127
|
class String
|
121
128
|
def unindent
|
122
129
|
gsub(/^\s+\|/, '')
|