gem-search 0.1.9 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +17 -0
- data/CHANGELOG.md +7 -2
- data/Gemfile +2 -2
- data/README.md +2 -3
- data/Rakefile +1 -1
- data/lib/gem_search.rb +2 -2
- data/lib/gem_search/command_builder.rb +1 -1
- data/lib/gem_search/commands/base.rb +14 -0
- data/lib/gem_search/commands/browse.rb +23 -7
- data/lib/gem_search/commands/run.rb +35 -23
- data/lib/gem_search/rendering.rb +0 -4
- data/lib/gem_search/request.rb +50 -0
- data/lib/gem_search/utils/system_util.rb +1 -1
- data/lib/gem_search/version.rb +1 -1
- data/spec/commands/browse_spec.rb +38 -3
- data/spec/commands/run_spec.rb +147 -34
- data/spec/helpers.rb +7 -0
- data/spec/helpers/dummy_data.rb +203 -0
- data/spec/request_spec.rb +6 -0
- data/spec/spec_helper.rb +6 -85
- metadata +10 -5
- data/lib/gem_search/executor.rb +0 -79
- data/spec/executor_spec.rb +0 -289
data/spec/executor_spec.rb
DELETED
@@ -1,289 +0,0 @@
|
|
1
|
-
include GemSearch
|
2
|
-
|
3
|
-
RSpec.describe Executor do
|
4
|
-
let(:executor) { Executor.new }
|
5
|
-
|
6
|
-
describe '#search' do
|
7
|
-
context 'when a network error occurred' do
|
8
|
-
before do
|
9
|
-
stub_request(:get, build_search_uri(query, 1))
|
10
|
-
.to_return(status: 500, body: '[]')
|
11
|
-
end
|
12
|
-
let(:query) { 'network_error_orccurred' }
|
13
|
-
it { expect { executor.search(query) }.to raise_error(Exception) }
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'when no matching gem' do
|
17
|
-
before { stub_request_search_no_result_with_page(query, 1) }
|
18
|
-
let(:query) { 'no_match_gem_name' }
|
19
|
-
it { expect { executor.search(query, default_opts) }.to raise_error(LibraryNotFound) }
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'with no-homepage' do
|
23
|
-
before do
|
24
|
-
stub_request_search(query, 1, dummy_search_result)
|
25
|
-
stub_request_search_no_result_with_page(query, 2)
|
26
|
-
end
|
27
|
-
let(:query) { 'factory_girl' }
|
28
|
-
|
29
|
-
context 'with no sort option' do
|
30
|
-
it 'display rubygems ordering by DL(all)' do
|
31
|
-
res = <<-'EOS'.unindent
|
32
|
-
|Searching .
|
33
|
-
|NAME DL(ver) DL(all)
|
34
|
-
|-------------------------------------------------- -------- ---------
|
35
|
-
|factory_girl (3.6.0) 541 2042859
|
36
|
-
|factory_girl_rails (3.5.0) 39724 1238780
|
37
|
-
|factory_girl_generator (0.0.3) 8015 15547
|
38
|
-
EOS
|
39
|
-
expect { executor.search(query, default_opts(has_homepage: false)) }.to output(res).to_stdout
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe 'sorting' do
|
45
|
-
before do
|
46
|
-
stub_request_search(query, 1, dummy_search_result)
|
47
|
-
stub_request_search_no_result_with_page(query, 2)
|
48
|
-
end
|
49
|
-
let(:query) { 'factory_girl' }
|
50
|
-
|
51
|
-
context 'with no sort option' do
|
52
|
-
it 'display rubygems ordering by DL(all)' do
|
53
|
-
res = <<-'EOS'.unindent
|
54
|
-
|Searching .
|
55
|
-
|NAME DL(ver) DL(all) HOMEPAGE
|
56
|
-
|-------------------------------------------------- -------- --------- ------------------------------------------------------------
|
57
|
-
|factory_girl (3.6.0) 541 2042859 https://github.com/thoughtbot/factory_girl
|
58
|
-
|factory_girl_rails (3.5.0) 39724 1238780 http://github.com/thoughtbot/factory_girl_rails
|
59
|
-
|factory_girl_generator (0.0.3) 8015 15547 http://github.com/leshill/factory_girl_generator
|
60
|
-
EOS
|
61
|
-
expect { executor.search(query, default_opts) }.to output(res).to_stdout
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'with sort option: [a]download' do
|
66
|
-
it 'display rubygems ordering by DL(all)' do
|
67
|
-
res = <<-'EOS'.unindent
|
68
|
-
|Searching .
|
69
|
-
|NAME DL(ver) DL(all) HOMEPAGE
|
70
|
-
|-------------------------------------------------- -------- --------- ------------------------------------------------------------
|
71
|
-
|factory_girl (3.6.0) 541 2042859 https://github.com/thoughtbot/factory_girl
|
72
|
-
|factory_girl_rails (3.5.0) 39724 1238780 http://github.com/thoughtbot/factory_girl_rails
|
73
|
-
|factory_girl_generator (0.0.3) 8015 15547 http://github.com/leshill/factory_girl_generator
|
74
|
-
EOS
|
75
|
-
expect { executor.search(query, default_opts) }.to output(res).to_stdout
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context 'with sort option: [v]version_downloads' do
|
80
|
-
it 'display rubygems ordering by DL(ver)' do
|
81
|
-
res = <<-'EOS'.unindent
|
82
|
-
|Searching .
|
83
|
-
|NAME DL(ver) DL(all) HOMEPAGE
|
84
|
-
|-------------------------------------------------- -------- --------- ------------------------------------------------------------
|
85
|
-
|factory_girl_rails (3.5.0) 39724 1238780 http://github.com/thoughtbot/factory_girl_rails
|
86
|
-
|factory_girl_generator (0.0.3) 8015 15547 http://github.com/leshill/factory_girl_generator
|
87
|
-
|factory_girl (3.6.0) 541 2042859 https://github.com/thoughtbot/factory_girl
|
88
|
-
EOS
|
89
|
-
expect { executor.search(query, default_opts(sort: 'version_downloads')) }.to output(res).to_stdout
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context 'with sort option: [n]ame' do
|
94
|
-
it 'display rubygems ordering by name' do
|
95
|
-
res = <<-'EOS'.unindent
|
96
|
-
|Searching .
|
97
|
-
|NAME DL(ver) DL(all) HOMEPAGE
|
98
|
-
|-------------------------------------------------- -------- --------- ------------------------------------------------------------
|
99
|
-
|factory_girl (3.6.0) 541 2042859 https://github.com/thoughtbot/factory_girl
|
100
|
-
|factory_girl_generator (0.0.3) 8015 15547 http://github.com/leshill/factory_girl_generator
|
101
|
-
|factory_girl_rails (3.5.0) 39724 1238780 http://github.com/thoughtbot/factory_girl_rails
|
102
|
-
EOS
|
103
|
-
expect { executor.search(query, default_opts(sort: 'name')) }.to output(res).to_stdout
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
describe 'multiple page' do
|
109
|
-
before do
|
110
|
-
stub_request_search(query, 1, load_http_stubs('search/cucumber-_1.json'))
|
111
|
-
stub_request_search(query, 2, load_http_stubs('search/cucumber-_2.json'))
|
112
|
-
stub_request_search(query, 3, load_http_stubs('search/cucumber-_3.json'))
|
113
|
-
stub_request_search_no_result_with_page(query, 4)
|
114
|
-
end
|
115
|
-
let(:query) { 'cucumber-' }
|
116
|
-
it 'display rubygems ordering by name' do
|
117
|
-
res = <<-'EOS'.unindent
|
118
|
-
|Searching ...
|
119
|
-
|NAME DL(ver) DL(all) HOMEPAGE
|
120
|
-
|-------------------------------------------------- -------- --------- ------------------------------------------------------------
|
121
|
-
|autotest-cucumber-notification (0.0.6) 1027 3607 https://github.com/evrone/autotest-cucumber-notification
|
122
|
-
|calabash-cucumber-cn (0.0.6) 88 88 http://github.com/cpunion/calabash-cucumber-cn
|
123
|
-
|cucumber-ajaxer (0.0.4) 1875 4966 http://github.com/chalofa/cucumber-ajaxer
|
124
|
-
|cucumber-api-steps (0.13) 1783 36587 http://github.com/jayzes/cucumber-api-steps
|
125
|
-
|cucumber-blanket (0.3.0) 324 1674 https://github.com/keyvanfatehi/cucumber-blanket
|
126
|
-
|cucumber-cafe (0.0.1) 295 295
|
127
|
-
|cucumber-chef (3.0.8) 1545 28881 http://www.cucumber-chef.org
|
128
|
-
|cucumber-cinema (0.8.0) 1309 9294 http://github.com/ilyakatz/cucumber-cinema
|
129
|
-
|cucumber-core (0.2.0) 316 683 http://cukes.info
|
130
|
-
|cucumber-core (0.2.0) 316 683 http://cukes.info
|
131
|
-
|cucumber-debug (0.0.1) 1702 1702
|
132
|
-
|cucumber-en_snippet (0.0.2) 295 565 https://github.com/mtsmfm/cucumber-en_snippet
|
133
|
-
|cucumber-farmer (1.0.3) 1573 4398 http://github.com/mattscilipoti/cucumber-farmer
|
134
|
-
|cucumber-formatter-oneline (0.1.0) 413 413
|
135
|
-
|cucumber-in-the-yard (1.7.8) 2107 33260 http://github.com/burtlo/Cucumber-In-The-Yard
|
136
|
-
|cucumber-java (0.0.2) 2113 3656 http://cukes.info
|
137
|
-
|cucumber-jira (0.0.1.beta) 166 166 https://github.com/ipwnstuff/cucumber-jira
|
138
|
-
|cucumber-json (0.0.2) 2199 3697 http://github.com/jnewland/cucumber-json
|
139
|
-
|cucumber-jvm (1.1.6) 204 20913 http://github.com/cucumber/cucumber-jvm
|
140
|
-
|cucumber-loggly (0.3.1) 903 4869 https://github.com/brettweavnet/cucumber-loggly
|
141
|
-
|cucumber-mingle (1.0.0) 1539 1539
|
142
|
-
|cucumber-nagios (0.9.2) 27094 75277 http://cucumber-nagios.org/
|
143
|
-
|cucumber-nc (0.0.2) 162 1362 https://github.com/MrJoy/cucumber-nc
|
144
|
-
|cucumber-newrelic (0.0.2) 1694 3201 http://github.com/jnewland/cucumber-newrelic
|
145
|
-
|cucumber-notify (0.0.5) 1168 3348 https://github.com/argent-smith/autotest-cucumber-notification/tree/deprecated
|
146
|
-
|cucumber-openerpscenario (0.1.9.1) 1110 11064
|
147
|
-
|cucumber-peel (0.0.1) 1000 1000 https://github.com/testdouble/cucumber-peel
|
148
|
-
|cucumber-pride (0.0.2) 1272 2321 https://github.com/pvdb/cucumber-pride
|
149
|
-
|cucumber-profiler (1.0.0) 1171 1171 https://github.com/mblum14/cucumber-profiler
|
150
|
-
|cucumber-puppet (0.3.7) 2974 24374 http://projects.puppetlabs.com/projects/cucumber-puppet
|
151
|
-
|cucumber-rails (1.4.0) 286328 2700475 http://cukes.info
|
152
|
-
|cucumber-rails-training-wheels (1.0.0) 109001 109001 http://cukes.info
|
153
|
-
|cucumber-rails2 (0.3.5) 10776 13172 https://github.com/Vanuan/cucumber-rails
|
154
|
-
|cucumber-rapid7 (0.0.1.beta.1) 101 430 https://github.com/ecarey-r7/cucumber-rapid7
|
155
|
-
|cucumber-rapid7 (0.0.1.beta.1) 101 430 https://github.com/ecarey-r7/cucumber-rapid7
|
156
|
-
|cucumber-relizy (0.0.2) 1433 2502 https://github.com/wynst/cucumber-relizy
|
157
|
-
|cucumber-salad (0.4.0) 488 5326 https://github.com/mojotech/cucumber-salad
|
158
|
-
|cucumber-salad (0.4.0) 488 5326 https://github.com/mojotech/cucumber-salad
|
159
|
-
|cucumber-scout (0.0.2) 1634 3124 http://github.com/jnewland/cucumber-scout
|
160
|
-
|cucumber-screenshot (0.3.4) 2241 15704 http://github.com/mocoso/cucumber-screenshot
|
161
|
-
|cucumber-selenium-standalone (0.0.3) 1322 3593 http://github.com/techwhizbang/cucumber-selenium-standalone
|
162
|
-
|cucumber-sinatra (0.5.0) 8463 28042 http://github.com/bernd/cucumber-sinatra
|
163
|
-
|cucumber-slice (0.0.2) 629 1199 https://github.com/testdouble/cucumber-slice
|
164
|
-
|cucumber-slices (0.0.4) 172 649 http://github.com/psytau/cucumber-slices
|
165
|
-
|cucumber-sshd (0.1.0) 152 152 https://rubygems.org/gems/cucumber-sshd
|
166
|
-
|cucumber-standalone (0.0.1) 1665 1665 http://github.com/jnewland/cucumber-standalone
|
167
|
-
|cucumber-step_writer (0.1.2) 1251 3229
|
168
|
-
|cucumber-table (0.0.1) 527 527
|
169
|
-
|cucumber-the (1.0.0) 1209 1209
|
170
|
-
|cucumber-timecop (0.0.3) 445 820 https://github.com/zedtux/cucumber-timecop
|
171
|
-
|cucumber-timed_formatter (0.1.1) 1066 2165 http://github.com/kronn/cucumber-timed_formatter
|
172
|
-
|cucumber-to-rally (0.1.3) 1001 3894
|
173
|
-
|cucumber-usual_suspects (0.0.1) 1378 1378 http://github.com/mattwynne/cucumber-usual_suspects
|
174
|
-
|cucumber-value (0.0.1) 1233 1233 https://github.com/hatofmonkeys/cucumber-value
|
175
|
-
|cucumber-vimscript (0.0.3) 1097 3316 http://github.com/AndrewRadev/cucumber-vimscript
|
176
|
-
|cucumber-voip (0.1.0) 1244 1244 https://github.com/benlangfeld/cucumber-voip
|
177
|
-
|cucumber-websteps (0.10.0) 18583 22129 http://relishapp.com/kucaahbe/cucumber-websteps
|
178
|
-
|cucumber-wordpress (1.3.1) 1346 7458 http://github.com/dxw/cucumber-wordpress
|
179
|
-
|guard-cucumber-js (0.0.2) 1039 1935
|
180
|
-
|mattscilipoti-cucumber-rails (0.2.4.2) 1394 3989 http://github.com/aslakhellesoy/cucumber-rails
|
181
|
-
|mattscilipoti_cucumber-rails (0.2.4) 1401 1401 http://github.com/aslakhellesoy/cucumber-rails
|
182
|
-
|tasty-cucumber-client (0.1.10) 1504 11518 http://tasty-cucumber.com
|
183
|
-
|vagrant-cucumber-host (0.1.14) 163 163
|
184
|
-
EOS
|
185
|
-
expect { executor.search(query, default_opts(sort: 'name')) }.to output(res).to_stdout
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
describe 'ruled NAME line' do
|
190
|
-
context 'NAME size is 42' do
|
191
|
-
before do
|
192
|
-
stub_request_search(query, 1, dummy_search_result_name_size_is_42)
|
193
|
-
stub_request_search_no_result_with_page(query, 2)
|
194
|
-
end
|
195
|
-
let(:query) { 'size_is_42_2345678901234567890123456789012' }
|
196
|
-
it 'is 50 characters' do
|
197
|
-
res = <<-'EOS'.unindent
|
198
|
-
|Searching .
|
199
|
-
|NAME DL(ver) DL(all) HOMEPAGE
|
200
|
-
|-------------------------------------------------- -------- --------- ------------------------------------------------------------
|
201
|
-
|size_is_42_2345678901234567890123456789012 (0.0.1) 100 1000
|
202
|
-
EOS
|
203
|
-
expect { executor.search(query, default_opts) }.to output(res).to_stdout
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
context 'NAME size is 43' do
|
208
|
-
before do
|
209
|
-
stub_request_search(query, 1, dummy_search_result_name_size_is_43)
|
210
|
-
stub_request_search_no_result_with_page(query, 2)
|
211
|
-
end
|
212
|
-
let(:query) { 'size_is_43_23456789012345678901234567890123' }
|
213
|
-
it 'is 51 characters' do
|
214
|
-
res = <<-'EOS'.unindent
|
215
|
-
|Searching .
|
216
|
-
|NAME DL(ver) DL(all) HOMEPAGE
|
217
|
-
|--------------------------------------------------- -------- --------- ------------------------------------------------------------
|
218
|
-
|size_is_43_23456789012345678901234567890123 (0.0.2) 200 2000
|
219
|
-
EOS
|
220
|
-
expect { executor.search(query, default_opts) }.to output(res).to_stdout
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
describe '#browse' do
|
227
|
-
context 'when a network error occurred' do
|
228
|
-
before do
|
229
|
-
stub_request(:get, build_gems_uri(query))
|
230
|
-
.to_return(status: 500, body: '[]')
|
231
|
-
end
|
232
|
-
let(:query) { 'network_error_orccurred' }
|
233
|
-
it { expect { executor.browse(query) }.to raise_error(Exception) }
|
234
|
-
end
|
235
|
-
|
236
|
-
context 'when no matching gem' do
|
237
|
-
before { stub_request_gems_no_result(query) }
|
238
|
-
let(:query) { 'no_match_gem_name' }
|
239
|
-
it { expect { executor.browse(query) }.to raise_error(OpenURI::HTTPError) }
|
240
|
-
end
|
241
|
-
|
242
|
-
context 'when no homepage_uri' do
|
243
|
-
before do
|
244
|
-
url = Executor::GEM_URL % query
|
245
|
-
allow(executor).to receive(:system).with(anything, url)
|
246
|
-
stub_request_gems(query, load_http_stubs("gems/#{query}.json"))
|
247
|
-
end
|
248
|
-
let(:query) { 'git-trend_no_homepage' }
|
249
|
-
|
250
|
-
it 'open a rubygems url' do
|
251
|
-
executor.browse(query)
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
context 'when homepage_uri is existed' do
|
256
|
-
before do
|
257
|
-
http_stub = load_http_stubs("gems/#{query}.json")
|
258
|
-
url = JSON.parse(http_stub)['homepage_uri']
|
259
|
-
allow(executor).to receive(:system).with(anything, url)
|
260
|
-
stub_request_gems(query, http_stub)
|
261
|
-
end
|
262
|
-
let(:query) { 'git-trend' }
|
263
|
-
|
264
|
-
it 'open a homepage url' do
|
265
|
-
executor.browse(query)
|
266
|
-
end
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
private
|
271
|
-
|
272
|
-
def dummy_search_result_name_size_is_42
|
273
|
-
[{
|
274
|
-
'name' => 'size_is_42_2345678901234567890123456789012',
|
275
|
-
'downloads' => 1000,
|
276
|
-
'version' => '0.0.1',
|
277
|
-
'version_downloads' => 100
|
278
|
-
}].to_json
|
279
|
-
end
|
280
|
-
|
281
|
-
def dummy_search_result_name_size_is_43
|
282
|
-
[{
|
283
|
-
'name' => 'size_is_43_23456789012345678901234567890123',
|
284
|
-
'downloads' => 2000,
|
285
|
-
'version' => '0.0.2',
|
286
|
-
'version_downloads' => 200
|
287
|
-
}].to_json
|
288
|
-
end
|
289
|
-
end
|