gems 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -29,22 +29,26 @@ Usage Examples
29
29
  puts Gems.versions 'coulda'
30
30
 
31
31
  # Returns the number of downloads by day for a particular gem version
32
+ # for the past 90 days
32
33
  puts Gems.downloads 'coulda', '0.6.3'
33
34
 
35
+ # Returns the number of downloads by day for a particular gem version
36
+ # for the past year
37
+ puts Gems.downloads 'coulda', '0.6.3', Date.today - 365, Date.today
38
+
34
39
  # Returns an array of gem dependency details for all versions of given gems
35
40
  puts Gems.dependencies ['rails', 'thor']
36
41
 
37
- # The following method requires password authentication
42
+ # Retrieve your API key using HTTP basic authentication
38
43
  Gems.configure do |config|
39
- config.format = :xml
40
44
  config.username = 'nick@gemcutter.org'
41
45
  config.password = 'schwwwwing'
42
46
  end
43
-
44
- # Retrieve your API key using HTTP basic auth
45
47
  Gems.api_key
46
48
 
47
- # The following methods require authentication
49
+ # You can also find your API key at https://rubygems.org/profile/edit
50
+ # We will attempt to load your API key from ~/.gem/credentails
51
+ # You may also specify a custom API key
48
52
  Gems.configure do |config|
49
53
  config.key '701243f217cdf23b1370c7b66b65ca97'
50
54
  end
@@ -53,34 +57,34 @@ Usage Examples
53
57
  puts Gems.gems
54
58
 
55
59
  # View all owners of a gem that you own
56
- puts Gems.owners 'gemcutter' [TODO]
60
+ puts Gems.owners 'gemcutter'
57
61
 
58
62
  # Add an owner to a RubyGem you own, giving that user permission to manage it
59
- puts Gems.add_owner 'josh@technicalpickles.com', 'gemcutter' [TODO]
63
+ Gems.add_owner 'josh@technicalpickles.com', 'gemcutter' [TODO]
60
64
 
61
65
  # Remove a user's permission to manage a RubyGem you own
62
- puts Gems.remove_owner 'josh@technicalpickles.com', 'gemcutter' [TODO]
66
+ Gems.remove_owner 'josh@technicalpickles.com', 'gemcutter' [TODO]
63
67
 
64
68
  # List the webhooks registered under your account
65
- puts Gems.web_hooks [TODO]
69
+ puts Gems.web_hooks
66
70
 
67
71
  # Add a webhook
68
- puts Gems.add_web_hook 'rails', 'http://example.com' [TODO]
72
+ Gems.add_web_hook 'rails', 'http://example.com' [TODO]
69
73
 
70
74
  # Remove a webhook
71
- puts Gems.remove_web_hook 'rails', 'http://example.com' [TODO]
75
+ Gems.remove_web_hook 'rails', 'http://example.com' [TODO]
72
76
 
73
77
  # Test fire a webhook.
74
- puts Gems.fire_web_hook 'rails', 'http://example.com' [TODO]
78
+ Gems.fire_web_hook 'rails', 'http://example.com' [TODO]
75
79
 
76
80
  # Submit a gem to RubyGems.org
77
- puts Gems.push File.new 'gemcutter-0.2.1.gem' [TODO]
81
+ Gems.push File.new 'gemcutter-0.2.1.gem' [TODO]
78
82
 
79
83
  # Remove a gem from RubyGems.org's index
80
- puts Gems.yank 'bills', '0.0.1', :platform => 'x86-darwin-10' [TODO]
84
+ Gems.yank 'bills', '0.0.1', :platform => 'x86-darwin-10' [TODO]
81
85
 
82
86
  # Update a previously yanked gem back into RubyGems.org's index
83
- puts Gems.unyank 'bills', '0.0.1', :platform => 'x86-darwin-10' [TODO]
87
+ Gems.unyank 'bills', '0.0.1', :platform => 'x86-darwin-10' [TODO]
84
88
 
85
89
  Contributing
86
90
  ------------
data/lib/gems/client.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'date'
1
2
  require 'gems/configuration'
2
3
  require 'gems/connection'
3
4
  require 'gems/request'
@@ -51,11 +52,17 @@ module Gems
51
52
  #
52
53
  # @param gem [String] The name of a gem.
53
54
  # @param version [String] The version of a gem.
55
+ # @param from [Date] Search start date.
56
+ # @param to [Date] Search end date.
54
57
  # @return [Hashie::Mash]
55
58
  # @example
56
- # Gems.downloads 'coulda', '0.6.3'
57
- def downloads(gem, version)
58
- get("/api/v1/versions/#{gem}-#{version}/downloads", {}, :json)
59
+ # Gems.downloads 'coulda', '0.6.3', Date.today - 30, Date.today
60
+ def downloads(gem, version, from=nil, to=Date.today)
61
+ if from
62
+ get("/api/v1/versions/#{gem}-#{version}/downloads/search", {:from => from.to_s, :to => to.to_s}, :json)
63
+ else
64
+ get("/api/v1/versions/#{gem}-#{version}/downloads", {}, :json)
65
+ end
59
66
  end
60
67
 
61
68
  # Returns an array of hashes for all versions of given gems
@@ -93,5 +100,30 @@ module Gems
93
100
  response = get("/api/v1/gems")
94
101
  format.to_s.downcase == 'xml' ? response['rubygems'] : response
95
102
  end
103
+
104
+ # View all owners of a gem that you own
105
+ #
106
+ # @param gem [String] The name of a gem.
107
+ # @return [Array]
108
+ # @example
109
+ # Gems.configure do |config|
110
+ # config.key = '701243f217cdf23b1370c7b66b65ca97'
111
+ # end
112
+ # Gems.owners('gemcutter')
113
+ def owners(gem)
114
+ get("/api/v1/gems/#{gem}/owners", {}, :json)
115
+ end
116
+
117
+ # List the webhooks registered under your account
118
+ #
119
+ # @return [Hashie::Mash]
120
+ # @example
121
+ # Gems.configure do |config|
122
+ # config.key = '701243f217cdf23b1370c7b66b65ca97'
123
+ # end
124
+ # Gems.web_hooks
125
+ def web_hooks
126
+ get("/api/v1/web_hooks", {}, :json)
127
+ end
96
128
  end
97
129
  end
@@ -1,4 +1,5 @@
1
1
  require 'gems/version'
2
+ require 'yaml'
2
3
 
3
4
  module Gems
4
5
  module Configuration
@@ -16,6 +17,13 @@ module Gems
16
17
  # @note JSON is preferred over XML because it is more concise and faster to parse.
17
18
  DEFAULT_FORMAT = :json
18
19
 
20
+ # Attempt to automatically load credentials
21
+ DEFAULT_KEY = begin
22
+ YAML.load(File.read(File.expand_path("~/.gem/credentials")))[:rubygems_api_key]
23
+ rescue Errno::ENOENT
24
+ nil
25
+ end
26
+
19
27
  # The value sent in the 'User-Agent' header if none is set
20
28
  DEFAULT_USER_AGENT = "Gems #{Gems::VERSION}".freeze
21
29
 
@@ -41,7 +49,7 @@ module Gems
41
49
  # Reset all configuration options to defaults
42
50
  def reset
43
51
  self.format = DEFAULT_FORMAT
44
- self.key = nil
52
+ self.key = DEFAULT_KEY
45
53
  self.password = nil
46
54
  self.user_agent = DEFAULT_USER_AGENT
47
55
  self.username = nil
data/lib/gems/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Gems
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1 @@
1
+ {"all gems":[{"url":"http://gemwhisperer.heroku.com","failure_count":1}],"rails":[{"url":"http://example.com","failure_count": 0}]}
@@ -61,16 +61,50 @@ describe Gems::Client do
61
61
  end
62
62
 
63
63
  describe ".downloads" do
64
- before do
65
- stub_get("/api/v1/versions/coulda-0.6.3/downloads.json").
66
- to_return(:body => fixture("downloads.json"))
64
+ context "with no dates specified" do
65
+ before do
66
+ stub_get("/api/v1/versions/coulda-0.6.3/downloads.json").
67
+ to_return(:body => fixture("downloads.json"))
68
+ end
69
+
70
+ it "should return the number of downloads by day for a particular gem version" do
71
+ downloads = Gems.downloads 'coulda', '0.6.3'
72
+ a_get("/api/v1/versions/coulda-0.6.3/downloads.json").
73
+ should have_been_made
74
+ downloads["2011-06-22"].should == 8
75
+ end
67
76
  end
68
77
 
69
- it "should return the number of downloads by day for a particular gem version" do
70
- downloads = Gems.downloads 'coulda', '0.6.3'
71
- a_get("/api/v1/versions/coulda-0.6.3/downloads.json").
72
- should have_been_made
73
- downloads["2011-06-22"].should == 8
78
+ context "with from date specified" do
79
+ before do
80
+ stub_get("/api/v1/versions/coulda-0.6.3/downloads/search.json").
81
+ with(:query => {"from" => "2011-01-01", "to" => Date.today.to_s}).
82
+ to_return(:body => fixture("downloads.json"))
83
+ end
84
+
85
+ it "should return the number of downloads by day for a particular gem version" do
86
+ downloads = Gems.downloads 'coulda', '0.6.3', Date.parse('2011-01-01')
87
+ a_get("/api/v1/versions/coulda-0.6.3/downloads/search.json").
88
+ with(:query => {"from" => "2011-01-01", "to" => Date.today.to_s}).
89
+ should have_been_made
90
+ downloads["2011-06-22"].should == 8
91
+ end
92
+ end
93
+
94
+ context "with from and to dates specified" do
95
+ before do
96
+ stub_get("/api/v1/versions/coulda-0.6.3/downloads/search.json").
97
+ with(:query => {"from" => "2011-01-01", "to" => "2011-06-28"}).
98
+ to_return(:body => fixture("downloads.json"))
99
+ end
100
+
101
+ it "should return the number of downloads by day for a particular gem version" do
102
+ downloads = Gems.downloads 'coulda', '0.6.3', Date.parse('2011-01-01'), Date.parse('2011-06-28')
103
+ a_get("/api/v1/versions/coulda-0.6.3/downloads/search.json").
104
+ with(:query => {"from" => "2011-01-01", "to" => "2011-06-28"}).
105
+ should have_been_made
106
+ downloads["2011-06-22"].should == 8
107
+ end
74
108
  end
75
109
  end
76
110
 
@@ -117,6 +151,34 @@ describe Gems::Client do
117
151
  gems.first.name.should == "congress"
118
152
  end
119
153
  end
154
+
155
+ describe ".owners" do
156
+ before do
157
+ stub_get("/api/v1/gems/gems/owners.json").
158
+ to_return(:body => fixture("owners.json"))
159
+ end
160
+
161
+ it "should list all owners of a gem" do
162
+ owners = Gems.owners("gems")
163
+ a_get("/api/v1/gems/gems/owners.json").
164
+ should have_been_made
165
+ owners.first.email.should == "sferik@gmail.com"
166
+ end
167
+ end
168
+
169
+ describe ".web_hooks" do
170
+ before do
171
+ stub_get("/api/v1/web_hooks.json").
172
+ to_return(:body => fixture("web_hooks.json"))
173
+ end
174
+
175
+ it "should list the webhooks registered under your account" do
176
+ web_hooks = Gems.web_hooks
177
+ a_get("/api/v1/web_hooks.json").
178
+ should have_been_made
179
+ web_hooks.rails.first.url.should == "http://example.com"
180
+ end
181
+ end
120
182
  end
121
183
  end
122
184
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: gems
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.5
5
+ version: 0.0.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Erik Michaels-Ober
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-28 00:00:00 -07:00
13
+ date: 2011-06-30 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -182,6 +182,7 @@ files:
182
182
  - spec/fixtures/rails.xml
183
183
  - spec/fixtures/search.json
184
184
  - spec/fixtures/search.xml
185
+ - spec/fixtures/web_hooks.json
185
186
  - spec/gems/client_spec.rb
186
187
  - spec/gems_spec.rb
187
188
  - spec/helper.rb
@@ -225,6 +226,7 @@ test_files:
225
226
  - spec/fixtures/rails.xml
226
227
  - spec/fixtures/search.json
227
228
  - spec/fixtures/search.xml
229
+ - spec/fixtures/web_hooks.json
228
230
  - spec/gems/client_spec.rb
229
231
  - spec/gems_spec.rb
230
232
  - spec/helper.rb