gems 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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