gems 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -1
- data/.travis.yml +6 -4
- data/README.md +97 -68
- data/Rakefile +0 -2
- data/gems.gemspec +6 -6
- data/lib/gems/client.rb +103 -87
- data/lib/gems/version.rb +1 -1
- data/spec/fixtures/most_downloaded_today.yaml +1053 -0
- data/spec/gems/client_spec.rb +171 -178
- data/spec/helper.rb +6 -2
- metadata +61 -29
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -4,59 +4,68 @@ Ruby wrapper for the RubyGems.org API.
|
|
4
4
|
[travis]: http://travis-ci.org/rubygems/gems
|
5
5
|
[gemnasium]: https://gemnasium.com/rubygems/gems
|
6
6
|
|
7
|
-
##
|
7
|
+
## Installation
|
8
8
|
gem install gems
|
9
9
|
|
10
|
-
##
|
10
|
+
## Documentation
|
11
11
|
[http://rdoc.info/gems/gems](http://rdoc.info/gems/gems)
|
12
12
|
|
13
|
-
#
|
13
|
+
# Usage Examples
|
14
14
|
require 'rubygems'
|
15
15
|
require 'gems'
|
16
16
|
|
17
|
-
#
|
18
|
-
|
17
|
+
# Return some basic information about rails.
|
18
|
+
Gems.info 'rails'
|
19
19
|
|
20
|
-
#
|
21
|
-
|
20
|
+
# Return an array of active gems that match the query.
|
21
|
+
Gems.search 'cucumber'
|
22
22
|
|
23
|
-
#
|
24
|
-
|
23
|
+
# Return all gems that you own.
|
24
|
+
Gems.gems
|
25
25
|
|
26
|
-
#
|
26
|
+
# Return all gems owned by Erik Michaels-Ober.
|
27
|
+
Gems.gems("sferik")
|
28
|
+
|
29
|
+
# Submit a gem to RubyGems.org.
|
30
|
+
Gems.push File.new 'gemcutter-0.2.1.gem'
|
31
|
+
|
32
|
+
# Remove a gem from RubyGems.org's index.
|
27
33
|
# Defaults to the latest version if no version is specified.
|
28
|
-
|
29
|
-
puts Gems.downloads 'rails_admin', '0.0.0'
|
34
|
+
Gems.yank 'bills', '0.0.1'
|
30
35
|
|
31
|
-
#
|
36
|
+
# Update a previously yanked gem back into RubyGems.org's index.
|
32
37
|
# Defaults to the latest version if no version is specified.
|
33
|
-
|
38
|
+
Gems.unyank 'bills', '0.0.1'
|
34
39
|
|
35
|
-
#
|
36
|
-
|
40
|
+
# Return an array of version details for coulda.
|
41
|
+
Gems.versions 'coulda'
|
37
42
|
|
38
|
-
#
|
39
|
-
|
43
|
+
# Return an array of version details for coulda.
|
44
|
+
Gems.versions 'coulda'
|
40
45
|
|
41
|
-
#
|
42
|
-
|
43
|
-
|
44
|
-
config.password = 'schwwwwing'
|
45
|
-
end
|
46
|
-
puts Gems.api_key
|
46
|
+
# Return the total number of downloads for rails_admin 0.0.1.
|
47
|
+
# (Defaults to the latest version if no version is specified.)
|
48
|
+
Gems.total_downloads 'rails_admin', '0.0.1'
|
47
49
|
|
48
|
-
#
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
# Returns an array containing the top 50 downloaded gem versions for today.
|
51
|
+
Gems.most_downloaded_today
|
52
|
+
|
53
|
+
# Returns an array containing the top 50 downloaded gem versions of all time.
|
54
|
+
Gems.most_downloaded
|
55
|
+
|
56
|
+
# Return the total number of downloads by day for rails_admin 0.0.1.
|
57
|
+
# (Defaults to the latest version if no version is specified.)
|
58
|
+
Gems.downloads 'rails_admin', '0.0.1'
|
59
|
+
|
60
|
+
# Return the number of downloads by day for coulda 0.6.3 for the past 90 days.
|
61
|
+
# (Defaults to the latest version if no version is specified.)
|
62
|
+
Gems.downloads 'coulda', '0.6.3'
|
54
63
|
|
55
|
-
#
|
56
|
-
|
64
|
+
# Return the number of downloads by day for coulda 0.6.3 for the past year.
|
65
|
+
Gems.downloads 'coulda', '0.6.3', Date.today - 365, Date.today
|
57
66
|
|
58
67
|
# View all owners of a gem that you own.
|
59
|
-
|
68
|
+
Gems.owners 'gemcutter'
|
60
69
|
|
61
70
|
# Add an owner to a RubyGem you own, giving that user permission to manage it.
|
62
71
|
Gems.add_owner 'josh@technicalpickles.com', 'gemcutter'
|
@@ -64,8 +73,8 @@ Ruby wrapper for the RubyGems.org API.
|
|
64
73
|
# Remove a user's permission to manage a RubyGem you own.
|
65
74
|
Gems.remove_owner 'josh@technicalpickles.com', 'gemcutter'
|
66
75
|
|
67
|
-
#
|
68
|
-
|
76
|
+
# Return all the webhooks registered under your account.
|
77
|
+
Gems.web_hooks
|
69
78
|
|
70
79
|
# Add a webhook.
|
71
80
|
Gems.add_web_hook 'rails', 'http://example.com'
|
@@ -76,18 +85,30 @@ Ruby wrapper for the RubyGems.org API.
|
|
76
85
|
# Test fire a webhook.
|
77
86
|
Gems.fire_web_hook 'rails', 'http://example.com'
|
78
87
|
|
79
|
-
#
|
80
|
-
Gems.
|
88
|
+
# Returns the 50 gems most recently added to RubyGems.org
|
89
|
+
Gems.latest
|
81
90
|
|
82
|
-
#
|
83
|
-
|
84
|
-
Gems.yank 'bills', '0.0.1'
|
91
|
+
# Returns the 50 most recently updated gems
|
92
|
+
Gems.just_updated
|
85
93
|
|
86
|
-
#
|
87
|
-
|
88
|
-
|
94
|
+
# Retrieve your API key using HTTP basic authentication.
|
95
|
+
Gems.configure do |config|
|
96
|
+
config.username = 'nick@gemcutter.org'
|
97
|
+
config.password = 'schwwwwing'
|
98
|
+
end
|
99
|
+
Gems.api_key
|
100
|
+
|
101
|
+
# Return an array of gem dependency details for all versions of all the given gems.
|
102
|
+
Gems.dependencies ['rails', 'thor']
|
103
|
+
|
104
|
+
# The following methods require authentication.
|
105
|
+
# By default, we load your API key from ~/.gem/credentails
|
106
|
+
# You can override this default by specifying a custom API key.
|
107
|
+
Gems.configure do |config|
|
108
|
+
config.key '701243f217cdf23b1370c7b66b65ca97'
|
109
|
+
end
|
89
110
|
|
90
|
-
##
|
111
|
+
## Contributing
|
91
112
|
In the spirit of [free software](http://www.fsf.org/licensing/essays/free-sw.html), **everyone** is encouraged to help improve this project.
|
92
113
|
|
93
114
|
Here are some ways *you* can contribute:
|
@@ -97,31 +118,41 @@ Here are some ways *you* can contribute:
|
|
97
118
|
* by suggesting new features
|
98
119
|
* by writing or editing documentation
|
99
120
|
* by writing specifications
|
100
|
-
* by writing code (**no patch is too small**: fix typos, add comments, clean up
|
121
|
+
* by writing code (**no patch is too small**: fix typos, add comments, clean up
|
122
|
+
inconsistent whitespace)
|
101
123
|
* by refactoring code
|
102
124
|
* by closing [issues](https://github.com/rubygems/gems/issues)
|
103
125
|
* by reviewing patches
|
104
126
|
|
105
|
-
##
|
106
|
-
We use the [GitHub issue tracker](https://github.com/rubygems/gems/issues) to
|
107
|
-
features. Before submitting a bug report or feature request,
|
108
|
-
|
109
|
-
|
110
|
-
details that may be necessary to reproduce the bug, including
|
111
|
-
operating system. Ideally, a bug report
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
127
|
+
## Submitting an Issue
|
128
|
+
We use the [GitHub issue tracker](https://github.com/rubygems/gems/issues) to
|
129
|
+
track bugs and features. Before submitting a bug report or feature request,
|
130
|
+
check to make sure it hasn't already been submitted. When submitting a bug
|
131
|
+
report, please include a [Gist](https://gist.github.com/) that includes a stack
|
132
|
+
trace and any details that may be necessary to reproduce the bug, including
|
133
|
+
your gem version, Ruby version, and operating system. Ideally, a bug report
|
134
|
+
should include a pull request with failing specs.
|
135
|
+
|
136
|
+
## Submitting a Pull Request
|
137
|
+
1. [Fork the repository.][fork]
|
138
|
+
2. [Create a topic branch.][branch]
|
139
|
+
3. Add specs for your unimplemented feature or bug fix.
|
140
|
+
4. Run `bundle exec rake spec`. If your specs pass, return to step 3.
|
141
|
+
5. Implement your feature or bug fix.
|
142
|
+
6. Run `bundle exec rake spec`. If your specs fail, return to step 5.
|
143
|
+
7. Run `open coverage/index.html`. If your changes are not completely covered
|
144
|
+
by your tests, return to step 3.
|
145
|
+
8. Add documentation for your feature or bug fix.
|
146
|
+
9. Run `bundle exec rake doc:yard`. If your changes are not 100% documented, go
|
147
|
+
back to step 8.
|
148
|
+
10. Add, commit, and push your changes.
|
149
|
+
11. [Submit a pull request.][pr]
|
150
|
+
|
151
|
+
[fork]: http://help.github.com/fork-a-repo/
|
152
|
+
[branch]: http://learn.github.com/p/branching.html
|
153
|
+
[pr]: http://help.github.com/send-pull-requests/
|
154
|
+
|
155
|
+
## Supported Ruby Versions
|
125
156
|
This library aims to support and is [tested against][travis] the following Ruby
|
126
157
|
implementations:
|
127
158
|
|
@@ -130,11 +161,9 @@ implementations:
|
|
130
161
|
* Ruby 1.9.3
|
131
162
|
* [JRuby][]
|
132
163
|
* [Rubinius][]
|
133
|
-
* [Ruby Enterprise Edition][ree]
|
134
164
|
|
135
165
|
[jruby]: http://www.jruby.org/
|
136
166
|
[rubinius]: http://rubini.us/
|
137
|
-
[ree]: http://www.rubyenterpriseedition.com/)
|
138
167
|
|
139
168
|
If something doesn't work on one of these interpreters, it should be considered
|
140
169
|
a bug.
|
@@ -150,7 +179,7 @@ implementation, you will be personally responsible for providing patches in a
|
|
150
179
|
timely fashion. If critical issues for a particular implementation exist at the
|
151
180
|
time of a major release, support for that Ruby version may be dropped.
|
152
181
|
|
153
|
-
##
|
182
|
+
## Copyright
|
154
183
|
Copyright (c) 2011 Erik Michaels-Ober. See [LICENSE][] for details.
|
155
184
|
|
156
185
|
[license]: https://github.com/rubygems/gems/blob/master/LICENSE.md
|
data/Rakefile
CHANGED
data/gems.gemspec
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
require File.expand_path('../lib/gems/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.add_development_dependency '
|
6
|
-
gem.add_development_dependency '
|
7
|
-
gem.add_development_dependency 'rspec'
|
8
|
-
gem.add_development_dependency 'simplecov'
|
9
|
-
gem.add_development_dependency 'webmock'
|
10
|
-
gem.add_development_dependency 'yard'
|
5
|
+
gem.add_development_dependency 'maruku'
|
6
|
+
gem.add_development_dependency 'rake'
|
7
|
+
gem.add_development_dependency 'rspec'
|
8
|
+
gem.add_development_dependency 'simplecov'
|
9
|
+
gem.add_development_dependency 'webmock'
|
10
|
+
gem.add_development_dependency 'yard'
|
11
11
|
gem.authors = ["Erik Michaels-Ober"]
|
12
12
|
gem.description = %q{Ruby wrapper for the RubyGems.org API}
|
13
13
|
gem.email = ['sferik@gmail.com']
|
data/lib/gems/client.rb
CHANGED
@@ -39,6 +39,63 @@ module Gems
|
|
39
39
|
YAML.load(response)
|
40
40
|
end
|
41
41
|
|
42
|
+
# List all gems that you own
|
43
|
+
#
|
44
|
+
# @authenticated true
|
45
|
+
# @param user_handle [String] The handle of a user.
|
46
|
+
# @return [Array]
|
47
|
+
# @example
|
48
|
+
# Gems.gems
|
49
|
+
def gems(user_handle=nil)
|
50
|
+
response = if user_handle
|
51
|
+
get("/api/v1/owners/#{user_handle}/gems.yaml")
|
52
|
+
else
|
53
|
+
get("/api/v1/gems.yaml")
|
54
|
+
end
|
55
|
+
YAML.load(response)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Submit a gem to RubyGems.org
|
59
|
+
#
|
60
|
+
# @authenticated true
|
61
|
+
# @param gem [File] A built gem.
|
62
|
+
# @return [String]
|
63
|
+
# @example
|
64
|
+
# Gems.push File.new 'pkg/gemcutter-0.2.1.gem'
|
65
|
+
def push(gem)
|
66
|
+
post("/api/v1/gems", gem.read, 'application/octet-stream')
|
67
|
+
end
|
68
|
+
|
69
|
+
# Remove a gem from RubyGems.org's index
|
70
|
+
#
|
71
|
+
# @authenticated true
|
72
|
+
# @param gem_name [String] The name of a gem.
|
73
|
+
# @param gem_version [String] The version of a gem.
|
74
|
+
# @param options [Hash] A customizable set of options.
|
75
|
+
# @option options [String] :platform
|
76
|
+
# @return [String]
|
77
|
+
# @example
|
78
|
+
# Gems.yank "gemcutter", "0.2.1", {:platform => "x86-darwin-10"}
|
79
|
+
def yank(gem_name, gem_version=nil, options={})
|
80
|
+
gem_version ||= info(gem_name)['version']
|
81
|
+
delete("/api/v1/gems/yank", options.merge(:gem_name => gem_name, :version => gem_version))
|
82
|
+
end
|
83
|
+
|
84
|
+
# Update a previously yanked gem back into RubyGems.org's index
|
85
|
+
#
|
86
|
+
# @authenticated true
|
87
|
+
# @param gem_name [String] The name of a gem.
|
88
|
+
# @param gem_version [String] The version of a gem.
|
89
|
+
# @param options [Hash] A customizable set of options.
|
90
|
+
# @option options [String] :platform
|
91
|
+
# @return [String]
|
92
|
+
# @example
|
93
|
+
# Gems.unyank "gemcutter", "0.2.1", {:platform => "x86-darwin-10"}
|
94
|
+
def unyank(gem_name, gem_version=nil, options={})
|
95
|
+
gem_version ||= info(gem_name)['version']
|
96
|
+
put("/api/v1/gems/unyank", options.merge(:gem_name => gem_name, :version => gem_version))
|
97
|
+
end
|
98
|
+
|
42
99
|
# Returns an array of gem version details
|
43
100
|
#
|
44
101
|
# @authenticated false
|
@@ -58,26 +115,37 @@ module Gems
|
|
58
115
|
# @param gem_version [String] The version of a gem.
|
59
116
|
# @return [Hash]
|
60
117
|
# @example
|
61
|
-
# Gems.total_downloads 'rails_admin', '0.0.
|
118
|
+
# Gems.total_downloads 'rails_admin', '0.0.1'
|
62
119
|
def total_downloads(gem_name=nil, gem_version=nil)
|
63
|
-
if gem_name
|
120
|
+
response = if gem_name
|
64
121
|
gem_version ||= info(gem_name)['version']
|
65
|
-
|
122
|
+
get("/api/v1/downloads/#{gem_name}-#{gem_version}.yaml")
|
66
123
|
else
|
67
|
-
|
124
|
+
get("/api/v1/downloads.yaml")
|
68
125
|
end
|
69
126
|
YAML.load(response)
|
70
127
|
end
|
71
128
|
|
72
|
-
# Returns an array
|
129
|
+
# Returns an array containing the top 50 downloaded gem versions for today
|
73
130
|
#
|
74
131
|
# @authenticated false
|
75
|
-
# @return [
|
132
|
+
# @return [Array]
|
133
|
+
# @example
|
134
|
+
# Gems.most_downloaded_today
|
135
|
+
def most_downloaded_today
|
136
|
+
response = get("/api/v1/downloads/top.yaml")
|
137
|
+
YAML.load(response)[:gems]
|
138
|
+
end
|
139
|
+
|
140
|
+
# Returns an array containing the top 50 downloaded gem versions of all time
|
141
|
+
#
|
142
|
+
# @authenticated false
|
143
|
+
# @return [Array]
|
76
144
|
# @example
|
77
145
|
# Gems.most_downloaded
|
78
146
|
def most_downloaded
|
79
147
|
response = get("/api/v1/downloads/all.yaml")
|
80
|
-
YAML.load(response)
|
148
|
+
YAML.load(response)[:gems]
|
81
149
|
end
|
82
150
|
|
83
151
|
# Returns the number of downloads by day for a particular gem version
|
@@ -100,43 +168,6 @@ module Gems
|
|
100
168
|
YAML.load(response)
|
101
169
|
end
|
102
170
|
|
103
|
-
# Returns an array of hashes for all versions of given gems
|
104
|
-
#
|
105
|
-
# @authenticated false
|
106
|
-
# @param gems [Array] A list of gem names
|
107
|
-
# @return [Array]
|
108
|
-
# @example
|
109
|
-
# Gems.dependencies 'rails', 'thor'
|
110
|
-
def dependencies(*gems)
|
111
|
-
response = get('/api/v1/dependencies', {:gems => gems.join(',')})
|
112
|
-
Marshal.load(response)
|
113
|
-
end
|
114
|
-
|
115
|
-
# Retrieve your API key using HTTP basic auth
|
116
|
-
#
|
117
|
-
# @authenticated true
|
118
|
-
# @return [String]
|
119
|
-
# @example
|
120
|
-
# Gems.configure do |config|
|
121
|
-
# config.username = 'nick@gemcutter.org'
|
122
|
-
# config.password = 'schwwwwing'
|
123
|
-
# end
|
124
|
-
# Gems.api_key
|
125
|
-
def api_key
|
126
|
-
get('/api/v1/api_key')
|
127
|
-
end
|
128
|
-
|
129
|
-
# List all gems that you own
|
130
|
-
#
|
131
|
-
# @authenticated true
|
132
|
-
# @return [Array]
|
133
|
-
# @example
|
134
|
-
# Gems.gems
|
135
|
-
def gems
|
136
|
-
response = get("/api/v1/gems.yaml")
|
137
|
-
YAML.load(response)
|
138
|
-
end
|
139
|
-
|
140
171
|
# View all owners of a gem that you own
|
141
172
|
#
|
142
173
|
# @authenticated true
|
@@ -220,48 +251,7 @@ module Gems
|
|
220
251
|
post("/api/v1/web_hooks/fire", {:gem_name => gem_name, :url => url})
|
221
252
|
end
|
222
253
|
|
223
|
-
#
|
224
|
-
#
|
225
|
-
# @authenticated true
|
226
|
-
# @param gem [File] A built gem.
|
227
|
-
# @return [String]
|
228
|
-
# @example
|
229
|
-
# Gems.push File.new 'pkg/gemcutter-0.2.1.gem'
|
230
|
-
def push(gem)
|
231
|
-
post("/api/v1/gems", gem.read, 'application/octet-stream')
|
232
|
-
end
|
233
|
-
|
234
|
-
# Remove a gem from RubyGems.org's index
|
235
|
-
#
|
236
|
-
# @authenticated true
|
237
|
-
# @param gem_name [String] The name of a gem.
|
238
|
-
# @param gem_version [String] The version of a gem.
|
239
|
-
# @param options [Hash] A customizable set of options.
|
240
|
-
# @option options [String] :platform
|
241
|
-
# @return [String]
|
242
|
-
# @example
|
243
|
-
# Gems.yank "gemcutter", "0.2.1", {:platform => "x86-darwin-10"}
|
244
|
-
def yank(gem_name, gem_version=nil, options={})
|
245
|
-
gem_version ||= info(gem_name)['version']
|
246
|
-
delete("/api/v1/gems/yank", options.merge(:gem_name => gem_name, :version => gem_version))
|
247
|
-
end
|
248
|
-
|
249
|
-
# Update a previously yanked gem back into RubyGems.org's index
|
250
|
-
#
|
251
|
-
# @authenticated true
|
252
|
-
# @param gem_name [String] The name of a gem.
|
253
|
-
# @param gem_version [String] The version of a gem.
|
254
|
-
# @param options [Hash] A customizable set of options.
|
255
|
-
# @option options [String] :platform
|
256
|
-
# @return [String]
|
257
|
-
# @example
|
258
|
-
# Gems.unyank "gemcutter", "0.2.1", {:platform => "x86-darwin-10"}
|
259
|
-
def unyank(gem_name, gem_version=nil, options={})
|
260
|
-
gem_version ||= info(gem_name)['version']
|
261
|
-
put("/api/v1/gems/unyank", options.merge(:gem_name => gem_name, :version => gem_version))
|
262
|
-
end
|
263
|
-
|
264
|
-
# Pulls the 50 gems most recently added to RubyGems.org (for the first time). Returns an array of the XML or JSON representation of the gems
|
254
|
+
# Returns the 50 gems most recently added to RubyGems.org (for the first time)
|
265
255
|
#
|
266
256
|
# @authenticated false
|
267
257
|
# @param options [Hash] A customizable set of options.
|
@@ -273,7 +263,7 @@ module Gems
|
|
273
263
|
YAML.load(response)
|
274
264
|
end
|
275
265
|
|
276
|
-
#
|
266
|
+
# Returns the 50 most recently updated gems
|
277
267
|
#
|
278
268
|
# @authenticated false
|
279
269
|
# @param options [Hash] A customizable set of options.
|
@@ -285,5 +275,31 @@ module Gems
|
|
285
275
|
YAML.load(response)
|
286
276
|
end
|
287
277
|
|
278
|
+
# Retrieve your API key using HTTP basic auth
|
279
|
+
#
|
280
|
+
# @authenticated true
|
281
|
+
# @return [String]
|
282
|
+
# @example
|
283
|
+
# Gems.configure do |config|
|
284
|
+
# config.username = 'nick@gemcutter.org'
|
285
|
+
# config.password = 'schwwwwing'
|
286
|
+
# end
|
287
|
+
# Gems.api_key
|
288
|
+
def api_key
|
289
|
+
get('/api/v1/api_key')
|
290
|
+
end
|
291
|
+
|
292
|
+
# Returns an array of hashes for all versions of given gems
|
293
|
+
#
|
294
|
+
# @authenticated false
|
295
|
+
# @param gems [Array] A list of gem names
|
296
|
+
# @return [Array]
|
297
|
+
# @example
|
298
|
+
# Gems.dependencies 'rails', 'thor'
|
299
|
+
def dependencies(*gems)
|
300
|
+
response = get('/api/v1/dependencies', {:gems => gems.join(',')})
|
301
|
+
Marshal.load(response)
|
302
|
+
end
|
303
|
+
|
288
304
|
end
|
289
305
|
end
|