bestgems 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +12 -0
- data/LICENSE.txt +22 -0
- data/README.md +45 -0
- data/Rakefile +7 -0
- data/bestgems.gemspec +24 -0
- data/lib/bestgems.rb +25 -0
- data/lib/bestgems/client.rb +32 -0
- data/lib/bestgems/client/trends.rb +33 -0
- data/lib/bestgems/version.rb +3 -0
- data/spec/bestgems/client_spec.rb +15 -0
- data/spec/bestgems/trends_spec.rb +47 -0
- data/spec/bestgems_spec.rb +14 -0
- data/spec/cassettes/daily_downloads.yml +38 -0
- data/spec/cassettes/daily_ranking.yml +38 -0
- data/spec/cassettes/get.yml +126 -0
- data/spec/cassettes/total_downloads.yml +38 -0
- data/spec/cassettes/total_downloads_error.yml +44 -0
- data/spec/cassettes/total_ranking.yml +38 -0
- data/spec/spec_helper.rb +11 -0
- metadata +132 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 437a5e1801d2120bd414cbff9caf29e5bd4cb378
|
4
|
+
data.tar.gz: a5777bdf038f5e5f176f0f7b546dfa1824493cfc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f5a1f44bd8389806964e62604b475a607ae958bee4304cc066b1e42a40cf48d81e865177806deab34fa26eb0dded226ed2c301e99072388381698a8c58be103c
|
7
|
+
data.tar.gz: 7ad21af4b139dd40fa562b5bd738fe87fba7b6f681dccdb9622fa494b3471ed502c9f4f01b0ae4bb0e00e23e88dab2843ad8e8604827e2aba79be72f6282a8c0
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 kyoendo
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Bestgems
|
2
|
+
|
3
|
+
Ruby wrapper for the BestGems.org API.
|
4
|
+
|
5
|
+
>[BestGems -- Ruby Gems Download Ranking](http://bestgems.org/ "BestGems -- Ruby Gems Download Ranking")
|
6
|
+
>
|
7
|
+
>[BestGems API v1 Specification · xmisao/bestgems.org Wiki](https://github.com/xmisao/bestgems.org/wiki/BestGems-API-v1-Specification "BestGems API v1 Specification · xmisao/bestgems.org Wiki")
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
gem 'bestgems'
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install bestgems
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
require 'bestgems'
|
27
|
+
|
28
|
+
client = Bestgems.client
|
29
|
+
|
30
|
+
client.total_downloads(:rack) # => [{:date=>"2014-08-06", :total_downloads=>48365953}, {:date=>"2014-08-05", :total_downloads=>48305390}, {:date=>"2014-08-04", :total_downloads=>48246069}, {:date=>"2014-08-03", :total_downloads=>48203248}, {:date=>"2014-08-02", :total_downloads=>48172608}, ... ]
|
31
|
+
|
32
|
+
client.daily_downloads(:rack) # => [{:date=>"2014-08-06", :daily_downloads=>60563}, {:date=>"2014-08-05", :daily_downloads=>59321}, {:date=>"2014-08-04", :daily_downloads=>42821}, {:date=>"2014-08-03", :daily_downloads=>30640}, ... ]
|
33
|
+
|
34
|
+
client.total_ranking(:rack) # => [{:date=>"2014-08-06", :total_ranking=>2}, {:date=>"2014-08-05", :total_ranking=>2}, {:date=>"2014-08-04", :total_ranking=>2}, {:date=>"2014-08-03", :total_ranking=>2}, {:date=>"2014-08-02", :total_ranking=>2}, ... ]
|
35
|
+
|
36
|
+
client.daily_ranking(:rack) # => [{:date=>"2014-08-06", :daily_ranking=>6}, {:date=>"2014-08-05", :daily_ranking=>7}, {:date=>"2014-08-04", :daily_ranking=>4}, {:date=>"2014-08-03", :daily_ranking=>3}, {:date=>"2014-08-02", :daily_ranking=>3}, ... ]
|
37
|
+
```
|
38
|
+
|
39
|
+
## Contributing
|
40
|
+
|
41
|
+
1. Fork it ( https://github.com/[my-github-username]/bestgems/fork )
|
42
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
43
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
44
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
45
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/bestgems.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'bestgems/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "bestgems"
|
8
|
+
spec.version = Bestgems::VERSION
|
9
|
+
spec.authors = ["kyoendo"]
|
10
|
+
spec.email = ["postagie@gmail.com"]
|
11
|
+
spec.summary = %q{Ruby wrapper for the BestGems.org API}
|
12
|
+
spec.homepage = "https://github.com/melborne/bestgems"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency "faraday"
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
end
|
data/lib/bestgems.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require "bestgems/version"
|
2
|
+
require "bestgems/client"
|
3
|
+
|
4
|
+
module Bestgems
|
5
|
+
API_HOST = "http://bestgems.org/api".freeze
|
6
|
+
API_VERSION = "v1".freeze
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def api_host
|
10
|
+
ENV['BESTGEMS_API_HOST'] || API_HOST
|
11
|
+
end
|
12
|
+
|
13
|
+
def api_version
|
14
|
+
ENV['BESTGEMS_API_VERSION'] || API_VERSION
|
15
|
+
end
|
16
|
+
|
17
|
+
def api_gems_endpoint
|
18
|
+
File.join(api_host, api_version, 'gems')
|
19
|
+
end
|
20
|
+
|
21
|
+
def client
|
22
|
+
@client ||= Client.new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "faraday"
|
2
|
+
require "bestgems/client/trends"
|
3
|
+
|
4
|
+
module Bestgems
|
5
|
+
class Client
|
6
|
+
include Bestgems::Client::Trends
|
7
|
+
|
8
|
+
class NotFound < StandardError; end
|
9
|
+
|
10
|
+
def get(url, **opts)
|
11
|
+
request :get, url, opts
|
12
|
+
end
|
13
|
+
|
14
|
+
def request(method, path, **opts)
|
15
|
+
response = agent.send(method, path.to_s, opts)
|
16
|
+
case response.status
|
17
|
+
when 404
|
18
|
+
raise NotFound
|
19
|
+
when 200
|
20
|
+
response.body
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def agent
|
25
|
+
@agent ||= ::Faraday.new do |http|
|
26
|
+
http.request :url_encoded
|
27
|
+
# http.response :logger
|
28
|
+
http.adapter :net_http
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module Bestgems
|
4
|
+
class Client
|
5
|
+
module Trends
|
6
|
+
def total_downloads(gem_name)
|
7
|
+
res = get "#{Bestgems.api_gems_endpoint}/#{gem_name}/total_downloads.json"
|
8
|
+
json2rb_obj(res)
|
9
|
+
end
|
10
|
+
|
11
|
+
def daily_downloads(gem_name)
|
12
|
+
res = get "#{Bestgems.api_gems_endpoint}/#{gem_name}/daily_downloads.json"
|
13
|
+
json2rb_obj(res)
|
14
|
+
end
|
15
|
+
|
16
|
+
def total_ranking(gem_name)
|
17
|
+
res = get "#{Bestgems.api_gems_endpoint}/#{gem_name}/total_ranking.json"
|
18
|
+
json2rb_obj(res)
|
19
|
+
end
|
20
|
+
|
21
|
+
def daily_ranking(gem_name)
|
22
|
+
res = get "#{Bestgems.api_gems_endpoint}/#{gem_name}/daily_ranking.json"
|
23
|
+
json2rb_obj(res)
|
24
|
+
end
|
25
|
+
|
26
|
+
def json2rb_obj(data)
|
27
|
+
JSON.parse(data).map do |h|
|
28
|
+
h.inject({}) { |h, (k, v)| h[k.intern] = v; h }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bestgems::Client do
|
4
|
+
describe ".get", vcr:{cassette_name:'get'} do
|
5
|
+
let(:client) { Bestgems::Client.new }
|
6
|
+
before do
|
7
|
+
@test_endpoint = "http://bestgems.org"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "handles request" do
|
11
|
+
client.get @test_endpoint
|
12
|
+
assert_requested :get, @test_endpoint
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bestgems::Client do
|
4
|
+
let(:client) { Bestgems::Client.new }
|
5
|
+
|
6
|
+
describe "#total_downloads", vcr:{cassette_name:'total_downloads'} do
|
7
|
+
it "gets an array of data hashes" do
|
8
|
+
res = client.total_downloads('colcolor')
|
9
|
+
expect(res).to be_a Array
|
10
|
+
expect(res.first).to be_a Hash
|
11
|
+
expect(res.first.keys).to contain_exactly(:date, :total_downloads)
|
12
|
+
end
|
13
|
+
|
14
|
+
context "with an absent gem name", vcr:{cassette_name:'total_downloads_error'} do
|
15
|
+
it "raises NotFound error" do
|
16
|
+
expect {client.total_downloads ''}.to raise_error(Bestgems::Client::NotFound)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#daily_downloads", vcr:{cassette_name:'daily_downloads'} do
|
22
|
+
it "gets an array of data hashes" do
|
23
|
+
res = client.daily_downloads('colcolor')
|
24
|
+
expect(res).to be_a Array
|
25
|
+
expect(res.first).to be_a Hash
|
26
|
+
expect(res.first.keys).to contain_exactly(:date, :daily_downloads)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#total_ranking", vcr:{cassette_name:'total_ranking'} do
|
31
|
+
it "gets an array of data hashes" do
|
32
|
+
res = client.total_ranking('colcolor')
|
33
|
+
expect(res).to be_a Array
|
34
|
+
expect(res.first).to be_a Hash
|
35
|
+
expect(res.first.keys).to contain_exactly(:date, :total_ranking)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#daily_ranking", vcr:{cassette_name:'daily_ranking'} do
|
40
|
+
it "gets an array of data hashes" do
|
41
|
+
res = client.daily_ranking('colcolor')
|
42
|
+
expect(res).to be_a Array
|
43
|
+
expect(res.first).to be_a Hash
|
44
|
+
expect(res.first.keys).to contain_exactly(:date, :daily_ranking)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bestgems do
|
4
|
+
it 'has a version number' do
|
5
|
+
expect(Bestgems::VERSION).not_to be nil
|
6
|
+
end
|
7
|
+
|
8
|
+
describe ".client" do
|
9
|
+
it "creates an Bestgems Client" do
|
10
|
+
expect(Bestgems.client).to be_kind_of Bestgems::Client
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://bestgems.org/api/v1/gems/colcolor/daily_downloads.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.2.1
|
23
|
+
Date:
|
24
|
+
- Thu, 07 Aug 2014 01:44:49 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Content-Length:
|
28
|
+
- '982'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
X-Content-Type-Options:
|
32
|
+
- nosniff
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: '[{"date":"2014-08-06","daily_downloads":10},{"date":"2014-08-05","daily_downloads":15},{"date":"2014-08-04","daily_downloads":9},{"date":"2014-08-03","daily_downloads":13},{"date":"2014-08-02","daily_downloads":19},{"date":"2014-08-01","daily_downloads":8},{"date":"2014-07-31","daily_downloads":59},{"date":"2014-07-30","daily_downloads":57},{"date":"2014-07-29","daily_downloads":19},{"date":"2014-07-28","daily_downloads":25},{"date":"2014-07-27","daily_downloads":4},{"date":"2014-07-26","daily_downloads":1},{"date":"2014-07-25","daily_downloads":9},{"date":"2014-07-24","daily_downloads":69},{"date":"2014-07-23","daily_downloads":20},{"date":"2014-07-22","daily_downloads":1},{"date":"2014-07-21","daily_downloads":19},{"date":"2014-07-20","daily_downloads":14},{"date":"2014-07-19","daily_downloads":7},{"date":"2014-07-18","daily_downloads":0},{"date":"2014-07-17","daily_downloads":3},{"date":"2014-07-16","daily_downloads":38},{"date":"2014-07-15","daily_downloads":159}]'
|
36
|
+
http_version:
|
37
|
+
recorded_at: Thu, 07 Aug 2014 01:44:24 GMT
|
38
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://bestgems.org/api/v1/gems/colcolor/daily_ranking.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.2.1
|
23
|
+
Date:
|
24
|
+
- Thu, 07 Aug 2014 01:44:49 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Content-Length:
|
28
|
+
- '996'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
X-Content-Type-Options:
|
32
|
+
- nosniff
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: '[{"date":"2014-08-06","daily_ranking":8533},{"date":"2014-08-05","daily_ranking":5292},{"date":"2014-08-04","daily_ranking":5541},{"date":"2014-08-03","daily_ranking":3311},{"date":"2014-08-02","daily_ranking":8345},{"date":"2014-08-01","daily_ranking":6557},{"date":"2014-07-31","daily_ranking":3900},{"date":"2014-07-30","daily_ranking":8676},{"date":"2014-07-29","daily_ranking":13927},{"date":"2014-07-28","daily_ranking":5333},{"date":"2014-07-27","daily_ranking":5050},{"date":"2014-07-26","daily_ranking":11628},{"date":"2014-07-25","daily_ranking":24633},{"date":"2014-07-24","daily_ranking":4591},{"date":"2014-07-23","daily_ranking":4898},{"date":"2014-07-22","daily_ranking":30629},{"date":"2014-07-21","daily_ranking":5702},{"date":"2014-07-20","daily_ranking":6884},{"date":"2014-07-19","daily_ranking":11234},{"date":"2014-07-18","daily_ranking":27172},{"date":"2014-07-17","daily_ranking":9930},{"date":"2014-07-16","daily_ranking":3749},{"date":"2014-07-15","daily_ranking":1694}]'
|
36
|
+
http_version:
|
37
|
+
recorded_at: Thu, 07 Aug 2014 01:44:24 GMT
|
38
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,126 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://bestgems.org/
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.2.1
|
23
|
+
Date:
|
24
|
+
- Thu, 07 Aug 2014 01:26:33 GMT
|
25
|
+
Content-Type:
|
26
|
+
- text/html;charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
X-Xss-Protection:
|
32
|
+
- 1; mode=block
|
33
|
+
X-Content-Type-Options:
|
34
|
+
- nosniff
|
35
|
+
X-Frame-Options:
|
36
|
+
- SAMEORIGIN
|
37
|
+
body:
|
38
|
+
encoding: UTF-8
|
39
|
+
string: "<!DOCTYPE html>\n<html>\n<head>\n<title>BestGems -- Ruby Gems Download
|
40
|
+
Ranking</title>\n<link href=\"../bootstrap/css/bootstrap.css\" rel=\"stylesheet\">\n<link
|
41
|
+
href=\"../css/theme.css\" rel=\"stylesheet\">\n</head>\n<body>\n\n<div class=\"container-narrow\">\n\t<div
|
42
|
+
class=\"masthead\">\n\t<ul class=\"nav nav-pills pull-right\">\n\t\t<li><a
|
43
|
+
href=\"/total\">Total</a></li>\n\t\t<li><a href=\"/daily\">Daily</a></li>\n\t\t<li><a
|
44
|
+
href=\"/featured\">Featured</a></li>\n\t\t<li><a href=\"https://github.com/xmisao/bestgems.org/wiki/BestGems-API-v1-Specification\">API</a></li>\n\t\t<li><a
|
45
|
+
href=\"/about\">About</a></li>\n\t\t<li>\n\t\t\t<form class=\"form-search\"
|
46
|
+
action=\"/search\" method=\"GET\">\n\t\t\t\t<input type=\"text\" class=\"input-medium
|
47
|
+
search-query\" name=\"q\">\n\t\t\t\t<button type=\"submit\" class=\"btn\"><i
|
48
|
+
class=\"icon-search\"></i></button>\n\t\t\t</form>\n\t\t</li>\n\t</ul>\n\t<h3><a
|
49
|
+
href=\"/\" class=\"header\">BestGems</a></h3>\n</div>\n\n\n\t<hr>\n\n\t<div
|
50
|
+
class=\"jumbotron\">\n\t\t<h1 class=\"logo\">BestGems</h1>\n\t\t<p class=\"lead\">Ruby
|
51
|
+
gems download ranking. Find the best gem package for you!</p>\n <p>BestGems.org
|
52
|
+
is <a href=\"https://github.com/xmisao/bestgems.org\">opensouce</a>. Please,
|
53
|
+
contribute!</p>\n\t</div>\n\n\t<hr>\n\n\t<div class=\"row-fluid marketing\">\n\t\t<div
|
54
|
+
class=\"span6\">\n\t\t\t<h4><a href=\"/total\">Total Downloads Ranking</a></h4>\n\t\t\t<table
|
55
|
+
class=\"table table-striped\">\n\t\t\t\t<tr><th>Rank</th><th>Downloads</th><th>Name</th></tr>\n\t\t\t\t<tr><td
|
56
|
+
class=\"center\">1</td><td class=\"center\">53,409,869</td><td><a href=\"/gems/rake\">rake</a></td></tr>\n\t\t\t\t<tr><td
|
57
|
+
class=\"center\">2</td><td class=\"center\">48,365,953</td><td><a href=\"/gems/rack\">rack</a></td></tr>\n\t\t\t\t<tr><td
|
58
|
+
class=\"center\">3</td><td class=\"center\">46,457,023</td><td><a href=\"/gems/thor\">thor</a></td></tr>\n\t\t\t\t<tr><td
|
59
|
+
class=\"center\">4</td><td class=\"center\">44,745,927</td><td><a href=\"/gems/activesupport\">activesupport</a></td></tr>\n\t\t\t\t<tr><td
|
60
|
+
class=\"center\">5</td><td class=\"center\">42,146,688</td><td><a href=\"/gems/multi_json\">multi_json</a></td></tr>\n\t\t\t\t<tr><td
|
61
|
+
class=\"center\">6</td><td class=\"center\">41,887,767</td><td><a href=\"/gems/json\">json</a></td></tr>\n\t\t\t\t<tr><td
|
62
|
+
class=\"center\">7</td><td class=\"center\">40,740,166</td><td><a href=\"/gems/mime-types\">mime-types</a></td></tr>\n\t\t\t\t<tr><td
|
63
|
+
class=\"center\">8</td><td class=\"center\">38,925,105</td><td><a href=\"/gems/i18n\">i18n</a></td></tr>\n\t\t\t\t<tr><td
|
64
|
+
class=\"center\">9</td><td class=\"center\">37,887,715</td><td><a href=\"/gems/rails\">rails</a></td></tr>\n\t\t\t\t<tr><td
|
65
|
+
class=\"center\">10</td><td class=\"center\">37,694,788</td><td><a href=\"/gems/builder\">builder</a></td></tr>\n\t\t\t</table>\n\t\t\t<p
|
66
|
+
class=\"text-right\"><a class=\"btn\" href=\"/total\">more...</a></p>\n\t\t</div>\n\t\t<div
|
67
|
+
class=\"span6\">\n\t\t\t<h4><a href=\"/daily\">Daily Downloads Ranking</a></h4>\n\t\t\t<table
|
68
|
+
class=\"table table-striped\">\n\t\t\t\t<tr><th>Rank</th><th>Downloads</th><th>Name</th></tr>\n\t\t\t\t<tr><td
|
69
|
+
class=\"center\">1</td><td class=\"center\">73,159</td><td><a href=\"/gems/rake\">rake</a></td></tr>\n\t\t\t\t<tr><td
|
70
|
+
class=\"center\">2</td><td class=\"center\">69,708</td><td><a href=\"/gems/multi_json\">multi_json</a></td></tr>\n\t\t\t\t<tr><td
|
71
|
+
class=\"center\">3</td><td class=\"center\">66,200</td><td><a href=\"/gems/json\">json</a></td></tr>\n\t\t\t\t<tr><td
|
72
|
+
class=\"center\">4</td><td class=\"center\">63,847</td><td><a href=\"/gems/mime-types\">mime-types</a></td></tr>\n\t\t\t\t<tr><td
|
73
|
+
class=\"center\">5</td><td class=\"center\">62,719</td><td><a href=\"/gems/i18n\">i18n</a></td></tr>\n\t\t\t\t<tr><td
|
74
|
+
class=\"center\">6</td><td class=\"center\">60,563</td><td><a href=\"/gems/rack\">rack</a></td></tr>\n\t\t\t\t<tr><td
|
75
|
+
class=\"center\">7</td><td class=\"center\">59,854</td><td><a href=\"/gems/activesupport\">activesupport</a></td></tr>\n\t\t\t\t<tr><td
|
76
|
+
class=\"center\">8</td><td class=\"center\">55,803</td><td><a href=\"/gems/builder\">builder</a></td></tr>\n\t\t\t\t<tr><td
|
77
|
+
class=\"center\">9</td><td class=\"center\">55,314</td><td><a href=\"/gems/thor\">thor</a></td></tr>\n\t\t\t\t<tr><td
|
78
|
+
class=\"center\">10</td><td class=\"center\">54,453</td><td><a href=\"/gems/tzinfo\">tzinfo</a></td></tr>\n\t\t\t</table>\n\t\t\t<p
|
79
|
+
class=\"text-right\"><a class=\"btn\" href=\"/daily\">more...</a></p>\n\t\t</div>\n\t</div>\n\t<div
|
80
|
+
class=\"row-fluid marketing\">\n\t\t<div class=\"span6\">\n\t\t\t<h4><a href=\"/featured\">Featured
|
81
|
+
Gems Ranking</a></h4>\n\t\t\t<table class=\"table table-striped\">\n\t\t\t\t<tr><th>Rank</th><th>Diff</th><th>Daily
|
82
|
+
Rank</th><th>Total Rank</th><th>Name</th></tr>\n\t\t\t\t<tr><td class=\"center\">1</td><td
|
83
|
+
class=\"center\">+56,515</td><td class=\"center\">659</td><td class=\"center\">57,174</td><td><a
|
84
|
+
href=\"/gems/rejectu\">rejectu</a></td></tr>\n\t\t\t\t<tr><td class=\"center\">2</td><td
|
85
|
+
class=\"center\">+29,216</td><td class=\"center\">946</td><td class=\"center\">30,162</td><td><a
|
86
|
+
href=\"/gems/roadie-rails\">roadie-rails</a></td></tr>\n\t\t\t\t<tr><td class=\"center\">3</td><td
|
87
|
+
class=\"center\">+25,822</td><td class=\"center\">977</td><td class=\"center\">26,799</td><td><a
|
88
|
+
href=\"/gems/mondupe\">mondupe</a></td></tr>\n\t\t\t\t<tr><td class=\"center\">4</td><td
|
89
|
+
class=\"center\">+17,332</td><td class=\"center\">503</td><td class=\"center\">17,835</td><td><a
|
90
|
+
href=\"/gems/power_assert\">power_assert</a></td></tr>\n\t\t\t\t<tr><td class=\"center\">5</td><td
|
91
|
+
class=\"center\">+12,469</td><td class=\"center\">967</td><td class=\"center\">13,436</td><td><a
|
92
|
+
href=\"/gems/mkfifo\">mkfifo</a></td></tr>\n\t\t\t\t<tr><td class=\"center\">6</td><td
|
93
|
+
class=\"center\">+8,164</td><td class=\"center\">949</td><td class=\"center\">9,113</td><td><a
|
94
|
+
href=\"/gems/xml-fu\">xml-fu</a></td></tr>\n\t\t\t\t<tr><td class=\"center\">7</td><td
|
95
|
+
class=\"center\">+7,152</td><td class=\"center\">879</td><td class=\"center\">8,031</td><td><a
|
96
|
+
href=\"/gems/toastr-rails\">toastr-rails</a></td></tr>\n\t\t\t\t<tr><td class=\"center\">8</td><td
|
97
|
+
class=\"center\">+6,472</td><td class=\"center\">894</td><td class=\"center\">7,366</td><td><a
|
98
|
+
href=\"/gems/zillabyte-cli\">zillabyte-cli</a></td></tr>\n\t\t\t\t<tr><td
|
99
|
+
class=\"center\">9</td><td class=\"center\">+6,220</td><td class=\"center\">898</td><td
|
100
|
+
class=\"center\">7,118</td><td><a href=\"/gems/zillabyte\">zillabyte</a></td></tr>\n\t\t\t\t<tr><td
|
101
|
+
class=\"center\">10</td><td class=\"center\">+5,686</td><td class=\"center\">980</td><td
|
102
|
+
class=\"center\">6,666</td><td><a href=\"/gems/crass\">crass</a></td></tr>\n\t\t\t</table>\n\t\t\t<p
|
103
|
+
class=\"text-right\"><a class=\"btn\" href=\"/featured\">more...</a></p>\n\t\t</div>\n\t\t<div
|
104
|
+
class=\"span6\">\n\t\t\t<h4>Statistics</h4>\n\t\t\t<table class=\"table table-striped\">\n\t\t\t\t<tr><th>#</th><th>Title</th></tr>\n\t\t\t\t<tr><td
|
105
|
+
class=\"center\">1</td><td><a href=\"/stat/gems\">Number of All Gems</a></td></tr>\n\t\t\t\t<tr><td
|
106
|
+
class=\"center\">2</td><td><a href=\"/stat/download\">Download Trends of All
|
107
|
+
Gems</a></td></tr>\n\t\t\t</table>\n\t\t\t<h4>Reports</h4>\n\t\t\t<table class=\"table
|
108
|
+
table-striped\">\n\t\t\t\t<tr><th>Title</th><th>Summary</th></tr>\n\t\t\t\t<tr><td><a
|
109
|
+
href=\"/reports/2013H2\">H2, 2013</td><td>Second half of 2013, semiannual
|
110
|
+
report. Between Jul 1 and Dec 31.</td></tr>\n\t\t\t\t<tr><td><a href=\"/reports/2013Q4\">Q4,
|
111
|
+
2013</td><td>Final quarter of 2013, quarterly report. Between Oct 1 and Dec
|
112
|
+
31.</td></tr>\n\t\t\t\t<tr><td><a href=\"/reports/2013Q3\">Q3, 2013</td><td>3rd
|
113
|
+
quarter of 2013, quarterly report. Between Jul 1 and Sep 30.</td></tr>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\n\t<div
|
114
|
+
class=\"row\">\n\t<script type=\"text/javascript\"><!--\n\tgoogle_ad_client
|
115
|
+
= \"ca-pub-8257359908391644\";\n\t/* bestgems_bottom */\n\tgoogle_ad_slot
|
116
|
+
= \"4115061810\";\n\tgoogle_ad_width = 728;\n\tgoogle_ad_height = 90;\n\t//-->\n\t</script>\n\t<script
|
117
|
+
type=\"text/javascript\"\n\tsrc=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\">\n\t</script>\n</div>\n\n</div>\n\n\n<script
|
118
|
+
type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount',
|
119
|
+
'UA-42168722-1']);\n _gaq.push(['_trackPageview']);\n\n (function() {\n
|
120
|
+
\ var ga = document.createElement('script'); ga.type = 'text/javascript';
|
121
|
+
ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl'
|
122
|
+
: 'http://www') + '.google-analytics.com/ga.js';\n var s = document.getElementsByTagName('script')[0];
|
123
|
+
s.parentNode.insertBefore(ga, s);\n })();\n\n</script>\n</body>\n</html>\n"
|
124
|
+
http_version:
|
125
|
+
recorded_at: Thu, 07 Aug 2014 01:26:08 GMT
|
126
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://bestgems.org/api/v1/gems/colcolor/total_downloads.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.2.1
|
23
|
+
Date:
|
24
|
+
- Thu, 07 Aug 2014 01:35:27 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Content-Length:
|
28
|
+
- '1056'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
X-Content-Type-Options:
|
32
|
+
- nosniff
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: '[{"date":"2014-08-06","total_downloads":592},{"date":"2014-08-05","total_downloads":582},{"date":"2014-08-04","total_downloads":567},{"date":"2014-08-03","total_downloads":558},{"date":"2014-08-02","total_downloads":545},{"date":"2014-08-01","total_downloads":526},{"date":"2014-07-31","total_downloads":518},{"date":"2014-07-30","total_downloads":459},{"date":"2014-07-29","total_downloads":402},{"date":"2014-07-28","total_downloads":383},{"date":"2014-07-27","total_downloads":358},{"date":"2014-07-26","total_downloads":354},{"date":"2014-07-25","total_downloads":353},{"date":"2014-07-24","total_downloads":344},{"date":"2014-07-23","total_downloads":275},{"date":"2014-07-22","total_downloads":255},{"date":"2014-07-21","total_downloads":254},{"date":"2014-07-20","total_downloads":235},{"date":"2014-07-19","total_downloads":221},{"date":"2014-07-18","total_downloads":214},{"date":"2014-07-17","total_downloads":214},{"date":"2014-07-16","total_downloads":211},{"date":"2014-07-15","total_downloads":173},{"date":"2014-07-14","total_downloads":14}]'
|
36
|
+
http_version:
|
37
|
+
recorded_at: Thu, 07 Aug 2014 01:35:02 GMT
|
38
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://bestgems.org/api/v1/gems//total_downloads.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 404
|
19
|
+
message: Not Found
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.2.1
|
23
|
+
Date:
|
24
|
+
- Thu, 07 Aug 2014 01:50:32 GMT
|
25
|
+
Content-Type:
|
26
|
+
- text/html;charset=utf-8
|
27
|
+
Content-Length:
|
28
|
+
- '18'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
X-Cascade:
|
32
|
+
- pass
|
33
|
+
X-Xss-Protection:
|
34
|
+
- 1; mode=block
|
35
|
+
X-Content-Type-Options:
|
36
|
+
- nosniff
|
37
|
+
X-Frame-Options:
|
38
|
+
- SAMEORIGIN
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: "<h1>Not Found</h1>"
|
42
|
+
http_version:
|
43
|
+
recorded_at: Thu, 07 Aug 2014 01:50:06 GMT
|
44
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://bestgems.org/api/v1/gems/colcolor/total_ranking.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.2.1
|
23
|
+
Date:
|
24
|
+
- Thu, 07 Aug 2014 01:44:49 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Content-Length:
|
28
|
+
- '1057'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
X-Content-Type-Options:
|
32
|
+
- nosniff
|
33
|
+
body:
|
34
|
+
encoding: UTF-8
|
35
|
+
string: '[{"date":"2014-08-06","total_ranking":68455},{"date":"2014-08-05","total_ranking":68680},{"date":"2014-08-04","total_ranking":69046},{"date":"2014-08-03","total_ranking":69224},{"date":"2014-08-02","total_ranking":69541},{"date":"2014-08-01","total_ranking":69947},{"date":"2014-07-31","total_ranking":70141},{"date":"2014-07-30","total_ranking":71403},{"date":"2014-07-29","total_ranking":72594},{"date":"2014-07-28","total_ranking":72913},{"date":"2014-07-27","total_ranking":73372},{"date":"2014-07-26","total_ranking":73442},{"date":"2014-07-25","total_ranking":73451},{"date":"2014-07-24","total_ranking":73564},{"date":"2014-07-23","total_ranking":75108},{"date":"2014-07-22","total_ranking":75538},{"date":"2014-07-21","total_ranking":75521},{"date":"2014-07-20","total_ranking":75921},{"date":"2014-07-19","total_ranking":76196},{"date":"2014-07-18","total_ranking":76330},{"date":"2014-07-17","total_ranking":76306},{"date":"2014-07-16","total_ranking":76358},{"date":"2014-07-15","total_ranking":77198},{"date":"2014-07-14","total_ranking":78402}]'
|
36
|
+
http_version:
|
37
|
+
recorded_at: Thu, 07 Aug 2014 01:44:24 GMT
|
38
|
+
recorded_with: VCR 2.9.2
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
require 'bestgems'
|
3
|
+
require "vcr"
|
4
|
+
require "webmock/rspec"
|
5
|
+
|
6
|
+
VCR.configure do |c|
|
7
|
+
c.cassette_library_dir = 'spec/cassettes'
|
8
|
+
c.hook_into :webmock
|
9
|
+
c.allow_http_connections_when_no_cassette = true
|
10
|
+
c.configure_rspec_metadata!
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bestgems
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- kyoendo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- postagie@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- ".travis.yml"
|
79
|
+
- Gemfile
|
80
|
+
- LICENSE.txt
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- bestgems.gemspec
|
84
|
+
- lib/bestgems.rb
|
85
|
+
- lib/bestgems/client.rb
|
86
|
+
- lib/bestgems/client/trends.rb
|
87
|
+
- lib/bestgems/version.rb
|
88
|
+
- spec/bestgems/client_spec.rb
|
89
|
+
- spec/bestgems/trends_spec.rb
|
90
|
+
- spec/bestgems_spec.rb
|
91
|
+
- spec/cassettes/daily_downloads.yml
|
92
|
+
- spec/cassettes/daily_ranking.yml
|
93
|
+
- spec/cassettes/get.yml
|
94
|
+
- spec/cassettes/total_downloads.yml
|
95
|
+
- spec/cassettes/total_downloads_error.yml
|
96
|
+
- spec/cassettes/total_ranking.yml
|
97
|
+
- spec/spec_helper.rb
|
98
|
+
homepage: https://github.com/melborne/bestgems
|
99
|
+
licenses:
|
100
|
+
- MIT
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 2.3.0
|
119
|
+
signing_key:
|
120
|
+
specification_version: 4
|
121
|
+
summary: Ruby wrapper for the BestGems.org API
|
122
|
+
test_files:
|
123
|
+
- spec/bestgems/client_spec.rb
|
124
|
+
- spec/bestgems/trends_spec.rb
|
125
|
+
- spec/bestgems_spec.rb
|
126
|
+
- spec/cassettes/daily_downloads.yml
|
127
|
+
- spec/cassettes/daily_ranking.yml
|
128
|
+
- spec/cassettes/get.yml
|
129
|
+
- spec/cassettes/total_downloads.yml
|
130
|
+
- spec/cassettes/total_downloads_error.yml
|
131
|
+
- spec/cassettes/total_ranking.yml
|
132
|
+
- spec/spec_helper.rb
|