bestgems 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 437a5e1801d2120bd414cbff9caf29e5bd4cb378
4
- data.tar.gz: a5777bdf038f5e5f176f0f7b546dfa1824493cfc
3
+ metadata.gz: 14c1d35feeed1b53232a0901bfd270044e5c6a84
4
+ data.tar.gz: 7161163e4c619fa77fcf9e3e1656a3211f0f5a45
5
5
  SHA512:
6
- metadata.gz: f5a1f44bd8389806964e62604b475a607ae958bee4304cc066b1e42a40cf48d81e865177806deab34fa26eb0dded226ed2c301e99072388381698a8c58be103c
7
- data.tar.gz: 7ad21af4b139dd40fa562b5bd738fe87fba7b6f681dccdb9622fa494b3471ed502c9f4f01b0ae4bb0e00e23e88dab2843ad8e8604827e2aba79be72f6282a8c0
6
+ metadata.gz: 346c7b72320e0513b4b08e60fd894b1d7998dcc01acaeeaacf408423dd7b18d133e1d4442aaa1d2360d65981ce72d63c2ec8677cef761e93c689c1dd38fcb333
7
+ data.tar.gz: b40ac9844cfc417e4b19c2af59480b21c6a811eaaa0d6b4bff985d7b64a812fb397c5ad29247cc870d38fe64ce5f5152c9a8d2106ad0f419ae5fee7a447156f1
data/README.md CHANGED
@@ -27,13 +27,13 @@ require 'bestgems'
27
27
 
28
28
  client = Bestgems.client
29
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}, ... ]
30
+ client.total_downloads(:rack) # => {"2014-08-08"=>48484297, "2014-08-07"=>48426620, "2014-08-06"=>48365953, "2014-08-05"=>48305390, "2014-08-04"=>48246069, "2014-08-03"=>48203248, ... }
31
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}, ... ]
32
+ client.daily_downloads(:rack) # => {"2014-08-08"=>57677, "2014-08-07"=>60667, "2014-08-06"=>60563, "2014-08-05"=>59321, "2014-08-04"=>42821, "2014-08-03"=>30640, ... }
33
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}, ... ]
34
+ client.total_ranking(:rack) # => {"2014-08-08"=>2, "2014-08-07"=>2, "2014-08-06"=>2, "2014-08-05"=>2, "2014-08-04"=>2, "2014-08-03"=>2, "2014-08-02"=>2, "2014-08-01"=>2, "2014-07-31"=>2, ... }
35
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}, ... ]
36
+ client.daily_ranking(:rack) # => {"2014-08-08"=>6, "2014-08-07"=>6, "2014-08-06"=>6, "2014-08-05"=>7, "2014-08-04"=>4, "2014-08-03"=>3, "2014-08-02"=>3, "2014-08-01"=>6, "2014-07-31"=>6, ... }
37
37
  ```
38
38
 
39
39
  ## Contributing
@@ -23,9 +23,22 @@ module Bestgems
23
23
  json2rb_obj(res)
24
24
  end
25
25
 
26
+ # return: growth point based on diff between total and daily ranking
27
+ # in base_days(default: 5).
28
+ def growth(gem_name, base_days:5)
29
+ total = total_ranking(gem_name)
30
+ daily = daily_ranking(gem_name)
31
+ total, daily = [total, daily].map do |data|
32
+ data.take(base_days).inject(0) { |m, (_, rank)| rank ? m + rank : m }
33
+ end
34
+ (total - daily) / base_days
35
+ end
36
+
26
37
  def json2rb_obj(data)
27
- JSON.parse(data).map do |h|
28
- h.inject({}) { |h, (k, v)| h[k.intern] = v; h }
38
+ JSON.parse(data).inject({}) do |mem, h|
39
+ date, val = h.values
40
+ mem[date] = val
41
+ mem
29
42
  end
30
43
  end
31
44
  end
@@ -1,3 +1,3 @@
1
1
  module Bestgems
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -4,11 +4,11 @@ describe Bestgems::Client do
4
4
  let(:client) { Bestgems::Client.new }
5
5
 
6
6
  describe "#total_downloads", vcr:{cassette_name:'total_downloads'} do
7
- it "gets an array of data hashes" do
7
+ it "gets a hash with date key and download value" do
8
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)
9
+ expect(res).to be_a Hash
10
+ expect(res.keys.first).to match(/\A\d{4}\-\d{2}-\d{2}\z/)
11
+ expect(res.values.first).to be_a Fixnum
12
12
  end
13
13
 
14
14
  context "with an absent gem name", vcr:{cassette_name:'total_downloads_error'} do
@@ -19,29 +19,41 @@ describe Bestgems::Client do
19
19
  end
20
20
 
21
21
  describe "#daily_downloads", vcr:{cassette_name:'daily_downloads'} do
22
- it "gets an array of data hashes" do
22
+ it "gets a hash with date key and download value" do
23
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)
24
+ expect(res).to be_a Hash
25
+ expect(res.keys.first).to match(/\A\d{4}\-\d{2}-\d{2}\z/)
26
+ expect(res.values.first).to be_a Fixnum
27
27
  end
28
28
  end
29
29
 
30
30
  describe "#total_ranking", vcr:{cassette_name:'total_ranking'} do
31
- it "gets an array of data hashes" do
31
+ it "gets a hash with date key and ranking value" do
32
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)
33
+ expect(res).to be_a Hash
34
+ expect(res.keys.first).to match(/\A\d{4}\-\d{2}-\d{2}\z/)
35
+ expect(res.values.first).to be_a Fixnum
36
36
  end
37
37
  end
38
38
 
39
39
  describe "#daily_ranking", vcr:{cassette_name:'daily_ranking'} do
40
- it "gets an array of data hashes" do
40
+ it "gets a hash with date key and ranking value" do
41
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)
42
+ expect(res).to be_a Hash
43
+ expect(res.keys.first).to match(/\A\d{4}\-\d{2}-\d{2}\z/)
44
+ expect(res.values.first).to be_a Fixnum
45
+ end
46
+ end
47
+
48
+ describe "#growth", vcr:{cassette_name:'growth'} do
49
+ it "returns growth point with recent 5 days" do
50
+ res = client.growth('colcolor')
51
+ expect(res).to eq 60885
52
+ end
53
+
54
+ it "returns growth point with recent 2 days" do
55
+ res = client.growth('colcolor', base_days:2)
56
+ expect(res).to eq 58805
45
57
  end
46
58
  end
47
59
  end
@@ -0,0 +1,73 @@
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
+ - Sat, 09 Aug 2014 09:29:28 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Content-Length:
28
+ - '1145'
29
+ Connection:
30
+ - keep-alive
31
+ X-Content-Type-Options:
32
+ - nosniff
33
+ body:
34
+ encoding: UTF-8
35
+ string: '[{"date":"2014-08-08","total_ranking":68184},{"date":"2014-08-07","total_ranking":68277},{"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: Sat, 09 Aug 2014 09:28:58 GMT
38
+ - request:
39
+ method: get
40
+ uri: http://bestgems.org/api/v1/gems/colcolor/daily_ranking.json
41
+ body:
42
+ encoding: US-ASCII
43
+ string: ''
44
+ headers:
45
+ User-Agent:
46
+ - Faraday v0.9.0
47
+ Accept-Encoding:
48
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
49
+ Accept:
50
+ - "*/*"
51
+ response:
52
+ status:
53
+ code: 200
54
+ message: OK
55
+ headers:
56
+ Server:
57
+ - nginx/1.2.1
58
+ Date:
59
+ - Sat, 09 Aug 2014 09:29:28 GMT
60
+ Content-Type:
61
+ - application/json
62
+ Content-Length:
63
+ - '1082'
64
+ Connection:
65
+ - keep-alive
66
+ X-Content-Type-Options:
67
+ - nosniff
68
+ body:
69
+ encoding: UTF-8
70
+ string: '[{"date":"2014-08-08","daily_ranking":8984},{"date":"2014-08-07","daily_ranking":9867},{"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}]'
71
+ http_version:
72
+ recorded_at: Sat, 09 Aug 2014 09:28:58 GMT
73
+ recorded_with: VCR 2.9.2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bestgems
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - kyoendo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-07 00:00:00.000000000 Z
11
+ date: 2014-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -91,6 +91,7 @@ files:
91
91
  - spec/cassettes/daily_downloads.yml
92
92
  - spec/cassettes/daily_ranking.yml
93
93
  - spec/cassettes/get.yml
94
+ - spec/cassettes/growth.yml
94
95
  - spec/cassettes/total_downloads.yml
95
96
  - spec/cassettes/total_downloads_error.yml
96
97
  - spec/cassettes/total_ranking.yml
@@ -126,6 +127,7 @@ test_files:
126
127
  - spec/cassettes/daily_downloads.yml
127
128
  - spec/cassettes/daily_ranking.yml
128
129
  - spec/cassettes/get.yml
130
+ - spec/cassettes/growth.yml
129
131
  - spec/cassettes/total_downloads.yml
130
132
  - spec/cassettes/total_downloads_error.yml
131
133
  - spec/cassettes/total_ranking.yml