gem-search 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.rspec +3 -0
- data/README.md +3 -0
- data/Rakefile +3 -9
- data/bin/gem-search +3 -33
- data/gem-search.gemspec +7 -6
- data/lib/gem-search.rb +9 -2
- data/lib/gem-search/command.rb +61 -0
- data/lib/gem-search/executor.rb +49 -0
- data/lib/gem-search/rendering.rb +42 -0
- data/lib/gem-search/version.rb +1 -1
- data/spec/bin/gem-search_spec.rb +6 -0
- data/spec/executor_spec.rb +293 -0
- data/spec/http_stubs/cucumber-_1.json +1 -0
- data/spec/http_stubs/cucumber-_2.json +1 -0
- data/spec/http_stubs/cucumber-_3.json +1 -0
- data/spec/spec_helper.rb +13 -0
- metadata +53 -42
- data/lib/gem-search/cli.rb +0 -79
- data/spec/cli_spec.rb +0 -197
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a808ed1d9a953aeb810b77ce422aa6540ae111dd
|
4
|
+
data.tar.gz: f3eaa15d3276792420103a670b318dc3ef90cc1d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4cae323278b375959825d1dcb76af2714327e8872e8ae50b03520ad0ad98e372fa18b68693dbf37b2e141547be8d873b191b767282fdc84feed2bc8055bb174f
|
7
|
+
data.tar.gz: 29c0b9ab724445931b78dee6753709294555ebfc91bea9ada7a822248f4977b804005f6779173c38864f5ccd2ec41f32bfc27d42d46724585ed27488f87c5a24
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/README.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
[![Build Status](https://secure.travis-ci.org/rochefort/gem-search.png)](http://travis-ci.org/rochefort/gem-search)
|
2
|
+
[![Dependency Status](https://gemnasium.com/rochefort/gem-search.png)](https://gemnasium.com/rochefort/gem-search)
|
3
|
+
[![Code Climate](https://codeclimate.com/github/rochefort/gem-search.png)](https://codeclimate.com/github/rochefort/gem-search)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/gem-search.svg)](http://badge.fury.io/rb/gem-search)
|
2
5
|
|
3
6
|
# gem-search
|
4
7
|
|
data/Rakefile
CHANGED
@@ -1,12 +1,6 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
|
-
require
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
3
5
|
|
4
6
|
task :default => [:spec]
|
5
|
-
begin
|
6
|
-
require 'rspec/core/rake_task'
|
7
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
8
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
9
|
-
spec.rspec_opts = ['-cfs']
|
10
|
-
end
|
11
|
-
rescue LoadError => e
|
12
|
-
end
|
data/bin/gem-search
CHANGED
@@ -1,36 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
def opt_description(msgs)
|
5
|
-
ind = ' ' * 22
|
6
|
-
msgs.inject { |rtn, msg| rtn << "\n#{ind}#{msg}" }
|
7
|
-
end
|
8
|
-
|
9
|
-
opts = Slop.parse(help: true) do
|
10
|
-
banner "Usage: gem-search gem_name [options]\n"
|
11
|
-
on :s, :sort, opt_description([
|
12
|
-
'Sort by the item.',
|
13
|
-
' [n]ame :default eg. gem-search webkit',
|
14
|
-
' [v]er :DL(ver) eg. gem-search webkit -s v',
|
15
|
-
' [a]ll :DL(all) eg. gem-search webkit -s a'
|
16
|
-
]), :argument => :optional
|
17
|
-
on :v, :version, 'Display the version.'
|
18
|
-
end
|
19
|
-
|
20
|
-
OPT_SORT = {
|
21
|
-
'v' => 'version_downloads',
|
22
|
-
'a' => 'downloads',
|
23
|
-
}
|
24
|
-
|
25
|
-
puts opts and exit if (ARGV.size == 0) && (!opts.to_hash.values.include?(true))
|
26
|
-
exit if opts['h']
|
27
|
-
|
28
|
-
$:.unshift File.dirname(__FILE__) + '/../lib'
|
2
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
29
3
|
require 'gem-search'
|
30
|
-
if opts['v']
|
31
|
-
puts "gem-search #{Gem::Search::VERSION}"
|
32
|
-
exit
|
33
|
-
end
|
34
4
|
|
35
|
-
|
36
|
-
|
5
|
+
Gem::Search::Command.new.run
|
6
|
+
|
data/gem-search.gemspec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
require File.expand_path('../lib/gem-search/version', __FILE__)
|
3
2
|
|
4
3
|
Gem::Specification.new do |gem|
|
@@ -15,10 +14,12 @@ Gem::Specification.new do |gem|
|
|
15
14
|
gem.require_paths = ["lib"]
|
16
15
|
gem.version = Gem::Search::VERSION
|
17
16
|
|
18
|
-
gem.add_dependency 'slop'
|
19
|
-
gem.add_dependency 'json'
|
17
|
+
gem.add_dependency 'slop', '~>3.5.0'
|
18
|
+
gem.add_dependency 'json', '~>1.8.1'
|
20
19
|
|
21
|
-
gem.add_development_dependency 'webmock'
|
22
|
-
gem.add_development_dependency 'rake',
|
23
|
-
|
20
|
+
gem.add_development_dependency 'webmock', '~>1.17.4'
|
21
|
+
gem.add_development_dependency 'rake', '~> 0.9.2.2'
|
22
|
+
|
23
|
+
gem.add_development_dependency 'rspec', '~> 2.14.1'
|
24
|
+
gem.add_development_dependency 'simplecov', '~> 0.8.2'
|
24
25
|
end
|
data/lib/gem-search.rb
CHANGED
@@ -1,2 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Gem
|
2
|
+
module Search
|
3
|
+
class LibraryNotFound < StandardError; end
|
4
|
+
autoload :Command , 'gem-search/command'
|
5
|
+
autoload :Executor , 'gem-search/executor'
|
6
|
+
autoload :Rendering, 'gem-search/rendering'
|
7
|
+
autoload :VERSION , 'gem-search/version'
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'slop'
|
2
|
+
|
3
|
+
class Slop
|
4
|
+
def opt_description(msgs)
|
5
|
+
ind = ' ' * 22
|
6
|
+
msgs.inject { |rtn, msg| rtn << "\n#{ind}#{msg}" }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Gem::Search
|
11
|
+
class Command
|
12
|
+
ENABLE_SORT_OPT = {
|
13
|
+
'v' => 'version_downloads',
|
14
|
+
'a' => 'downloads',
|
15
|
+
}
|
16
|
+
|
17
|
+
OPTS = Slop.parse(help: true) do
|
18
|
+
banner "Usage: gem-search gem_name [options]\n"
|
19
|
+
on :s, :sort, opt_description([
|
20
|
+
'Sort by the item.',
|
21
|
+
' [n]ame :default eg. gem-search webkit',
|
22
|
+
' [v]er :DL(ver) eg. gem-search webkit -s v',
|
23
|
+
' [a]ll :DL(all) eg. gem-search webkit -s a'
|
24
|
+
]), :argument => :optional
|
25
|
+
on :v, :version, 'Display the version.'
|
26
|
+
end
|
27
|
+
|
28
|
+
def run
|
29
|
+
version if OPTS['v']
|
30
|
+
validate
|
31
|
+
|
32
|
+
gs = Executor.new
|
33
|
+
gs.search(ARGV[0], ENABLE_SORT_OPT[OPTS['sort']])
|
34
|
+
rescue LibraryNotFound => e
|
35
|
+
puts e.message
|
36
|
+
abort
|
37
|
+
rescue => e
|
38
|
+
puts "An unexpected #{e.class} has occurred."
|
39
|
+
puts e.message
|
40
|
+
abort
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def version
|
45
|
+
puts "gem-search #{Gem::Search::VERSION}"
|
46
|
+
exit
|
47
|
+
end
|
48
|
+
|
49
|
+
def validate
|
50
|
+
if (ARGV.size == 0)
|
51
|
+
puts OPTS
|
52
|
+
abort
|
53
|
+
end
|
54
|
+
|
55
|
+
if ARGV.any? { |arg| arg.match(/\A-/) }
|
56
|
+
puts OPTS
|
57
|
+
exit
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module Gem::Search
|
5
|
+
class Executor
|
6
|
+
include Gem::Search::Rendering
|
7
|
+
BASE_URL = 'https://rubygems.org'
|
8
|
+
SEARCH_URL = "#{BASE_URL}/api/v1/search.json?query=%s&page=%d"
|
9
|
+
MAX_REQUEST_COUNT = 20
|
10
|
+
|
11
|
+
def search(query, opt_sort='name')
|
12
|
+
return unless query
|
13
|
+
|
14
|
+
print 'Searching '
|
15
|
+
gems = []
|
16
|
+
(1..MAX_REQUEST_COUNT).each do |n|
|
17
|
+
print '.'
|
18
|
+
url = SEARCH_URL % [query, n]
|
19
|
+
gems_by_page = search_rubygems(url)
|
20
|
+
break if gems_by_page.size.zero?
|
21
|
+
gems += gems_by_page
|
22
|
+
end
|
23
|
+
puts
|
24
|
+
|
25
|
+
raise Gem::Search::LibraryNotFound, 'We did not find results.' if gems.size.zero?
|
26
|
+
gems_sort!(gems, opt_sort)
|
27
|
+
Executor.render(gems)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def search_rubygems(url)
|
32
|
+
option = {}
|
33
|
+
proxy = URI.parse(url).find_proxy
|
34
|
+
if proxy && proxy.user && proxy.password
|
35
|
+
option[:proxy_http_basic_authentication] = [proxy, proxy.user, proxy.password]
|
36
|
+
end
|
37
|
+
JSON.parse(open(url, option).read)
|
38
|
+
end
|
39
|
+
|
40
|
+
def gems_sort!(gems, opt_sort)
|
41
|
+
if opt_sort == 'name'
|
42
|
+
gems.sort!{ |x,y| x[opt_sort] <=> y[opt_sort] }
|
43
|
+
else
|
44
|
+
gems.sort!{ |x,y| y[opt_sort] <=> x[opt_sort] }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Gem::Search
|
2
|
+
module Rendering
|
3
|
+
DEFAULT_RULED_LINE_SIZE = [50, 8, 9]
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(self)
|
7
|
+
end
|
8
|
+
|
9
|
+
def render(gems)
|
10
|
+
set_ruled_line_size(gems)
|
11
|
+
render_to_header
|
12
|
+
render_to_body(gems)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def set_ruled_line_size(gems)
|
17
|
+
max_name_size = gems.map { |gem| "#{gem['name'] } (#{gem['version']})".size }.max
|
18
|
+
if max_name_size > DEFAULT_RULED_LINE_SIZE[0]
|
19
|
+
DEFAULT_RULED_LINE_SIZE[0] = max_name_size
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def render_to_header
|
24
|
+
f=DEFAULT_RULED_LINE_SIZE
|
25
|
+
fmt = "%-#{f[0]}s %#{f[1]}s %#{f[2]}s"
|
26
|
+
puts fmt % ['NAME', 'DL(ver)', 'DL(all)']
|
27
|
+
puts fmt % ['-'*f[0], '-'*f[1], '-'*f[2]]
|
28
|
+
end
|
29
|
+
|
30
|
+
def render_to_body(gems)
|
31
|
+
f=DEFAULT_RULED_LINE_SIZE
|
32
|
+
fmt = "%-#{f[0]}s %#{f[1]}d %#{f[2]}d"
|
33
|
+
gems.each do |gem|
|
34
|
+
puts fmt % [
|
35
|
+
"#{gem['name']} (#{gem['version']})",
|
36
|
+
gem['version_downloads'],
|
37
|
+
gem['downloads']
|
38
|
+
]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/gem-search/version.rb
CHANGED
data/spec/bin/gem-search_spec.rb
CHANGED
@@ -30,6 +30,12 @@ describe 'bin/gem-search' do
|
|
30
30
|
it_behaves_like 'display an usage'
|
31
31
|
end
|
32
32
|
|
33
|
+
# non-exisitng option: -x
|
34
|
+
context 'with -x' do
|
35
|
+
subject { `#{BIN} -x` }
|
36
|
+
it_behaves_like 'display an usage'
|
37
|
+
end
|
38
|
+
|
33
39
|
context 'with -v' do
|
34
40
|
subject { `#{BIN} -v` }
|
35
41
|
it 'should display an usage' do
|
@@ -0,0 +1,293 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Gem::Search
|
4
|
+
|
5
|
+
describe Executor do
|
6
|
+
describe '#search' do
|
7
|
+
before do
|
8
|
+
@executor = Gem::Search::Executor.new
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'when a network error occurred' do
|
12
|
+
before do
|
13
|
+
stub_request(:get, build_search_uri(query, 1)).
|
14
|
+
to_return(:status => 500, :body => '[]')
|
15
|
+
end
|
16
|
+
let(:query) {'network_error_orccurred'}
|
17
|
+
it { expect{ @executor.search(query) }.to raise_error(Exception) }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when no matching gem' do
|
21
|
+
before { stub_request_no_result_with_page(1) }
|
22
|
+
let(:query) {'no_match_gem_name'}
|
23
|
+
it { expect{ @executor.search(query) }.to raise_error(LibraryNotFound) }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'sorting' do
|
27
|
+
before do
|
28
|
+
stub_request_search(1, dummy_search_result)
|
29
|
+
stub_request_no_result_with_page(2)
|
30
|
+
end
|
31
|
+
let(:query) {'factory_girl'}
|
32
|
+
|
33
|
+
context 'with no sort option' do
|
34
|
+
it 'should display rubygems ordering by name' do
|
35
|
+
capture(:stdout) { @executor.search(query) }.should == <<-'EOS'.unindent
|
36
|
+
|Searching ..
|
37
|
+
|NAME DL(ver) DL(all)
|
38
|
+
|-------------------------------------------------- -------- ---------
|
39
|
+
|factory_girl (3.6.0) 541 2042859
|
40
|
+
|factory_girl_generator (0.0.3) 8015 15547
|
41
|
+
|factory_girl_rails (3.5.0) 39724 1238780
|
42
|
+
EOS
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'with sort option: [v]version_downloads' do
|
47
|
+
it "should display rubygems ordering by name" do
|
48
|
+
capture(:stdout) { @executor.search(query, 'version_downloads') }.should == <<-'EOS'.unindent
|
49
|
+
|Searching ..
|
50
|
+
|NAME DL(ver) DL(all)
|
51
|
+
|-------------------------------------------------- -------- ---------
|
52
|
+
|factory_girl_rails (3.5.0) 39724 1238780
|
53
|
+
|factory_girl_generator (0.0.3) 8015 15547
|
54
|
+
|factory_girl (3.6.0) 541 2042859
|
55
|
+
EOS
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'with sort option: [a]download' do
|
60
|
+
it "should display rubygems ordering by name" do
|
61
|
+
capture(:stdout) { @executor.search(query, 'download') }.should == <<-'EOS'.unindent
|
62
|
+
|Searching ..
|
63
|
+
|NAME DL(ver) DL(all)
|
64
|
+
|-------------------------------------------------- -------- ---------
|
65
|
+
|factory_girl (3.6.0) 541 2042859
|
66
|
+
|factory_girl_rails (3.5.0) 39724 1238780
|
67
|
+
|factory_girl_generator (0.0.3) 8015 15547
|
68
|
+
EOS
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe 'multiple page' do
|
74
|
+
before do
|
75
|
+
stub_request_search(1, load_http_stubs('cucumber-_1.json'))
|
76
|
+
stub_request_search(2, load_http_stubs('cucumber-_2.json'))
|
77
|
+
stub_request_search(3, load_http_stubs('cucumber-_3.json'))
|
78
|
+
stub_request_no_result_with_page(4)
|
79
|
+
end
|
80
|
+
let(:query) { 'cucumber-' }
|
81
|
+
it 'should display rubygems ordering by name' do
|
82
|
+
capture(:stdout) { @executor.search(query) }.should == <<-'EOS'.unindent
|
83
|
+
|Searching ....
|
84
|
+
|NAME DL(ver) DL(all)
|
85
|
+
|-------------------------------------------------- -------- ---------
|
86
|
+
|autotest-cucumber-notification (0.0.6) 1027 3607
|
87
|
+
|calabash-cucumber-cn (0.0.6) 88 88
|
88
|
+
|cucumber-ajaxer (0.0.4) 1875 4966
|
89
|
+
|cucumber-api-steps (0.13) 1783 36587
|
90
|
+
|cucumber-blanket (0.3.0) 324 1674
|
91
|
+
|cucumber-cafe (0.0.1) 295 295
|
92
|
+
|cucumber-chef (3.0.8) 1545 28881
|
93
|
+
|cucumber-cinema (0.8.0) 1309 9294
|
94
|
+
|cucumber-core (0.2.0) 316 683
|
95
|
+
|cucumber-core (0.2.0) 316 683
|
96
|
+
|cucumber-debug (0.0.1) 1702 1702
|
97
|
+
|cucumber-en_snippet (0.0.2) 295 565
|
98
|
+
|cucumber-farmer (1.0.3) 1573 4398
|
99
|
+
|cucumber-formatter-oneline (0.1.0) 413 413
|
100
|
+
|cucumber-in-the-yard (1.7.8) 2107 33260
|
101
|
+
|cucumber-java (0.0.2) 2113 3656
|
102
|
+
|cucumber-jira (0.0.1.beta) 166 166
|
103
|
+
|cucumber-json (0.0.2) 2199 3697
|
104
|
+
|cucumber-jvm (1.1.6) 204 20913
|
105
|
+
|cucumber-loggly (0.3.1) 903 4869
|
106
|
+
|cucumber-mingle (1.0.0) 1539 1539
|
107
|
+
|cucumber-nagios (0.9.2) 27094 75277
|
108
|
+
|cucumber-nc (0.0.2) 162 1362
|
109
|
+
|cucumber-newrelic (0.0.2) 1694 3201
|
110
|
+
|cucumber-notify (0.0.5) 1168 3348
|
111
|
+
|cucumber-openerpscenario (0.1.9.1) 1110 11064
|
112
|
+
|cucumber-peel (0.0.1) 1000 1000
|
113
|
+
|cucumber-pride (0.0.2) 1272 2321
|
114
|
+
|cucumber-profiler (1.0.0) 1171 1171
|
115
|
+
|cucumber-puppet (0.3.7) 2974 24374
|
116
|
+
|cucumber-rails (1.4.0) 286328 2700475
|
117
|
+
|cucumber-rails-training-wheels (1.0.0) 109001 109001
|
118
|
+
|cucumber-rails2 (0.3.5) 10776 13172
|
119
|
+
|cucumber-rapid7 (0.0.1.beta.1) 101 430
|
120
|
+
|cucumber-rapid7 (0.0.1.beta.1) 101 430
|
121
|
+
|cucumber-relizy (0.0.2) 1433 2502
|
122
|
+
|cucumber-salad (0.4.0) 488 5326
|
123
|
+
|cucumber-salad (0.4.0) 488 5326
|
124
|
+
|cucumber-scout (0.0.2) 1634 3124
|
125
|
+
|cucumber-screenshot (0.3.4) 2241 15704
|
126
|
+
|cucumber-selenium-standalone (0.0.3) 1322 3593
|
127
|
+
|cucumber-sinatra (0.5.0) 8463 28042
|
128
|
+
|cucumber-slice (0.0.2) 629 1199
|
129
|
+
|cucumber-slices (0.0.4) 172 649
|
130
|
+
|cucumber-sshd (0.1.0) 152 152
|
131
|
+
|cucumber-standalone (0.0.1) 1665 1665
|
132
|
+
|cucumber-step_writer (0.1.2) 1251 3229
|
133
|
+
|cucumber-table (0.0.1) 527 527
|
134
|
+
|cucumber-the (1.0.0) 1209 1209
|
135
|
+
|cucumber-timecop (0.0.3) 445 820
|
136
|
+
|cucumber-timed_formatter (0.1.1) 1066 2165
|
137
|
+
|cucumber-to-rally (0.1.3) 1001 3894
|
138
|
+
|cucumber-usual_suspects (0.0.1) 1378 1378
|
139
|
+
|cucumber-value (0.0.1) 1233 1233
|
140
|
+
|cucumber-vimscript (0.0.3) 1097 3316
|
141
|
+
|cucumber-voip (0.1.0) 1244 1244
|
142
|
+
|cucumber-websteps (0.10.0) 18583 22129
|
143
|
+
|cucumber-wordpress (1.3.1) 1346 7458
|
144
|
+
|guard-cucumber-js (0.0.2) 1039 1935
|
145
|
+
|mattscilipoti-cucumber-rails (0.2.4.2) 1394 3989
|
146
|
+
|mattscilipoti_cucumber-rails (0.2.4) 1401 1401
|
147
|
+
|tasty-cucumber-client (0.1.10) 1504 11518
|
148
|
+
|vagrant-cucumber-host (0.1.14) 163 163
|
149
|
+
EOS
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe 'ruled NAME line' do
|
154
|
+
context 'NAME size is 42' do
|
155
|
+
before do
|
156
|
+
stub_request_search(1, dummy_search_result_name_size_is_42)
|
157
|
+
stub_request_no_result_with_page(2)
|
158
|
+
end
|
159
|
+
let(:query) {'size_is_42_2345678901234567890123456789012'}
|
160
|
+
it "should be 50 characters" do
|
161
|
+
capture(:stdout) { @executor.search(query) }.should == <<-'EOS'.unindent
|
162
|
+
|Searching ..
|
163
|
+
|NAME DL(ver) DL(all)
|
164
|
+
|-------------------------------------------------- -------- ---------
|
165
|
+
|size_is_42_2345678901234567890123456789012 (0.0.1) 100 1000
|
166
|
+
EOS
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
context 'NAME size is 43' do
|
171
|
+
before do
|
172
|
+
stub_request_search(1, dummy_search_result_name_size_is_43)
|
173
|
+
stub_request_no_result_with_page(2)
|
174
|
+
end
|
175
|
+
let(:query) {'size_is_43_23456789012345678901234567890123'}
|
176
|
+
it "should be 51 characters" do
|
177
|
+
capture(:stdout) { @executor.search(query) }.should == <<-'EOS'.unindent
|
178
|
+
|Searching ..
|
179
|
+
|NAME DL(ver) DL(all)
|
180
|
+
|--------------------------------------------------- -------- ---------
|
181
|
+
|size_is_43_23456789012345678901234567890123 (0.0.2) 200 2000
|
182
|
+
EOS
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
private
|
189
|
+
def stub_request_search(page, body)
|
190
|
+
stub_request(:get, build_search_uri(query, page)).to_return(:status => 200, :body => body)
|
191
|
+
end
|
192
|
+
|
193
|
+
def stub_request_no_result_with_page(page)
|
194
|
+
stub_request(:get, build_search_uri(query, page)).to_return(:status => 200, :body => '[]')
|
195
|
+
end
|
196
|
+
|
197
|
+
def build_search_uri(query, page)
|
198
|
+
Executor::SEARCH_URL % [query, page]
|
199
|
+
end
|
200
|
+
|
201
|
+
def dummy_search_result
|
202
|
+
# top 3 gems searching with 'factory_girl'
|
203
|
+
# https://rubygems.org/api/v1/search.json?query=factory_girl
|
204
|
+
[{"name"=>"factory_girl",
|
205
|
+
"downloads"=>2042859,
|
206
|
+
"version"=>"3.6.0",
|
207
|
+
"version_downloads"=>541,
|
208
|
+
"platform"=>"ruby",
|
209
|
+
"authors"=>"Josh Clayton, Joe Ferris",
|
210
|
+
"info"=>
|
211
|
+
"factory_girl provides a framework and DSL for defining and\n using factories - less error-prone, more explicit, and\n all-around easier to work with than fixtures.",
|
212
|
+
"project_uri"=>"http://rubygems.org/gems/factory_girl",
|
213
|
+
"gem_uri"=>"http://rubygems.org/gems/factory_girl-3.6.0.gem",
|
214
|
+
"homepage_uri"=>"https://github.com/thoughtbot/factory_girl",
|
215
|
+
"wiki_uri"=>"",
|
216
|
+
"documentation_uri"=>"",
|
217
|
+
"mailing_list_uri"=>"",
|
218
|
+
"source_code_uri"=>"https://github.com/thoughtbot/factory_girl",
|
219
|
+
"bug_tracker_uri"=>"",
|
220
|
+
"dependencies"=>
|
221
|
+
{"development"=>
|
222
|
+
[{"name"=>"appraisal", "requirements"=>"~> 0.4"},
|
223
|
+
{"name"=>"aruba", "requirements"=>">= 0"},
|
224
|
+
{"name"=>"bourne", "requirements"=>">= 0"},
|
225
|
+
{"name"=>"cucumber", "requirements"=>"~> 1.1"},
|
226
|
+
{"name"=>"mocha", "requirements"=>">= 0"},
|
227
|
+
{"name"=>"rspec", "requirements"=>"~> 2.0"},
|
228
|
+
{"name"=>"simplecov", "requirements"=>">= 0"},
|
229
|
+
{"name"=>"sqlite3-ruby", "requirements"=>">= 0"},
|
230
|
+
{"name"=>"timecop", "requirements"=>">= 0"},
|
231
|
+
{"name"=>"yard", "requirements"=>">= 0"}],
|
232
|
+
"runtime"=>[{"name"=>"activesupport", "requirements"=>">= 3.0.0"}]}},
|
233
|
+
{"name"=>"factory_girl_rails",
|
234
|
+
"downloads"=>1238780,
|
235
|
+
"version"=>"3.5.0",
|
236
|
+
"version_downloads"=>39724,
|
237
|
+
"platform"=>"ruby",
|
238
|
+
"authors"=>"Joe Ferris",
|
239
|
+
"info"=>
|
240
|
+
"factory_girl_rails provides integration between\n factory_girl and rails 3 (currently just automatic factory definition\n loading)",
|
241
|
+
"project_uri"=>"http://rubygems.org/gems/factory_girl_rails",
|
242
|
+
"gem_uri"=>"http://rubygems.org/gems/factory_girl_rails-3.5.0.gem",
|
243
|
+
"homepage_uri"=>"http://github.com/thoughtbot/factory_girl_rails",
|
244
|
+
"wiki_uri"=>nil,
|
245
|
+
"documentation_uri"=>nil,
|
246
|
+
"mailing_list_uri"=>nil,
|
247
|
+
"source_code_uri"=>nil,
|
248
|
+
"bug_tracker_uri"=>nil,
|
249
|
+
"dependencies"=>
|
250
|
+
{"development"=>
|
251
|
+
[{"name"=>"aruba", "requirements"=>">= 0"},
|
252
|
+
{"name"=>"cucumber", "requirements"=>"~> 1.0.0"},
|
253
|
+
{"name"=>"rails", "requirements"=>"= 3.0.7"},
|
254
|
+
{"name"=>"rake", "requirements"=>">= 0"},
|
255
|
+
{"name"=>"rspec", "requirements"=>"~> 2.6.0"}],
|
256
|
+
"runtime"=>
|
257
|
+
[{"name"=>"factory_girl", "requirements"=>"~> 3.5.0"},
|
258
|
+
{"name"=>"railties", "requirements"=>">= 3.0.0"}]}},
|
259
|
+
{"name"=>"factory_girl_generator",
|
260
|
+
"downloads"=>15547,
|
261
|
+
"version"=>"0.0.3",
|
262
|
+
"version_downloads"=>8015,
|
263
|
+
"platform"=>"ruby",
|
264
|
+
"authors"=>"Les Hill",
|
265
|
+
"info"=>"Rails 3 generator for factory_girl",
|
266
|
+
"project_uri"=>"http://rubygems.org/gems/factory_girl_generator",
|
267
|
+
"gem_uri"=>"http://rubygems.org/gems/factory_girl_generator-0.0.3.gem",
|
268
|
+
"homepage_uri"=>"http://github.com/leshill/factory_girl_generator",
|
269
|
+
"wiki_uri"=>nil,
|
270
|
+
"documentation_uri"=>nil,
|
271
|
+
"mailing_list_uri"=>nil,
|
272
|
+
"source_code_uri"=>nil,
|
273
|
+
"bug_tracker_uri"=>nil,
|
274
|
+
"dependencies"=>{"development"=>[], "runtime"=>[]}}
|
275
|
+
].to_json
|
276
|
+
end
|
277
|
+
|
278
|
+
def dummy_search_result_name_size_is_42
|
279
|
+
[{"name"=>"size_is_42_2345678901234567890123456789012",
|
280
|
+
"downloads"=>1000,
|
281
|
+
"version"=>"0.0.1",
|
282
|
+
"version_downloads"=>100}
|
283
|
+
].to_json
|
284
|
+
end
|
285
|
+
|
286
|
+
def dummy_search_result_name_size_is_43
|
287
|
+
[{"name"=>"size_is_43_23456789012345678901234567890123",
|
288
|
+
"downloads"=>2000,
|
289
|
+
"version"=>"0.0.2",
|
290
|
+
"version_downloads"=>200}
|
291
|
+
].to_json
|
292
|
+
end
|
293
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"name":"cucumber-rails","downloads":2700475,"version":"1.4.0","version_downloads":286328,"platform":"ruby","authors":"Aslak Helles\u00f8y, Dennis Bl\u00f6te, Rob Holland","info":"Cucumber Generator and Runtime for Rails","licenses":[],"project_uri":"http://rubygems.org/gems/cucumber-rails","gem_uri":"http://rubygems.org/gems/cucumber-rails-1.4.0.gem","homepage_uri":"http://cukes.info","wiki_uri":"http://wiki.github.com/cucumber/cucumber-rails","documentation_uri":"http://cukes.info/","mailing_list_uri":"http://groups.google.com/group/cukes","source_code_uri":"http://github.com/cucumber/cucumber-rails","bug_tracker_uri":"http://github.com/cucumber/cucumber-rails/issues","dependencies":{"development":[{"name":"ammeter","requirements":">= 0.2.9"},{"name":"appraisal","requirements":"~> 0.5.1"},{"name":"aruba","requirements":">= 0.4.11"},{"name":"bcat","requirements":"~> 0.6.2"},{"name":"bundler","requirements":"~> 1.3.5"},{"name":"database_cleaner","requirements":">= 0.7.2"},{"name":"factory_girl","requirements":">= 3.2.0"},{"name":"rake","requirements":">= 0.9.2.2"},{"name":"rdiscount","requirements":"~> 2.0.7"},{"name":"rdoc","requirements":"~> 3.12.2"},{"name":"rspec","requirements":">= 2.2"},{"name":"yard","requirements":"~> 0.8.5.2"}],"runtime":[{"name":"capybara","requirements":">= 1.1.2"},{"name":"cucumber","requirements":">= 1.2.0"},{"name":"nokogiri","requirements":">= 1.5.0"},{"name":"rails","requirements":">= 3.0.0"}]}},{"name":"cucumber-nagios","downloads":75277,"version":"0.9.2","version_downloads":27094,"platform":"ruby","authors":"Lindsay Holmwood","info":"cucumber-nagios helps you write behavioural tests for your systems and infrastructure, that can be plugged into Nagios.","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-nagios","gem_uri":"http://rubygems.org/gems/cucumber-nagios-0.9.2.gem","homepage_uri":"http://cucumber-nagios.org/","wiki_uri":"","documentation_uri":"","mailing_list_uri":"","source_code_uri":"http://github.com/auxesis/cucumber-nagios","bug_tracker_uri":"http://github.com/auxesis/cucumber-nagios/issues","dependencies":{"development":[{"name":"rake","requirements":">= 0.8.3"}],"runtime":[{"name":"amqp","requirements":"= 0.6.7"},{"name":"bundler","requirements":"~> 1.0.7"},{"name":"cucumber","requirements":">= 0.10.0"},{"name":"mechanize","requirements":"= 1.0.0"},{"name":"net-ssh","requirements":"~> 2.1.0"},{"name":"rspec","requirements":">= 2.3.0"},{"name":"templater","requirements":">= 1.0.0"},{"name":"webrat","requirements":"= 0.7.2"}]}},{"name":"cucumber-rails-training-wheels","downloads":109001,"version":"1.0.0","version_downloads":109001,"platform":"ruby","authors":"Aslak Helles\u00f8y","info":"Training Wheels for Cucumber-Rails","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-rails-training-wheels","gem_uri":"http://rubygems.org/gems/cucumber-rails-training-wheels-1.0.0.gem","homepage_uri":"http://cukes.info","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"aruba","requirements":">= 0.4.6"},{"name":"database_cleaner","requirements":">= 0.6.7"},{"name":"rails","requirements":">= 3.1.0"},{"name":"rspec","requirements":">= 2.6.0"},{"name":"rspec-rails","requirements":">= 2.6.1"}],"runtime":[{"name":"cucumber-rails","requirements":">= 1.1.1"}]}},{"name":"cucumber-api-steps","downloads":36587,"version":"0.13","version_downloads":1783,"platform":"ruby","authors":"Jay Zeschin","info":"Cucumber steps to easily test REST-based XML and JSON APIs","licenses":[],"project_uri":"http://rubygems.org/gems/cucumber-api-steps","gem_uri":"http://rubygems.org/gems/cucumber-api-steps-0.13.gem","homepage_uri":"http://github.com/jayzes/cucumber-api-steps","wiki_uri":"","documentation_uri":"","mailing_list_uri":"","source_code_uri":"http://github.com/jayzes/cucumber-api-steps","bug_tracker_uri":"","dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":">= 1.2.1"},{"name":"jsonpath","requirements":">= 0.1.2"},{"name":"rspec","requirements":">= 2.12.0"}]}},{"name":"cucumber-in-the-yard","downloads":33260,"version":"1.7.8","version_downloads":2107,"platform":"ruby","authors":"Franklin Webber","info":" \n Cucumber-In-The-Yard is a YARD extension that processes Cucumber Features, Scenarios, Steps,\n Step Definitions, Transforms, and Tags and provides a documentation interface that allows you\n easily view and investigate the test suite. This tools hopes to bridge the gap of being able\n to provide your feature descriptions to your Product Owners and Stakeholders. ","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-in-the-yard","gem_uri":"http://rubygems.org/gems/cucumber-in-the-yard-1.7.8.gem","homepage_uri":"http://github.com/burtlo/Cucumber-In-The-Yard","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":">= 0.7.5"},{"name":"gherkin","requirements":">= 2.2.9"},{"name":"yard","requirements":">= 0.6.3"}]}},{"name":"cucumber-sinatra","downloads":28042,"version":"0.5.0","version_downloads":8463,"platform":"ruby","authors":"Bernd Ahlers","info":"This little gem will help you to initialize a cucumber environment for a sinatra application. It will generate the required files from templates.","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-sinatra","gem_uri":"http://rubygems.org/gems/cucumber-sinatra-0.5.0.gem","homepage_uri":"http://github.com/bernd/cucumber-sinatra","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"templater","requirements":">= 1.0.0"}]}},{"name":"cucumber-puppet","downloads":24374,"version":"0.3.7","version_downloads":2974,"platform":"ruby","authors":"Nikolay Sturm","info":"cucumber-puppet is a tool for behavioral testing of Puppet catalogs","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-puppet","gem_uri":"http://rubygems.org/gems/cucumber-puppet-0.3.7.gem","homepage_uri":"http://projects.puppetlabs.com/projects/cucumber-puppet","wiki_uri":"","documentation_uri":"","mailing_list_uri":"","source_code_uri":"http://github.com/nistude/cucumber-puppet","bug_tracker_uri":"http://github.com/nistude/cucumber-puppet/issues","dependencies":{"development":[{"name":"facter","requirements":"= 1.5.9"},{"name":"puppet","requirements":">= 0"},{"name":"ronn","requirements":">= 0"},{"name":"rspec","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":">= 0"},{"name":"gem-man","requirements":">= 0"},{"name":"templater","requirements":">= 0"}]}},{"name":"cucumber-screenshot","downloads":15704,"version":"0.3.4","version_downloads":2241,"platform":"ruby","authors":"Joel Chippindale","info":"Extension for Cucumber (http://cukes.info/) that makes it easy to take HTML snapshots and also to use Webkit to capture PNG screenshots of your web application during tests","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-screenshot","gem_uri":"http://rubygems.org/gems/cucumber-screenshot-0.3.4.gem","homepage_uri":"http://github.com/mocoso/cucumber-screenshot","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"rspec","requirements":"~> 1.3"}],"runtime":[{"name":"cucumber","requirements":"~> 0.9"},{"name":"webrat","requirements":"~> 0.7"}]}},{"name":"cucumber-chef","downloads":28881,"version":"3.0.8","version_downloads":1545,"platform":"ruby","authors":"Stephen Nelson-Smith, Zachary Patten","info":"Framework for test-driven infrastructure development.","licenses":["Apache 2.0"],"project_uri":"http://rubygems.org/gems/cucumber-chef","gem_uri":"http://rubygems.org/gems/cucumber-chef-3.0.8.gem","homepage_uri":"http://www.cucumber-chef.org","wiki_uri":"https://github.com/Atalanta/cucumber-chef/blob/master/WIKI.md","documentation_uri":"","mailing_list_uri":"https://groups.google.com/d/forum/cucumber-chef","source_code_uri":"https://github.com/Atalanta/cucumber-chef","bug_tracker_uri":"","dependencies":{"development":[{"name":"pry","requirements":">= 0"},{"name":"redcarpet","requirements":">= 0"},{"name":"simplecov","requirements":">= 0"},{"name":"yard","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":">= 0"},{"name":"fog","requirements":">= 1.3.1"},{"name":"mixlib-config","requirements":">= 1.1.2"},{"name":"rake","requirements":">= 0.9.2"},{"name":"rspec","requirements":">= 0"},{"name":"thor","requirements":">= 0.15.2"},{"name":"ubuntu_ami","requirements":">= 0.4.0"},{"name":"ztk","requirements":">= 1.0.9"}]}},{"name":"tasty-cucumber-client","downloads":11518,"version":"0.1.10","version_downloads":1504,"platform":"ruby","authors":"Ivan Schneider, Jessy Bernal","info":"Remote feature management for Cucumber designed to work with the Tasty Cucumber service","licenses":null,"project_uri":"http://rubygems.org/gems/tasty-cucumber-client","gem_uri":"http://rubygems.org/gems/tasty-cucumber-client-0.1.10.gem","homepage_uri":"http://tasty-cucumber.com","wiki_uri":"","documentation_uri":"","mailing_list_uri":"","source_code_uri":"http://github.com/octo-technology/tasty-cucumber-client","bug_tracker_uri":"","dependencies":{"development":[],"runtime":[{"name":"httparty","requirements":">= 0.4.3"}]}},{"name":"cucumber-websteps","downloads":22129,"version":"0.10.0","version_downloads":18583,"platform":"ruby","authors":"kucaahbe","info":"cucumber web steps, designed to work with any of capybara's drivers. Test framework agnostic (you can use them with rspec-1, rspec-2, test/unit and minitest).","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-websteps","gem_uri":"http://rubygems.org/gems/cucumber-websteps-0.10.0.gem","homepage_uri":"http://relishapp.com/kucaahbe/cucumber-websteps","wiki_uri":"https://github.com/kucaahbe/cucumber-websteps/wiki","documentation_uri":"http://relishapp.com/kucaahbe/cucumber-websteps","mailing_list_uri":"","source_code_uri":"https://github.com/kucaahbe/cucumber-websteps","bug_tracker_uri":"https://github.com/kucaahbe/cucumber-websteps/issues","dependencies":{"development":[{"name":"cucumber-sinatra","requirements":">= 0"},{"name":"rake","requirements":">= 0"},{"name":"rspec","requirements":">= 0"},{"name":"sinatra","requirements":">= 0"}],"runtime":[{"name":"capybara","requirements":">= 1.1.2"},{"name":"cucumber","requirements":">= 1.1.1"},{"name":"launchy","requirements":">= 0"}]}},{"name":"cucumber-jvm","downloads":20913,"version":"1.1.6","version_downloads":204,"platform":"java","authors":"Aslak Helles\u00f8y","info":"Cucumber-JVM for JRuby","licenses":[],"project_uri":"http://rubygems.org/gems/cucumber-jvm","gem_uri":"http://rubygems.org/gems/cucumber-jvm-1.1.6-java.gem","homepage_uri":"http://github.com/cucumber/cucumber-jvm","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[]}},{"name":"cucumber-rails2","downloads":13172,"version":"0.3.5","version_downloads":10776,"platform":"ruby","authors":"Dennis Bl\u00f6te, Aslak Helles\u00f8y, Rob Holland","info":"Cucumber Generators and Runtime for Rails","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-rails2","gem_uri":"http://rubygems.org/gems/cucumber-rails2-0.3.5.gem","homepage_uri":"https://github.com/Vanuan/cucumber-rails","wiki_uri":"","documentation_uri":"","mailing_list_uri":"","source_code_uri":"https://github.com/Vanuan/cucumber-rails","bug_tracker_uri":"https://github.com/cucumber/cucumber-rails/pull/213","dependencies":{"development":[{"name":"aruba","requirements":">= 0.1.9"}],"runtime":[{"name":"capybara","requirements":"~> 1.1.0"},{"name":"cucumber","requirements":"~> 1.1.0"}]}},{"name":"cucumber-cinema","downloads":9294,"version":"0.8.0","version_downloads":1309,"platform":"ruby","authors":"Ilya Katz","info":"Take a series of screenshots while running your cucumber test suite","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-cinema","gem_uri":"http://rubygems.org/gems/cucumber-cinema-0.8.0.gem","homepage_uri":"http://github.com/ilyakatz/cucumber-cinema","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.0.0"},{"name":"jeweler","requirements":"~> 1.6.2"},{"name":"rcov","requirements":">= 0"},{"name":"shoulda","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":">= 0"},{"name":"imgkit","requirements":">= 0"},{"name":"mini_magick","requirements":">= 0"}]}},{"name":"cucumber-wordpress","downloads":7458,"version":"1.3.1","version_downloads":1346,"platform":"ruby","authors":"Tom Adams","info":"Environment setup and step definitions for testing WordPress with Cucumber","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-wordpress","gem_uri":"http://rubygems.org/gems/cucumber-wordpress-1.3.1.gem","homepage_uri":"http://github.com/dxw/cucumber-wordpress","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":">= 0"},{"name":"mechanize","requirements":">= 0"},{"name":"mysql","requirements":">= 0"},{"name":"webrat","requirements":">= 0"}]}},{"name":"cucumber-openerpscenario","downloads":11064,"version":"0.1.9.1","version_downloads":1110,"platform":"ruby","authors":"Nicolas Bessi - Camptocamp","info":"cucumber on OpenERP","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-openerpscenario","gem_uri":"http://rubygems.org/gems/cucumber-openerpscenario-0.1.9.1.gem","homepage_uri":null,"wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":">= 0"},{"name":"ooor","requirements":">= 1.6.5"},{"name":"ooor-finders","requirements":">= 0"},{"name":"parseconfig","requirements":">= 0"},{"name":"rspec-rails","requirements":">= 0"}]}},{"name":"mattscilipoti-cucumber-rails","downloads":3989,"version":"0.2.4.2","version_downloads":1394,"platform":"ruby","authors":"Dennis Bl\u00f6te, Aslak Helles\u00f8y, Rob Holland","info":"Cucumber Generators and Runtime for Rails","licenses":null,"project_uri":"http://rubygems.org/gems/mattscilipoti-cucumber-rails","gem_uri":"http://rubygems.org/gems/mattscilipoti-cucumber-rails-0.2.4.2.gem","homepage_uri":"http://github.com/aslakhellesoy/cucumber-rails","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":">= 0.6.2"}]}},{"name":"cucumber-farmer","downloads":4398,"version":"1.0.3","version_downloads":1573,"platform":"ruby","authors":"Matt Scilipoti","info":"A library of cucumber step definitions, which allow you to use a human to assert conditions during acceptance tests.\n Some requirements are simple for a human to confirm, but are very difficult to assert using automation.\n Farmer allows us to include human confirmation into our normal testing flow.\n For example, we needed to verify that certain portions of an image were 'blacked out'.\n ","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-farmer","gem_uri":"http://rubygems.org/gems/cucumber-farmer-1.0.3.gem","homepage_uri":"http://github.com/mattscilipoti/cucumber-farmer","wiki_uri":"","documentation_uri":"http://github.com/mattscilipoti/cucumber-farmer","mailing_list_uri":"","source_code_uri":"http://github.com/mattscilipoti/cucumber-farmer","bug_tracker_uri":"http://github.com/mattscilipoti/cucumber-farmer/issues","dependencies":{"development":[{"name":"bundler","requirements":"~> 1.0.0"},{"name":"ci_reporter","requirements":"~> 1.6.2"},{"name":"cucumber","requirements":"~> 0.6"},{"name":"jeweler","requirements":"~> 1.4.0"},{"name":"rack-test","requirements":"~> 0.5.0"},{"name":"shoulda","requirements":"~> 2.10"},{"name":"sinatra","requirements":"~> 1.0"},{"name":"webrat","requirements":">= 0"}],"runtime":[{"name":"mattscilipoti-rdialog","requirements":"~> 0.6.1"}]}},{"name":"cucumber-json","downloads":3697,"version":"0.0.2","version_downloads":2199,"platform":"ruby","authors":"Jesse Newland","info":"A cucumber formatter that outputs JSON","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-json","gem_uri":"http://rubygems.org/gems/cucumber-json-0.0.2.gem","homepage_uri":"http://github.com/jnewland/cucumber-json","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":"~> 0.7.3"},{"name":"json_pure","requirements":"~> 1.4.3"}]}},{"name":"cucumber-java","downloads":3656,"version":"0.0.2","version_downloads":2113,"platform":"ruby","authors":"Aslak Helles\u00c3\u0192\u00c2\u00b8y","info":"Cucumber for Java","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-java","gem_uri":"http://rubygems.org/gems/cucumber-java-0.0.2.gem","homepage_uri":"http://cukes.info","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"hoe","requirements":">= 1.11.0"}],"runtime":[{"name":"cucumber","requirements":">= 0.3.0"},{"name":"hoe","requirements":">= 1.11.0"}]}},{"name":"cucumber-ajaxer","downloads":4966,"version":"0.0.4","version_downloads":1875,"platform":"ruby","authors":"Chalo Fernandez","info":"Cucumber should wait for AJAX calls in @javascript Scenarios","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-ajaxer","gem_uri":"http://rubygems.org/gems/cucumber-ajaxer-0.0.4.gem","homepage_uri":"http://github.com/chalofa/cucumber-ajaxer","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":">= 0"}]}},{"name":"cucumber-newrelic","downloads":3201,"version":"0.0.2","version_downloads":1694,"platform":"ruby","authors":"Jesse Newland","info":"Cucumber steps for verifing metrics from NewRelic's API","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-newrelic","gem_uri":"http://rubygems.org/gems/cucumber-newrelic-0.0.2.gem","homepage_uri":"http://github.com/jnewland/cucumber-newrelic","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"activeresource","requirements":"~> 2.3.8"},{"name":"newrelic_rpm","requirements":"~> 2.10.6"}]}},{"name":"cucumber-scout","downloads":3124,"version":"0.0.2","version_downloads":1634,"platform":"ruby","authors":"Jesse Newland","info":"Cucumber steps for verifing metrics from Scout's API","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-scout","gem_uri":"http://rubygems.org/gems/cucumber-scout-0.0.2.gem","homepage_uri":"http://github.com/jnewland/cucumber-scout","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"scout_scout","requirements":"~> 0.0.4"}]}},{"name":"cucumber-selenium-standalone","downloads":3593,"version":"0.0.3","version_downloads":1322,"platform":"ruby","authors":"Nick Zalabak","info":"generates directory and required files for any type of project needing to test with Cucumber/Capybara/Selenium","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-selenium-standalone","gem_uri":"http://rubygems.org/gems/cucumber-selenium-standalone-0.0.3.gem","homepage_uri":"http://github.com/techwhizbang/cucumber-selenium-standalone","wiki_uri":"","documentation_uri":"http://github.com/techwhizbang/cucumber-selenium-standalone","mailing_list_uri":"","source_code_uri":"http://github.com/techwhizbang/cucumber-selenium-standalone","bug_tracker_uri":"","dependencies":{"development":[],"runtime":[{"name":"bundler","requirements":"~> 1.0.15"},{"name":"capybara","requirements":"= 1.0"},{"name":"cucumber","requirements":"= 1.0.2"},{"name":"cucumber-rails","requirements":"= 1.0.2"},{"name":"nokogiri","requirements":"= 1.5.0"},{"name":"rake","requirements":"= 0.9.2"},{"name":"rspec","requirements":"= 2.6.0"},{"name":"selenium-webdriver","requirements":"= 0.2.2"},{"name":"thor","requirements":"= 0.14.6"}]}},{"name":"cucumber-vimscript","downloads":3316,"version":"0.0.3","version_downloads":1097,"platform":"ruby","authors":"Andrew Radev","info":"Provides step definitions to spawn and command a vim instance","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-vimscript","gem_uri":"http://rubygems.org/gems/cucumber-vimscript-0.0.3.gem","homepage_uri":"http://github.com/AndrewRadev/cucumber-vimscript","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":">= 1.0.2"},{"name":"vimrunner","requirements":">= 0"}]}},{"name":"cucumber-notify","downloads":3348,"version":"0.0.5","version_downloads":1168,"platform":"ruby","authors":"Pavel Argentov","info":"This is now a meta-gem which is only delegating all functionality to 'autotest-cucumber-notification' gem/module.","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-notify","gem_uri":"http://rubygems.org/gems/cucumber-notify-0.0.5.gem","homepage_uri":"https://github.com/argent-smith/autotest-cucumber-notification/tree/deprecated","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"gemcutter","requirements":">= 0"}],"runtime":[{"name":"autotest-cucumber-notification","requirements":">= 0"}]}},{"name":"cucumber-to-rally","downloads":3894,"version":"0.1.3","version_downloads":1001,"platform":"ruby","authors":"Pablo Menezes","info":"A gem to make a bridge between Rally and Cucumber Steps","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-to-rally","gem_uri":"http://rubygems.org/gems/cucumber-to-rally-0.1.3.gem","homepage_uri":null,"wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"activeresource","requirements":"= 2.3.4"},{"name":"logger","requirements":">= 1.2.8"},{"name":"rally_rest_api","requirements":">= 1.0.3"}]}},{"name":"cucumber-step_writer","downloads":3229,"version":"0.1.2","version_downloads":1251,"platform":"ruby","authors":"John Bintz","info":"Write out step files for undefined Cucumber steps.","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-step_writer","gem_uri":"http://rubygems.org/gems/cucumber-step_writer-0.1.2.gem","homepage_uri":"","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[]}},{"name":"autotest-cucumber-notification","downloads":3607,"version":"0.0.6","version_downloads":1027,"platform":"ruby","authors":"Pavel Argentov","info":"This is an autotest plugin that will notify you about the results of your Cucumber features run.","licenses":null,"project_uri":"http://rubygems.org/gems/autotest-cucumber-notification","gem_uri":"http://rubygems.org/gems/autotest-cucumber-notification-0.0.6.gem","homepage_uri":"https://github.com/evrone/autotest-cucumber-notification","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"gemcutter","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":">= 0"},{"name":"ZenTest","requirements":">= 0"}]}},{"name":"cucumber-pride","downloads":2321,"version":"0.0.2","version_downloads":1272,"platform":"ruby","authors":"Peter Vandenberk","info":"Mimics the functionality of minitest/pride for Cucumber","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-pride","gem_uri":"http://rubygems.org/gems/cucumber-pride-0.0.2.gem","homepage_uri":"https://github.com/pvdb/cucumber-pride","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"rspec","requirements":"~> 2.9.0"}],"runtime":[{"name":"cucumber","requirements":"~> 1.1.1"}]}}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"name":"cucumber-standalone","downloads":1665,"version":"0.0.1","version_downloads":1665,"platform":"ruby","authors":"Jesse Newland","info":"generator for standalone cuke projects","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-standalone","gem_uri":"http://rubygems.org/gems/cucumber-standalone-0.0.1.gem","homepage_uri":"http://github.com/jnewland/cucumber-standalone","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":">= 0.9.3"},{"name":"mechanize","requirements":">= 1.0.0"},{"name":"thor","requirements":">= 0.14.4"},{"name":"webrat","requirements":">= 0.7.2"}]}},{"name":"cucumber-relizy","downloads":2502,"version":"0.0.2","version_downloads":1433,"platform":"ruby","authors":"wynst","info":"Patch your cucumber html output with features navigation","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-relizy","gem_uri":"http://rubygems.org/gems/cucumber-relizy-0.0.2.gem","homepage_uri":"https://github.com/wynst/cucumber-relizy","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"coffee-script","requirements":">= 0"},{"name":"nokogiri","requirements":">= 0"}]}},{"name":"cucumber-loggly","downloads":4869,"version":"0.3.1","version_downloads":903,"platform":"ruby","authors":"Brett Weaver","info":"Cucumber log searching pluging for Loggly.","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-loggly","gem_uri":"http://rubygems.org/gems/cucumber-loggly-0.3.1.gem","homepage_uri":"https://github.com/brettweavnet/cucumber-loggly","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"rspec","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":"~> 1.2.1"},{"name":"loggly-ruby-client","requirements":"~> 0.2.1"},{"name":"rspec","requirements":"~> 2.11.0"},{"name":"trollop","requirements":"= 2.0"}]}},{"name":"mattscilipoti_cucumber-rails","downloads":1401,"version":"0.2.4","version_downloads":1401,"platform":"ruby","authors":"Dennis Bl\u00f6te, Aslak Helles\u00f8y, Rob Holland","info":"Cucumber Generators and Runtime for Rails","licenses":null,"project_uri":"http://rubygems.org/gems/mattscilipoti_cucumber-rails","gem_uri":"http://rubygems.org/gems/mattscilipoti_cucumber-rails-0.2.4.gem","homepage_uri":"http://github.com/aslakhellesoy/cucumber-rails","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":">= 0.6.2"}]}},{"name":"cucumber-mingle","downloads":1539,"version":"1.0.0","version_downloads":1539,"platform":"ruby","authors":"Vincent Xu","info":"Cucumber Mingle Integration","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-mingle","gem_uri":"http://rubygems.org/gems/cucumber-mingle-1.0.0.gem","homepage_uri":null,"wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"rake","requirements":"~> 0.8.7"}],"runtime":[{"name":"activeresource","requirements":"~> 3.0.1"},{"name":"cucumber","requirements":"~> 0.9.2"}]}},{"name":"cucumber-timed_formatter","downloads":2165,"version":"0.1.1","version_downloads":1066,"platform":"ruby","authors":"Matthias Viehweger","info":"A progress-formatter with a little more info: Each Scenario is one line and the time is measured.","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-timed_formatter","gem_uri":"http://rubygems.org/gems/cucumber-timed_formatter-0.1.1.gem","homepage_uri":"http://github.com/kronn/cucumber-timed_formatter","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":"~> 1.2"}]}},{"name":"guard-cucumber-js","downloads":1935,"version":"0.0.2","version_downloads":1039,"platform":"ruby","authors":"James Harton","info":"Guard gem for cucumber.js","licenses":null,"project_uri":"http://rubygems.org/gems/guard-cucumber-js","gem_uri":"http://rubygems.org/gems/guard-cucumber-js-0.0.2.gem","homepage_uri":"","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":">= 1.0"}],"runtime":[{"name":"guard","requirements":">= 0.10.0"}]}},{"name":"cucumber-usual_suspects","downloads":1378,"version":"0.0.1","version_downloads":1378,"platform":"ruby","authors":"Matt Wynne","info":"Identities for Cucumber step definitions","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-usual_suspects","gem_uri":"http://rubygems.org/gems/cucumber-usual_suspects-0.0.1.gem","homepage_uri":"http://github.com/mattwynne/cucumber-usual_suspects","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"aruba","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":"~> 0.10.2"}]}},{"name":"cucumber-debug","downloads":1702,"version":"0.0.1","version_downloads":1702,"platform":"ruby","authors":"David Padilla","info":"Launch a browser snapshot for cucumber failed scenarios","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-debug","gem_uri":"http://rubygems.org/gems/cucumber-debug-0.0.1.gem","homepage_uri":"","wiki_uri":"https://github.com/crowdint/cucumber-debug/wiki","documentation_uri":"https://github.com/crowdint/cucumber-debug","mailing_list_uri":"","source_code_uri":"https://github.com/crowdint/cucumber-debug","bug_tracker_uri":"https://github.com/crowdint/cucumber-debug/issues","dependencies":{"development":[{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"cucumber-rails","requirements":">= 0"},{"name":"launchy","requirements":">= 0"}]}},{"name":"cucumber-value","downloads":1233,"version":"0.0.1","version_downloads":1233,"platform":"ruby","authors":"Colin Humphreys","info":"Assert the value of Cucumber features","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-value","gem_uri":"http://rubygems.org/gems/cucumber-value-0.0.1.gem","homepage_uri":"https://github.com/hatofmonkeys/cucumber-value","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"aruba","requirements":">= 0"},{"name":"cucumber","requirements":">= 0"},{"name":"guard","requirements":">= 0"},{"name":"guard-cucumber","requirements":">= 0"},{"name":"guard-rspec","requirements":">= 0"},{"name":"rake","requirements":">= 0"},{"name":"rspec","requirements":">= 0"},{"name":"simplecov","requirements":">= 0"},{"name":"yard","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":">= 0"}]}},{"name":"cucumber-voip","downloads":1244,"version":"0.1.0","version_downloads":1244,"platform":"ruby","authors":"Ben Langfeld","info":"Automated functional testing of voice applications is typically difficult and expensive. Not so when we can specify our systems using Cucumber.","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-voip","gem_uri":"http://rubygems.org/gems/cucumber-voip-0.1.0.gem","homepage_uri":"https://github.com/benlangfeld/cucumber-voip","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":">= 1.0.0"},{"name":"guard-cucumber","requirements":">= 0"},{"name":"rake","requirements":">= 0"},{"name":"yard","requirements":">= 0.6.0"}],"runtime":[{"name":"activesupport","requirements":">= 3.0.10"},{"name":"cucumber","requirements":">= 1.0.2"},{"name":"rspec-rayo","requirements":">= 0.3.0"}]}},{"name":"cucumber-profiler","downloads":1171,"version":"1.0.0","version_downloads":1171,"platform":"ruby","authors":"Michael Blumberg","info":"A way to profile the performance of your cucumber features","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-profiler","gem_uri":"http://rubygems.org/gems/cucumber-profiler-1.0.0.gem","homepage_uri":"https://github.com/mblum14/cucumber-profiler","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":"~> 1.2.1"}]}},{"name":"cucumber-nc","downloads":1362,"version":"0.0.2","version_downloads":162,"platform":"ruby","authors":"Jon Frisby, Odin Dutton","info":"https://github.com/MrJoy/cucumber-nc","licenses":[],"project_uri":"http://rubygems.org/gems/cucumber-nc","gem_uri":"http://rubygems.org/gems/cucumber-nc-0.0.2.gem","homepage_uri":"https://github.com/MrJoy/cucumber-nc","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"cucumber","requirements":"~> 1.2"},{"name":"terminal-notifier","requirements":"~> 1.4.2"}]}},{"name":"cucumber-the","downloads":1209,"version":"1.0.0","version_downloads":1209,"platform":"ruby","authors":"Magnus Bergmark","info":"Adds quick access to instances to help you write more fluid steps.","licenses":null,"project_uri":"http://rubygems.org/gems/cucumber-the","gem_uri":"http://rubygems.org/gems/cucumber-the-1.0.0.gem","homepage_uri":"","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"rspec","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":"~> 1.2"}]}},{"name":"cucumber-cafe","downloads":295,"version":"0.0.1","version_downloads":295,"platform":"ruby","authors":"Faraaz Khan","info":"CAFE: Business IDE For Cucumber ","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-cafe","gem_uri":"http://rubygems.org/gems/cucumber-cafe-0.0.1.gem","homepage_uri":"","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.4"},{"name":"rake","requirements":">= 0"}],"runtime":[]}},{"name":"cucumber-blanket","downloads":1674,"version":"0.3.0","version_downloads":324,"platform":"ruby","authors":"Keyvan Fatehi","info":"Extract Blanket.js code coverage data from within a Ruby Cucumber environment","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-blanket","gem_uri":"http://rubygems.org/gems/cucumber-blanket-0.3.0.gem","homepage_uri":"https://github.com/keyvanfatehi/cucumber-blanket","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"guard-rspec","requirements":">= 0"},{"name":"pry","requirements":">= 0"},{"name":"rake","requirements":">= 0"},{"name":"rspec","requirements":">= 0"}],"runtime":[{"name":"haml","requirements":">= 0"}]}},{"name":"cucumber-core","downloads":683,"version":"0.2.0","version_downloads":316,"platform":"ruby","authors":"Aslak Helles\u00f8y, Matt Wynne, Steve Tooke, Oleg Sukhodolsky, Tom Brand","info":"Core library for the Cucumber BDD app","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-core","gem_uri":"http://rubygems.org/gems/cucumber-core-0.2.0.gem","homepage_uri":"http://cukes.info","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":">= 1.3.5"},{"name":"coveralls","requirements":"~> 0.7"},{"name":"rake","requirements":">= 0.9.2"},{"name":"rspec","requirements":">= 2.13"},{"name":"unindent","requirements":">= 1.0"}],"runtime":[{"name":"gherkin","requirements":"~> 2.12.0"}]}},{"name":"vagrant-cucumber-host","downloads":163,"version":"0.1.14","version_downloads":163,"platform":"ruby","authors":"Gareth Rushgrove","info":"Run cucumber features as a Vagrant provisioner","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/vagrant-cucumber-host","gem_uri":"http://rubygems.org/gems/vagrant-cucumber-host-0.1.14.gem","homepage_uri":null,"wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":"~> 1.3.0"},{"name":"httparty","requirements":"~> 0.10.0"}]}},{"name":"cucumber-slices","downloads":649,"version":"0.0.4","version_downloads":172,"platform":"ruby","authors":"psytau","info":"view steps along with your cukes","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-slices","gem_uri":"http://rubygems.org/gems/cucumber-slices-0.0.4.gem","homepage_uri":"http://github.com/psytau/cucumber-slices","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.0"},{"name":"cucumber","requirements":">= 0"},{"name":"jeweler","requirements":"~> 2.0.1"},{"name":"rdoc","requirements":"~> 3.12"},{"name":"rspec","requirements":"~> 2.8.0"},{"name":"simplecov","requirements":">= 0"}],"runtime":[{"name":"docopt","requirements":">= 0.5.0, ~> 0.5"}]}},{"name":"cucumber-sshd","downloads":152,"version":"0.1.0","version_downloads":152,"platform":"ruby","authors":"Thibault Jouan","info":"Run an sshd server for scenarios tagged with @sshd","licenses":[],"project_uri":"http://rubygems.org/gems/cucumber-sshd","gem_uri":"http://rubygems.org/gems/cucumber-sshd-0.1.0.gem","homepage_uri":"https://rubygems.org/gems/cucumber-sshd","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"aruba","requirements":"~> 0.5"}]}},{"name":"calabash-cucumber-cn","downloads":88,"version":"0.0.6","version_downloads":88,"platform":"ruby","authors":"Li Jie","info":"Chinese translation of calabash-cucumber.","licenses":["BSD"],"project_uri":"http://rubygems.org/gems/calabash-cucumber-cn","gem_uri":"http://rubygems.org/gems/calabash-cucumber-cn-0.0.6.gem","homepage_uri":"http://github.com/cpunion/calabash-cucumber-cn","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"calabash-android","requirements":">= 0.4.21, ~> 0.4"},{"name":"calabash-cucumber","requirements":">= 0.9.168, ~> 0.9"}]}},{"name":"cucumber-slice","downloads":1199,"version":"0.0.2","version_downloads":629,"platform":"ruby","authors":"Justin Searls","info":"This tool can be used both locally and by build systems to\nquickly narrow down which Cucumber features to run based on\nwhich features may have been impacted by a code change.\nProvides a CLI that filters Cucumber features based on\nchanges to production code since a specified git revision.\nThis is particular useful in systems of wide logical breadth,\nwhere each individual commit is unlikely to have an impact on the\nvast majority of the system's behavior.\n","licenses":[],"project_uri":"http://rubygems.org/gems/cucumber-slice","gem_uri":"http://rubygems.org/gems/cucumber-slice-0.0.2.gem","homepage_uri":"https://github.com/testdouble/cucumber-slice","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[],"runtime":[{"name":"git","requirements":"~> 1.2.5"},{"name":"thor","requirements":"~> 0.14"}]}},{"name":"cucumber-salad","downloads":5326,"version":"0.4.0","version_downloads":488,"platform":"ruby","authors":"David Leal","info":"See https://github.com/mojotech/cucumber-salad/README.md","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-salad","gem_uri":"http://rubygems.org/gems/cucumber-salad-0.4.0.gem","homepage_uri":"https://github.com/mojotech/cucumber-salad","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"capybara-webkit","requirements":"~> 1.0.0"},{"name":"rspec-given","requirements":"~> 3.0.0"},{"name":"sinatra","requirements":">= 0"}],"runtime":[{"name":"capybara","requirements":">= 2.0"},{"name":"chronic","requirements":">= 0"},{"name":"cucumber","requirements":">= 0"}]}},{"name":"cucumber-peel","downloads":1000,"version":"0.0.1","version_downloads":1000,"platform":"ruby","authors":"Justin Searls","info":"Helps you locate the implementation for a given step","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-peel","gem_uri":"http://rubygems.org/gems/cucumber-peel-0.0.1.gem","homepage_uri":"https://github.com/testdouble/cucumber-peel","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":"~> 1.2"}]}},{"name":"cucumber-table","downloads":527,"version":"0.0.1","version_downloads":527,"platform":"ruby","authors":"Bachue Zhou","info":"A gem which can parse Cucumber-Style String to a table. You can write a table in your test case just like you are using Cucumber. Now it mainly support RSpec.","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-table","gem_uri":"http://rubygems.org/gems/cucumber-table-0.0.1.gem","homepage_uri":"","wiki_uri":"https://gitcafe.com/bachue/Cucumber-Table","documentation_uri":"https://gitcafe.com/bachue/Cucumber-Table","mailing_list_uri":"","source_code_uri":"https://gitcafe.com/bachue/Cucumber-Table","bug_tracker_uri":"https://gitcafe.com/bachue/Cucumber-Table/tickets","dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"its","requirements":">= 0"},{"name":"pry","requirements":">= 0"},{"name":"pry-debugger","requirements":"= 0.2.1"},{"name":"pry-doc","requirements":">= 0"},{"name":"pry-stack_explorer","requirements":">= 0"},{"name":"rake","requirements":">= 0"},{"name":"rspec","requirements":">= 0"}],"runtime":[]}},{"name":"cucumber-jira","downloads":166,"version":"0.0.1.beta","version_downloads":166,"platform":"ruby","authors":"Erran Carey","info":"Multi-version JIRA integration for cucumber","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-jira","gem_uri":"http://rubygems.org/gems/cucumber-jira-0.0.1.beta.gem","homepage_uri":"https://github.com/ipwnstuff/cucumber-jira","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"jiraSOAP","requirements":"~> 0.10"}]}},{"name":"cucumber-formatter-oneline","downloads":413,"version":"0.1.0","version_downloads":413,"platform":"ruby","authors":"Tim Harvey, Dan Buch","info":"A formatter for Cucumber that uses single lines!","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-formatter-oneline","gem_uri":"http://rubygems.org/gems/cucumber-formatter-oneline-0.1.0.gem","homepage_uri":"","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"pry","requirements":">= 0"},{"name":"rake","requirements":">= 0"},{"name":"rspec","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":"~> 1.1.4"}]}},{"name":"cucumber-rapid7","downloads":430,"version":"0.0.1.beta.1","version_downloads":101,"platform":"ruby","authors":"Erran Carey","info":"Cucumber extensions used at Rapid7","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-rapid7","gem_uri":"http://rubygems.org/gems/cucumber-rapid7-0.0.1.beta.1.gem","homepage_uri":"https://github.com/ecarey-r7/cucumber-rapid7","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"rake","requirements":">= 0"}],"runtime":[]}},{"name":"cucumber-timecop","downloads":820,"version":"0.0.3","version_downloads":445,"platform":"ruby","authors":"zedtux","info":"Timecop steps definition for Cucumber","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-timecop","gem_uri":"http://rubygems.org/gems/cucumber-timecop-0.0.3.gem","homepage_uri":"https://github.com/zedtux/cucumber-timecop","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"chronic","requirements":">= 0"},{"name":"cucumber","requirements":">= 0"},{"name":"timecop","requirements":">= 0"}]}},{"name":"cucumber-en_snippet","downloads":565,"version":"0.0.2","version_downloads":295,"platform":"ruby","authors":"Fumiaki MATSUSHIMA","info":"Output cucumber step definition snippets in English regardless of a language header","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-en_snippet","gem_uri":"http://rubygems.org/gems/cucumber-en_snippet-0.0.2.gem","homepage_uri":"https://github.com/mtsmfm/cucumber-en_snippet","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"aruba","requirements":">= 0"},{"name":"bundler","requirements":"~> 1.3"},{"name":"pry","requirements":">= 0"},{"name":"rake","requirements":">= 0"}],"runtime":[{"name":"cucumber","requirements":">= 0"}]}}]
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"name":"cucumber-salad","downloads":5326,"version":"0.4.0","version_downloads":488,"platform":"ruby","authors":"David Leal","info":"See https://github.com/mojotech/cucumber-salad/README.md","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-salad","gem_uri":"http://rubygems.org/gems/cucumber-salad-0.4.0.gem","homepage_uri":"https://github.com/mojotech/cucumber-salad","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"capybara-webkit","requirements":"~> 1.0.0"},{"name":"rspec-given","requirements":"~> 3.0.0"},{"name":"sinatra","requirements":">= 0"}],"runtime":[{"name":"capybara","requirements":">= 2.0"},{"name":"chronic","requirements":">= 0"},{"name":"cucumber","requirements":">= 0"}]}},{"name":"cucumber-rapid7","downloads":430,"version":"0.0.1.beta.1","version_downloads":101,"platform":"ruby","authors":"Erran Carey","info":"Cucumber extensions used at Rapid7","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-rapid7","gem_uri":"http://rubygems.org/gems/cucumber-rapid7-0.0.1.beta.1.gem","homepage_uri":"https://github.com/ecarey-r7/cucumber-rapid7","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":"~> 1.3"},{"name":"rake","requirements":">= 0"}],"runtime":[]}},{"name":"cucumber-core","downloads":683,"version":"0.2.0","version_downloads":316,"platform":"ruby","authors":"Aslak Helles\u00f8y, Matt Wynne, Steve Tooke, Oleg Sukhodolsky, Tom Brand","info":"Core library for the Cucumber BDD app","licenses":["MIT"],"project_uri":"http://rubygems.org/gems/cucumber-core","gem_uri":"http://rubygems.org/gems/cucumber-core-0.2.0.gem","homepage_uri":"http://cukes.info","wiki_uri":null,"documentation_uri":null,"mailing_list_uri":null,"source_code_uri":null,"bug_tracker_uri":null,"dependencies":{"development":[{"name":"bundler","requirements":">= 1.3.5"},{"name":"coveralls","requirements":"~> 0.7"},{"name":"rake","requirements":">= 0.9.2"},{"name":"rspec","requirements":">= 2.13"},{"name":"unindent","requirements":">= 1.0"}],"runtime":[{"name":"gherkin","requirements":"~> 2.12.0"}]}}]
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
require 'rubygems'
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start
|
5
|
+
|
3
6
|
require 'webmock/rspec'
|
4
7
|
require 'gem-search'
|
5
8
|
|
@@ -17,3 +20,13 @@ def capture(stream)
|
|
17
20
|
|
18
21
|
result
|
19
22
|
end
|
23
|
+
|
24
|
+
def load_http_stubs(file_name)
|
25
|
+
open(File.join(File.dirname(__FILE__), 'http_stubs', file_name)).read
|
26
|
+
end
|
27
|
+
|
28
|
+
class String
|
29
|
+
def unindent
|
30
|
+
gsub(/^\s+\|/, '')
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,96 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem-search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.9
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- rochefort
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-05-11 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: slop
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 3.5.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
26
|
+
version: 3.5.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: json
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
33
|
+
version: 1.8.1
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
version: 1.8.1
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: webmock
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: 1.17.4
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
54
|
+
version: 1.17.4
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: 0.9.2.2
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- - ~>
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: 0.9.2.2
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
70
|
+
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- - ~>
|
73
|
+
- - "~>"
|
84
74
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
75
|
+
version: 2.14.1
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- - ~>
|
80
|
+
- - "~>"
|
92
81
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
82
|
+
version: 2.14.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.8.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.8.2
|
94
97
|
description: search gems with using rubygems.org API
|
95
98
|
email:
|
96
99
|
- terasawan@gmail.com
|
@@ -99,7 +102,8 @@ executables:
|
|
99
102
|
extensions: []
|
100
103
|
extra_rdoc_files: []
|
101
104
|
files:
|
102
|
-
- .gitignore
|
105
|
+
- ".gitignore"
|
106
|
+
- ".rspec"
|
103
107
|
- Gemfile
|
104
108
|
- LICENSE
|
105
109
|
- README.md
|
@@ -107,36 +111,43 @@ files:
|
|
107
111
|
- bin/gem-search
|
108
112
|
- gem-search.gemspec
|
109
113
|
- lib/gem-search.rb
|
110
|
-
- lib/gem-search/
|
114
|
+
- lib/gem-search/command.rb
|
115
|
+
- lib/gem-search/executor.rb
|
116
|
+
- lib/gem-search/rendering.rb
|
111
117
|
- lib/gem-search/version.rb
|
112
118
|
- spec/bin/gem-search_spec.rb
|
113
|
-
- spec/
|
119
|
+
- spec/executor_spec.rb
|
120
|
+
- spec/http_stubs/cucumber-_1.json
|
121
|
+
- spec/http_stubs/cucumber-_2.json
|
122
|
+
- spec/http_stubs/cucumber-_3.json
|
114
123
|
- spec/spec_helper.rb
|
115
124
|
homepage: https://github.com/rochefort/gem-search
|
116
125
|
licenses: []
|
126
|
+
metadata: {}
|
117
127
|
post_install_message:
|
118
128
|
rdoc_options: []
|
119
129
|
require_paths:
|
120
130
|
- lib
|
121
131
|
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
132
|
requirements:
|
124
|
-
- -
|
133
|
+
- - ">="
|
125
134
|
- !ruby/object:Gem::Version
|
126
135
|
version: '0'
|
127
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
-
none: false
|
129
137
|
requirements:
|
130
|
-
- -
|
138
|
+
- - ">="
|
131
139
|
- !ruby/object:Gem::Version
|
132
140
|
version: '0'
|
133
141
|
requirements: []
|
134
142
|
rubyforge_project:
|
135
|
-
rubygems_version:
|
143
|
+
rubygems_version: 2.2.2
|
136
144
|
signing_key:
|
137
|
-
specification_version:
|
145
|
+
specification_version: 4
|
138
146
|
summary: search gems with using rubygems.org API
|
139
147
|
test_files:
|
140
148
|
- spec/bin/gem-search_spec.rb
|
141
|
-
- spec/
|
149
|
+
- spec/executor_spec.rb
|
150
|
+
- spec/http_stubs/cucumber-_1.json
|
151
|
+
- spec/http_stubs/cucumber-_2.json
|
152
|
+
- spec/http_stubs/cucumber-_3.json
|
142
153
|
- spec/spec_helper.rb
|
data/lib/gem-search/cli.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'open-uri'
|
3
|
-
|
4
|
-
module Gem::Search
|
5
|
-
class CLI
|
6
|
-
BASE_URL = 'https://rubygems.org'
|
7
|
-
SEARCH_URL = "#{BASE_URL}/api/v1/search.json?query="
|
8
|
-
DEFAULT_RULED_LINE_SIZE = [50, 8, 9]
|
9
|
-
|
10
|
-
def search(query, opt_sort='name')
|
11
|
-
return unless query
|
12
|
-
|
13
|
-
opt_sort ||= 'name'
|
14
|
-
url = "#{SEARCH_URL}#{query}"
|
15
|
-
|
16
|
-
begin
|
17
|
-
open_uri(url) do |f|
|
18
|
-
gems = JSON.parse(f.read)
|
19
|
-
if gems.size.zero?
|
20
|
-
puts 'We did not find results.'
|
21
|
-
return
|
22
|
-
end
|
23
|
-
fmt_size = ruled_line_size(gems)
|
24
|
-
gems_sort!(gems, opt_sort)
|
25
|
-
render_header(fmt_size)
|
26
|
-
render_body(gems, fmt_size)
|
27
|
-
end
|
28
|
-
rescue => e
|
29
|
-
puts 'An unexpected Network error has occurred.'
|
30
|
-
puts e
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
def open_uri(url, &block)
|
36
|
-
option = {}
|
37
|
-
proxy = URI.parse(url).find_proxy
|
38
|
-
if proxy
|
39
|
-
if proxy.user && proxy.password
|
40
|
-
option[:proxy_http_basic_authentication] = [proxy, proxy.user, proxy.password]
|
41
|
-
end
|
42
|
-
end
|
43
|
-
open(url, option, &block)
|
44
|
-
end
|
45
|
-
|
46
|
-
def ruled_line_size(gems)
|
47
|
-
line_size = DEFAULT_RULED_LINE_SIZE.dup
|
48
|
-
max_name_size = gems.map { |gem| "#{gem['name']} (#{gem['version']})".size }.max
|
49
|
-
line_size[0] = max_name_size if max_name_size > line_size[0]
|
50
|
-
line_size
|
51
|
-
end
|
52
|
-
|
53
|
-
def gems_sort!(gems, opt_sort)
|
54
|
-
if opt_sort == 'name'
|
55
|
-
gems.sort!{ |x,y| x[opt_sort] <=> y[opt_sort] }
|
56
|
-
else
|
57
|
-
gems.sort!{ |x,y| y[opt_sort] <=> x[opt_sort] }
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def render_header(f)
|
62
|
-
fmt = "%-#{f[0]}s %#{f[1]}s %#{f[2]}s"
|
63
|
-
puts fmt % ['NAME', 'DL(ver)', 'DL(all)']
|
64
|
-
puts fmt % ['-'*f[0], '-'*f[1], '-'*f[2]]
|
65
|
-
end
|
66
|
-
|
67
|
-
def render_body(gems, f)
|
68
|
-
fmt = "%-#{f[0]}s %#{f[1]}d %#{f[2]}d"
|
69
|
-
gems.each do |gem|
|
70
|
-
puts fmt % [
|
71
|
-
"#{gem['name']} (#{gem['version']})",
|
72
|
-
gem['version_downloads'],
|
73
|
-
gem['downloads']
|
74
|
-
]
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
end
|
data/spec/cli_spec.rb
DELETED
@@ -1,197 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Gem::Search::CLI do
|
4
|
-
describe '#search' do
|
5
|
-
before do
|
6
|
-
@cli = Gem::Search::CLI.new
|
7
|
-
stub_request(:get, build_search_uri('factory_girl')).
|
8
|
-
to_return(:status => 200, :body => dummy_search_result)
|
9
|
-
end
|
10
|
-
|
11
|
-
context 'when a network error occurred' do
|
12
|
-
before do
|
13
|
-
stub_request(:get, build_search_uri('network_error_orccurred')).
|
14
|
-
to_return(:status => 500, :body => '[]')
|
15
|
-
end
|
16
|
-
it 'should display a network error message' do
|
17
|
-
capture(:stdout) { @cli.search('network_error_orccurred') }.should match(/An unexpected Network error has occurred.\n/)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'with nonexistence gem' do
|
22
|
-
before do
|
23
|
-
stub_request(:get, build_search_uri('no_match_gem_name')).
|
24
|
-
to_return(:status => 200, :body => '[]')
|
25
|
-
end
|
26
|
-
it 'should display a nonexistence message' do
|
27
|
-
capture(:stdout) { @cli.search('no_match_gem_name') }.should == "We did not find results.\n"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'with existing gem' do
|
32
|
-
context 'with no sort option' do
|
33
|
-
it 'should display rubygems ordering by name' do
|
34
|
-
capture(:stdout) { @cli.search('factory_girl') }.should == <<-'EOS'
|
35
|
-
NAME DL(ver) DL(all)
|
36
|
-
-------------------------------------------------- -------- ---------
|
37
|
-
factory_girl (3.6.0) 541 2042859
|
38
|
-
factory_girl_generator (0.0.3) 8015 15547
|
39
|
-
factory_girl_rails (3.5.0) 39724 1238780
|
40
|
-
EOS
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'with sort option: [v]version_downloads' do
|
45
|
-
it "should display rubygems ordering by name" do
|
46
|
-
capture(:stdout) { @cli.search('factory_girl', 'version_downloads') }.should == <<'EOS'
|
47
|
-
NAME DL(ver) DL(all)
|
48
|
-
-------------------------------------------------- -------- ---------
|
49
|
-
factory_girl_rails (3.5.0) 39724 1238780
|
50
|
-
factory_girl_generator (0.0.3) 8015 15547
|
51
|
-
factory_girl (3.6.0) 541 2042859
|
52
|
-
EOS
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'with sort option: [a]download' do
|
57
|
-
it "should display rubygems ordering by name" do
|
58
|
-
capture(:stdout) { @cli.search('factory_girl', 'download') }.should == <<'EOS'
|
59
|
-
NAME DL(ver) DL(all)
|
60
|
-
-------------------------------------------------- -------- ---------
|
61
|
-
factory_girl (3.6.0) 541 2042859
|
62
|
-
factory_girl_rails (3.5.0) 39724 1238780
|
63
|
-
factory_girl_generator (0.0.3) 8015 15547
|
64
|
-
EOS
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe 'ruled NAME line' do
|
70
|
-
context 'NAME size is 42' do
|
71
|
-
before do
|
72
|
-
stub_request(:get, build_search_uri('size_is_42_2345678901234567890123456789012')).
|
73
|
-
to_return(:status => 200, :body => dummy_search_result_name_size_is_42)
|
74
|
-
end
|
75
|
-
it "should be 50 characters" do
|
76
|
-
capture(:stdout) { @cli.search('size_is_42_2345678901234567890123456789012') }.should == <<'EOS'
|
77
|
-
NAME DL(ver) DL(all)
|
78
|
-
-------------------------------------------------- -------- ---------
|
79
|
-
size_is_42_2345678901234567890123456789012 (0.0.1) 100 1000
|
80
|
-
EOS
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
context 'NAME size is 43' do
|
85
|
-
before do
|
86
|
-
stub_request(:get, build_search_uri('size_is_42_2345678901234567890123456789012')).
|
87
|
-
to_return(:status => 200, :body => dummy_search_result_name_size_is_43)
|
88
|
-
end
|
89
|
-
it "should be 51 characters" do
|
90
|
-
capture(:stdout) { @cli.search('size_is_42_2345678901234567890123456789012') }.should == <<'EOS'
|
91
|
-
NAME DL(ver) DL(all)
|
92
|
-
--------------------------------------------------- -------- ---------
|
93
|
-
size_is_43_23456789012345678901234567890123 (0.0.2) 200 2000
|
94
|
-
EOS
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
private
|
101
|
-
def build_search_uri(query)
|
102
|
-
"#{Gem::Search::CLI::SEARCH_URL}#{query}"
|
103
|
-
end
|
104
|
-
|
105
|
-
def dummy_search_result
|
106
|
-
# top 3 gems searching with 'factory_girl'
|
107
|
-
# https://rubygems.org/api/v1/search.json?query=factory_girl
|
108
|
-
[{"name"=>"factory_girl",
|
109
|
-
"downloads"=>2042859,
|
110
|
-
"version"=>"3.6.0",
|
111
|
-
"version_downloads"=>541,
|
112
|
-
"platform"=>"ruby",
|
113
|
-
"authors"=>"Josh Clayton, Joe Ferris",
|
114
|
-
"info"=>
|
115
|
-
"factory_girl provides a framework and DSL for defining and\n using factories - less error-prone, more explicit, and\n all-around easier to work with than fixtures.",
|
116
|
-
"project_uri"=>"http://rubygems.org/gems/factory_girl",
|
117
|
-
"gem_uri"=>"http://rubygems.org/gems/factory_girl-3.6.0.gem",
|
118
|
-
"homepage_uri"=>"https://github.com/thoughtbot/factory_girl",
|
119
|
-
"wiki_uri"=>"",
|
120
|
-
"documentation_uri"=>"",
|
121
|
-
"mailing_list_uri"=>"",
|
122
|
-
"source_code_uri"=>"https://github.com/thoughtbot/factory_girl",
|
123
|
-
"bug_tracker_uri"=>"",
|
124
|
-
"dependencies"=>
|
125
|
-
{"development"=>
|
126
|
-
[{"name"=>"appraisal", "requirements"=>"~> 0.4"},
|
127
|
-
{"name"=>"aruba", "requirements"=>">= 0"},
|
128
|
-
{"name"=>"bourne", "requirements"=>">= 0"},
|
129
|
-
{"name"=>"cucumber", "requirements"=>"~> 1.1"},
|
130
|
-
{"name"=>"mocha", "requirements"=>">= 0"},
|
131
|
-
{"name"=>"rspec", "requirements"=>"~> 2.0"},
|
132
|
-
{"name"=>"simplecov", "requirements"=>">= 0"},
|
133
|
-
{"name"=>"sqlite3-ruby", "requirements"=>">= 0"},
|
134
|
-
{"name"=>"timecop", "requirements"=>">= 0"},
|
135
|
-
{"name"=>"yard", "requirements"=>">= 0"}],
|
136
|
-
"runtime"=>[{"name"=>"activesupport", "requirements"=>">= 3.0.0"}]}},
|
137
|
-
{"name"=>"factory_girl_rails",
|
138
|
-
"downloads"=>1238780,
|
139
|
-
"version"=>"3.5.0",
|
140
|
-
"version_downloads"=>39724,
|
141
|
-
"platform"=>"ruby",
|
142
|
-
"authors"=>"Joe Ferris",
|
143
|
-
"info"=>
|
144
|
-
"factory_girl_rails provides integration between\n factory_girl and rails 3 (currently just automatic factory definition\n loading)",
|
145
|
-
"project_uri"=>"http://rubygems.org/gems/factory_girl_rails",
|
146
|
-
"gem_uri"=>"http://rubygems.org/gems/factory_girl_rails-3.5.0.gem",
|
147
|
-
"homepage_uri"=>"http://github.com/thoughtbot/factory_girl_rails",
|
148
|
-
"wiki_uri"=>nil,
|
149
|
-
"documentation_uri"=>nil,
|
150
|
-
"mailing_list_uri"=>nil,
|
151
|
-
"source_code_uri"=>nil,
|
152
|
-
"bug_tracker_uri"=>nil,
|
153
|
-
"dependencies"=>
|
154
|
-
{"development"=>
|
155
|
-
[{"name"=>"aruba", "requirements"=>">= 0"},
|
156
|
-
{"name"=>"cucumber", "requirements"=>"~> 1.0.0"},
|
157
|
-
{"name"=>"rails", "requirements"=>"= 3.0.7"},
|
158
|
-
{"name"=>"rake", "requirements"=>">= 0"},
|
159
|
-
{"name"=>"rspec", "requirements"=>"~> 2.6.0"}],
|
160
|
-
"runtime"=>
|
161
|
-
[{"name"=>"factory_girl", "requirements"=>"~> 3.5.0"},
|
162
|
-
{"name"=>"railties", "requirements"=>">= 3.0.0"}]}},
|
163
|
-
{"name"=>"factory_girl_generator",
|
164
|
-
"downloads"=>15547,
|
165
|
-
"version"=>"0.0.3",
|
166
|
-
"version_downloads"=>8015,
|
167
|
-
"platform"=>"ruby",
|
168
|
-
"authors"=>"Les Hill",
|
169
|
-
"info"=>"Rails 3 generator for factory_girl",
|
170
|
-
"project_uri"=>"http://rubygems.org/gems/factory_girl_generator",
|
171
|
-
"gem_uri"=>"http://rubygems.org/gems/factory_girl_generator-0.0.3.gem",
|
172
|
-
"homepage_uri"=>"http://github.com/leshill/factory_girl_generator",
|
173
|
-
"wiki_uri"=>nil,
|
174
|
-
"documentation_uri"=>nil,
|
175
|
-
"mailing_list_uri"=>nil,
|
176
|
-
"source_code_uri"=>nil,
|
177
|
-
"bug_tracker_uri"=>nil,
|
178
|
-
"dependencies"=>{"development"=>[], "runtime"=>[]}}
|
179
|
-
].to_json
|
180
|
-
end
|
181
|
-
|
182
|
-
def dummy_search_result_name_size_is_42
|
183
|
-
[{"name"=>"size_is_42_2345678901234567890123456789012",
|
184
|
-
"downloads"=>1000,
|
185
|
-
"version"=>"0.0.1",
|
186
|
-
"version_downloads"=>100}
|
187
|
-
].to_json
|
188
|
-
end
|
189
|
-
|
190
|
-
def dummy_search_result_name_size_is_43
|
191
|
-
[{"name"=>"size_is_43_23456789012345678901234567890123",
|
192
|
-
"downloads"=>2000,
|
193
|
-
"version"=>"0.0.2",
|
194
|
-
"version_downloads"=>200}
|
195
|
-
].to_json
|
196
|
-
end
|
197
|
-
end
|