mwunsch-octocatnap 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ pkg/
2
+ doc/
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Mark Wunsch
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,59 @@
1
+ # OctocatNap
2
+
3
+ OctocatNap is a Ruby interface to the [GitHub API v2](http://develop.github.com/).
4
+
5
+ The source of it's power is [Weary](http://github.com/mwunsch/weary/).
6
+
7
+ ## Install
8
+
9
+ sudo gem sources -a http://gems.github.com # If you haven't done that already
10
+ sudo gem install mwunsch-octocatnap
11
+
12
+ _* Someday we can put this on Rubyforge_
13
+
14
+ ### Requires
15
+
16
+ + Weary >= 0.4.1
17
+
18
+ ## Authenticating
19
+
20
+ When you instantiate OctocatNap, you can pass different types of arguments to pass your credentials to the methods.
21
+
22
+ #### Explicitly
23
+
24
+ gh = OctocatNap.new("mwunsch", "my-super-secret-token")
25
+
26
+ or
27
+
28
+ gh = OctocatNap.new(["mwunsch","my-super-secret-token"])
29
+
30
+ or
31
+
32
+ gh = OctocatNap.new({:login => "mwunsch", :token => "my-super-secret-token"})
33
+
34
+ #### YAML
35
+
36
+ If you provide just one string when you instantiate, OctocatNap thinks that's the path to a file.
37
+
38
+ gh = OctocatNap.new(File.join(File.dirname(__FILE__), '..', "config.yml"))
39
+
40
+ That file should look something like this:
41
+
42
+ login: mwunsch
43
+ token: my-super-secret-token
44
+
45
+ #### ~/.gitconfig
46
+
47
+ You can also get credentials from the global .gitconfig, as long as that is set up with your [GitHub credentials](http://github.com/guides/tell-git-your-user-name-and-email-address)
48
+
49
+ gh = OctocatNap.new(true)
50
+
51
+ This assumes your gitconfig is in a standard place, as detailed here: http://github.com/blog/180-local-github-config
52
+
53
+ ## API and Documentation
54
+
55
+ Coming soon. Keep an eye on the [Wiki](http://wiki.github.com/mwunsch/octocatnap).
56
+
57
+ ## License
58
+
59
+ Copyright (c) 2009 Mark Wunsch. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'spec/rake/spectask'
3
+
4
+ task :default => :spec
5
+
6
+ require 'rake/rdoctask'
7
+ Rake::RDocTask.new do |rdoc|
8
+ rdoc.rdoc_dir = 'doc'
9
+ rdoc.title = 'octocatnap'
10
+ rdoc.main = 'README.md'
11
+ rdoc.rdoc_files.include('README.*', 'lib/**/*.rb', 'LICENSE')
12
+ rdoc.options << '--inline-source'
13
+ end
14
+
15
+ Spec::Rake::SpecTask.new do |t|
16
+ t.spec_files = FileList['spec/**/*_spec.rb']
17
+ t.spec_opts = ['--color','--format nested']
18
+ end
19
+
20
+ begin
21
+ require 'jeweler'
22
+ Jeweler::Tasks.new do |gemspec|
23
+ gemspec.name = "octocatnap"
24
+ gemspec.summary = "The GitHub API, wrapped in a Weary blanket"
25
+ gemspec.email = "mark@markwunsch.com"
26
+ gemspec.homepage = "http://github.com/mwunsch/octocatnap"
27
+ gemspec.description = "OctocatNap is a Ruby interface to the GitHub API v2. It is powered by Weary"
28
+ gemspec.authors = "Mark Wunsch"
29
+ gemspec.add_dependency('weary', '>= 0.4.0')
30
+ end
31
+ rescue LoadError
32
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
33
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.7.0
@@ -0,0 +1,6 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'octocatnap')
2
+ require 'pp'
3
+
4
+ github = OctocatNap.new(true)
5
+ github.format = :yaml
6
+ puts github.user("mwunsch").show.body if github.user("mwunsch").show.success?
@@ -0,0 +1,6 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'octocatnap')
2
+ require 'pp'
3
+
4
+ github = OctocatNap.new(true)
5
+ post = github.user("mwunsch").update('values[blog]' => "http://markwunsch.com")
6
+ puts post['user']['blog'] if post.success?
data/lib/octocatnap.rb ADDED
@@ -0,0 +1,15 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ require 'rubygems'
4
+ require 'weary'
5
+
6
+ autoload :Yaml, 'yaml'
7
+
8
+ require 'octocatnap/api'
9
+ require 'octocatnap/base'
10
+
11
+ module OctocatNap
12
+ def self.new(login=nil,token=nil)
13
+ OctocatNap::Base.new(login,token)
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ module OctocatNap
2
+ class Api
3
+ extend Weary
4
+
5
+ attr_reader :credentials
6
+
7
+ def initialize(credentials)
8
+ @credentials = credentials
9
+ end
10
+
11
+ end
12
+ class User < Api; end
13
+ class Issues < Api; end
14
+ class Repository < Api; end
15
+ class Commit < Api; end
16
+ class Object < Api; end
17
+ class Network < Api
18
+ on_domain "http://github.com/"
19
+ as_format :json
20
+ end
21
+
22
+ end
@@ -0,0 +1,342 @@
1
+ module OctocatNap
2
+ class Base
3
+ attr_accessor :format
4
+ attr_reader :login, :token, :credentials
5
+
6
+ def initialize(login=nil, token=nil)
7
+ case
8
+ when (login.is_a?(TrueClass))
9
+ @login = `git config --global github.user`.strip
10
+ @token = `git config --global github.token`.strip
11
+ raise ArgumentError, "Missing GitHub credentials. See: 'http://github.com/guides/tell-git-your-user-name-and-email-address'" if @login.empty?
12
+ when (login.is_a?(String) && token.nil?)
13
+ raise ArgumentError, "A YAML file could not be found at '#{login}" unless File.exist?(login)
14
+ credentials = File.open(login) { |yml|
15
+ YAML::load yml
16
+ }
17
+ raise ArgumentError, "Missing credentials in '#{login}' (expected a YAML file)" unless credentials
18
+ @login = credentials["login"].to_s
19
+ @token = credentials["token"].to_s
20
+ when (login.is_a?(Hash) && token.nil?)
21
+ @login = login[:login].to_s
22
+ @token = login[:token].to_s
23
+ when (login.is_a?(Array) && token.nil?)
24
+ @login = login[0].to_s
25
+ @token = login[1].to_s
26
+ when (!login.nil? && !token.nil?)
27
+ @login = login.to_s
28
+ @token = token.to_s
29
+ else
30
+ @login = nil
31
+ @token = nil
32
+ end
33
+ @credentials = unless (@login.nil? && @token.nil?)
34
+ {:login => @login, :token => @token}
35
+ else
36
+ nil
37
+ end
38
+ end
39
+
40
+ def format
41
+ @format ||= :json
42
+ end
43
+
44
+ def format=(type)
45
+ type = type.downcase if type.is_a?(String)
46
+ @format = case type
47
+ when *Weary::ContentTypes[:json]
48
+ :json
49
+ when *Weary::ContentTypes[:xml]
50
+ :xml
51
+ when *Weary::ContentTypes[:html]
52
+ :html
53
+ when *Weary::ContentTypes[:yaml]
54
+ :yaml
55
+ when *Weary::ContentTypes[:plain]
56
+ :plain
57
+ else
58
+ raise ArgumentError, "#{type} is not a recognized format."
59
+ end
60
+ end
61
+
62
+ # http://develop.github.com/p/users.html
63
+ def user(query) #query = search term or username
64
+ u = OctocatNap::User
65
+ u.always_with @credentials
66
+ u = set_defaults(u, "user")
67
+
68
+ u.get "search" do |r|
69
+ r.url = "<domain>/<resource>/#{query}"
70
+ end
71
+
72
+ u.get "show" do |r|
73
+ r.url = "<domain>/<resource>/#{query}"
74
+ end
75
+
76
+ u.post "update" do |r|
77
+ raise "You need to authenticate to perform this method. Please enter your credentials." if @credentials.nil?
78
+ r.url = "<domain>/show/#{query}"
79
+ r.requires = [:login,:token]
80
+ r.with = @credentials.merge({"values[name]" => nil, "values[email]" => nil, "values[blog]" => nil, "values[company]" => nil, "values[location]" => nil})
81
+ end
82
+
83
+ u.get "followers" do |r|
84
+ r.url = "<domain>/show/#{query}/<resource>"
85
+ end
86
+
87
+ u.get "following" do |r|
88
+ r.url = "<domain>/show/#{query}/<resource>"
89
+ end
90
+
91
+ u.post "follow" do |r|
92
+ r.url = "<domain>/<resource>/#{query}"
93
+ r.requires = [:login,:token]
94
+ end
95
+
96
+ u.post "unfollow" do |r|
97
+ r.url = "<domain>/<resource>/#{query}"
98
+ r.requires = [:login,:token]
99
+ end
100
+
101
+ u.get "keys" do |r|
102
+ r.url = "<domain>/keys"
103
+ r.requires = [:login,:token]
104
+ end
105
+
106
+ u.post "add_keys" do |r|
107
+ r.url = "<domain>/key/add"
108
+ r.requires = [:login, :token, :name, :key]
109
+ end
110
+
111
+ u.post "remove_keys" do |r|
112
+ r.url = "<domain>/key/remove"
113
+ r.requires = [:login, :token, :id]
114
+ end
115
+ return u.new(@credentials)
116
+ end
117
+
118
+ # http://develop.github.com/p/issues.html
119
+ def issues(user,repo,state,search_term,label,number)
120
+ i = OctocatNap::Issues
121
+ i.always_with @credentials
122
+ i = set_defaults(i, "issues")
123
+ i.get "search" do |r|
124
+ r.url ="<domain>/<resource>/#{user}/#{repo}/#{state}/#{search_term}"
125
+ end
126
+
127
+ i.get "list" do |r|
128
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{state}"
129
+ end
130
+
131
+ i.get "show" do |r|
132
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{number}"
133
+ end
134
+
135
+ i.post "open" do |r|
136
+ r.url = "<domain>/<resource>/#{user}/#{repo}"
137
+ r.requires = [:login, :token, :title, :body]
138
+ end
139
+
140
+ i.post "close" do |r|
141
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{number}"
142
+ r.requires = [:login, :token]
143
+ end
144
+
145
+ i.post "reopen" do |r|
146
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{number}"
147
+ r.requires = [:login, :token]
148
+ end
149
+
150
+ i.post "edit" do |r|
151
+ raise "You need to authenticate to perform this method. Please enter your credentials." if @credentials.nil?
152
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{number}"
153
+ r.requires = [:login, :token]
154
+ r.with = @credentials.merge(:title => nil, :body => nil)
155
+ end
156
+
157
+ i.post "add_label" do |r|
158
+ r.url = "<domain>/label/add/#{user}/#{repo}/#{label}/#{number}"
159
+ r.requires = [:login, :token]
160
+ end
161
+
162
+ i.post "remove_label" do |r|
163
+ r.url = "<domain>/label/remove/#{user}/#{repo}/#{label}/#{number}"
164
+ r.requires = [:login, :token]
165
+ end
166
+
167
+ i.post "comment" do |r|
168
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{number}"
169
+ r.requires = [:login, :token, :comment]
170
+ end
171
+ return i.new(@credentials)
172
+ end
173
+
174
+ # the Network API is only available in JSON
175
+ # http://develop.github.com/p/network.html
176
+ def network(user,repo)
177
+ n = OctocatNap::Network
178
+ n.get "meta" do |r|
179
+ r.url = "<domain>#{user}/#{repo}/network_meta"
180
+ end
181
+
182
+ n.get "data" do |r|
183
+ r.url = "<domain>#{user}/#{repo}/network_data_chunk"
184
+ r.requires = [:nethash]
185
+ r.with = [:start, :end]
186
+ end
187
+
188
+ return n.new(@credentials)
189
+ end
190
+
191
+ def repository(query, repo) #query = search term or user name
192
+ r = OctocatNap::Repository
193
+ r.always_with @credentials
194
+ r = set_defaults(r, "repos")
195
+
196
+ r.get "search" do |x|
197
+ x.url = "<domain>/<resource>/#{query}"
198
+ end
199
+
200
+ r.get "show" do |x|
201
+ x.url = "<domain>/<resource>/#{query}/#{repo}"
202
+ end
203
+
204
+ r.get "list" do |x|
205
+ x.url = "<domain>/show/#{query}"
206
+ end
207
+
208
+ r.get "unwatch" do |x|
209
+ x.requires = [:login, :token]
210
+ x.url = "<domain>/<resource>/#{query}/#{repo}"
211
+ end
212
+
213
+ r.get "watch" do |x|
214
+ x.requires = [:login, :token]
215
+ x.url = "<domain>/<resource>/#{query}/#{repo}"
216
+ end
217
+
218
+ r.get "fork" do |x|
219
+ x.requires = [:login, :token]
220
+ x.url = "<domain>/<resource>/#{query}/#{repo}"
221
+ end
222
+
223
+ r.post "create" do |x|
224
+ raise "You need to authenticate to perform this method. Please enter your credentials." if @credentials.nil?
225
+ x.requires = [:login, :token, :name]
226
+ x.with = @credentials.merge({:description => nil, :homepage => nil, :public => nil})
227
+ x.url = "<domain>/<resource>"
228
+ end
229
+
230
+ r.post "delete" do |x|
231
+ raise "You need to authenticate to perform this method. Please enter your credentials." if @credentials.nil?
232
+ x.requires = [:login, :token]
233
+ x.with = @credentials.merge({:delete_token => nil})
234
+ x.url = "<domain>/<resource>/#{repo}"
235
+ end
236
+
237
+ r.post "set_private" do |x|
238
+ x.requires = [:login, :token]
239
+ x.url = "<domain>/set/private/#{repo}"
240
+ end
241
+
242
+ r.post "set_public" do |x|
243
+ x.requires = [:login, :token]
244
+ x.url = "<domain>/set/public/#{repo}"
245
+ end
246
+
247
+ r.get "keys" do |x|
248
+ x.requires = [:login, :token]
249
+ x.url = "<domain>/<resource>/#{repo}"
250
+ end
251
+
252
+ r.post "add_key" do |x|
253
+ x.requires = [:login, :token, :title, :key]
254
+ x.url = "<domain>/key/#{repo}/add"
255
+ end
256
+
257
+ r.post "remove_key" do |x|
258
+ x.requires = [:login, :token, :id]
259
+ x.url = "<domain>/key/#{repo}/remove"
260
+ end
261
+
262
+ r.get "collaborators" do |x|
263
+ x.url = "<domain>/show/#{query}/#{repo}/<resource>"
264
+ end
265
+
266
+ r.post "add_collaborators" do |x|
267
+ x.requires = [:login, :token]
268
+ x.url = "<domain>/collaborators/#{repo}/add/#{query}"
269
+ end
270
+
271
+ r.post "remove_collaborators" do |x|
272
+ x.requires = [:login, :token]
273
+ x.url = "<domain>/collaborators/#{repo}/remove/#{query}"
274
+ end
275
+
276
+ r.get "network" do |x|
277
+ x.url = "<domain>/show/#{query}/#{repo}/<resource>"
278
+ end
279
+
280
+ r.get "tags" do |x|
281
+ x.url = "<domain>/show/#{query}/#{repo}/<resource>"
282
+ end
283
+
284
+ r.get "branches" do |x|
285
+ x.url = "<domain>/show/#{query}/#{repo}/<resource>"
286
+ end
287
+
288
+ return r.new(@credentials)
289
+ end
290
+
291
+ def commit(user,repo,branch,query) #query = path or sha
292
+ c = OctocatNap::Commit
293
+ c = set_defaults(c, "commits")
294
+
295
+ c.get "list" do |r|
296
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{branch}"
297
+ end
298
+
299
+ c.get "file" do |r|
300
+ r.url = "<domain>/list/#{user}/#{repo}/#{branch}/#{query}"
301
+ end
302
+
303
+ c.get "show" do |r|
304
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{query}"
305
+ end
306
+ return c.new(@credentials)
307
+ end
308
+
309
+ def tree(user,repo,tree_sha)
310
+ t = OctocatNap::Object
311
+ t = set_defaults(t, "tree")
312
+
313
+ t.get "show" do |r|
314
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{tree_sha}"
315
+ end
316
+
317
+ return t.new(@credentials)
318
+ end
319
+
320
+ def blob(user,repo,sha,path)
321
+ b = OctocatNap::Object
322
+ b = set_defaults(t, "blob")
323
+
324
+ b.get "raw" do |r|
325
+ r.url = "<domain>/show/#{user}/#{repo}/#{sha}"
326
+ end
327
+
328
+ b.get "show" do |r|
329
+ r.url = "<domain>/<resource>/#{user}/#{repo}/#{sha}/#{path}"
330
+ end
331
+
332
+ return b.new(@credentials)
333
+ end
334
+
335
+ private
336
+ def set_defaults(klass, domain)
337
+ klass.as_format format
338
+ klass.on_domain "http://github.com/api/v2/#{format}/#{domain}"
339
+ klass
340
+ end
341
+ end
342
+ end
@@ -0,0 +1,3 @@
1
+ # GitHub user login and token
2
+ login: github_username
3
+ token: github_token
@@ -0,0 +1,21 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe OctocatNap::Api do
4
+ before do
5
+ @test = OctocatNap::Api.new({:login => "github_username", :token => "github_token"})
6
+ end
7
+
8
+ it "should set credentials" do
9
+ @test.credentials.should == {:login => "github_username", :token => "github_token"}
10
+ end
11
+
12
+ it "should set the Weary default format" do
13
+ @test.class.as_format :json
14
+ @test.class.instance_variable_get(:@default_format).should == :json
15
+ end
16
+
17
+ it "should set the Weary domain" do
18
+ @test.class.on_domain "http://github.com/api/v2/"
19
+ @test.class.domain.should == "http://github.com/api/v2/"
20
+ end
21
+ end
@@ -0,0 +1,98 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe OctocatNap::Base do
4
+ describe "Authentication" do
5
+ it "should be instantiated with a user's login and token" do
6
+ test = OctocatNap.new("github_username",:github_token)
7
+ test.login.should == "github_username"
8
+ test.token.should == "github_token"
9
+ end
10
+
11
+ it "credentials can be in an array" do
12
+ test = OctocatNap.new(["github_username",:github_token])
13
+ test.login.should == "github_username"
14
+ test.token.should == "github_token"
15
+ end
16
+
17
+ it "credentials can also be in a hash" do
18
+ test = OctocatNap.new({:login => "github_username",:token => "github_token"})
19
+ test.login.should == "github_username"
20
+ test.token.should == "github_token"
21
+ end
22
+
23
+ it "should look for a yaml file with login and token if a file name is passed" do
24
+ test = OctocatNap.new(File.join(File.dirname(__FILE__), '..', 'fixtures', "config.yml"))
25
+ test.login.should == "github_username"
26
+ test.token.should == "github_token"
27
+ end
28
+
29
+ it "should look for login/token in git config" do
30
+ test = OctocatNap.new(true)
31
+ test.login.class.should == String
32
+ test.login.class.should == String
33
+ end
34
+
35
+ it "should be quiet if no login and token are passed" do
36
+ test = OctocatNap.new
37
+ test.login.should == nil
38
+ test.token.should == nil
39
+ end
40
+
41
+ it "should create a credentials hash" do
42
+ test = OctocatNap.new
43
+ test.credentials.should == nil
44
+ test = OctocatNap.new(true)
45
+ test.credentials.class.should == Hash
46
+ test.credentials.has_key?(:login).should == true
47
+ test.credentials.has_key?(:token).should == true
48
+ end
49
+ end
50
+
51
+ describe "Default Format" do
52
+ before do
53
+ @test = OctocatNap.new
54
+ end
55
+
56
+ it "should set a default format of JSON on initialization" do
57
+ @test.format.should == :json
58
+ end
59
+
60
+ it "should be able to set another format using Weary's validation" do
61
+ @test.format = 'yaml'
62
+ @test.format.should == :yaml
63
+ end
64
+ end
65
+
66
+ describe "An API" do
67
+ before do
68
+ @test = OctocatNap.new(true)
69
+ end
70
+
71
+ it "should set the defaults" do
72
+ t = @test.user("markwunsch")
73
+ t.class.domain.should == "http://github.com/api/v2/json/user"
74
+ t.class.instance_variable_get(:@default_format).should == :json
75
+ t.credentials.class.should == Hash
76
+ t.credentials.has_key?(:login).should == true
77
+ t.credentials.has_key?(:token).should == true
78
+ end
79
+
80
+ it "should produce a series of resources" do
81
+ @test.format = :yaml
82
+ t = @test.user("markwunsch")
83
+ t.class.resources.is_a?(Array).should == true
84
+ end
85
+ describe "Network API" do
86
+ it "should be on domain 'http://github.com/'" do
87
+ t = @test.network("mwunsch","octocatnap")
88
+ t.class.domain.should == "http://github.com/"
89
+ end
90
+ it "should be in JSON" do
91
+ @test.format = :yaml
92
+ t = @test.network("mwunsch","octocatnap")
93
+ t.class.instance_variable_get(:@default_format).should == :json
94
+ end
95
+ end
96
+
97
+ end
98
+ end
@@ -0,0 +1,5 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe OctocatNap do
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'pp'
2
+ require 'rubygems'
3
+ gem 'rspec'
4
+ require 'spec'
5
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'octocatnap')
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mwunsch-octocatnap
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0
5
+ platform: ruby
6
+ authors:
7
+ - Mark Wunsch
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-29 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: weary
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.4.0
24
+ version:
25
+ description: OctocatNap is a Ruby interface to the GitHub API v2. It is powered by Weary
26
+ email: mark@markwunsch.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - LICENSE
33
+ - README.md
34
+ files:
35
+ - .gitignore
36
+ - LICENSE
37
+ - README.md
38
+ - Rakefile
39
+ - VERSION
40
+ - examples/user_show.rb
41
+ - examples/user_update.rb
42
+ - lib/octocatnap.rb
43
+ - lib/octocatnap/api.rb
44
+ - lib/octocatnap/base.rb
45
+ - spec/fixtures/config.yml
46
+ - spec/octocatnap/api_spec.rb
47
+ - spec/octocatnap/base_spec.rb
48
+ - spec/octocatnap_spec.rb
49
+ - spec/spec_helper.rb
50
+ has_rdoc: true
51
+ homepage: http://github.com/mwunsch/octocatnap
52
+ post_install_message:
53
+ rdoc_options:
54
+ - --charset=UTF-8
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ requirements: []
70
+
71
+ rubyforge_project:
72
+ rubygems_version: 1.2.0
73
+ signing_key:
74
+ specification_version: 2
75
+ summary: The GitHub API, wrapped in a Weary blanket
76
+ test_files:
77
+ - spec/octocatnap/api_spec.rb
78
+ - spec/octocatnap/base_spec.rb
79
+ - spec/octocatnap_spec.rb
80
+ - spec/spec_helper.rb
81
+ - examples/user_show.rb
82
+ - examples/user_update.rb