github-v3-api 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1,2 +1,2 @@
1
- rvm use ree-1.8.7-2011.03@github-v3-api --create --install
1
+ rvm use ruby-1.9.2-p180@github-v3-api --create --install
2
2
  bundle check
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ puts <<EOF
4
+ This script will start a sinatra web app on your machine that can log you in to
5
+ GitHub and show you your access token. This access token can then be used with
6
+ the GitHubV3API.
7
+
8
+ Once the server has started, just browse to http://localhost:4567. You may be
9
+ prompted to log in to GitHub and/or authorize the app. After that, your access
10
+ token will be displayed to you.
11
+
12
+ You will need to create a GitHub Application in order to use this. Just go to
13
+ https://github.com/account/applications/new and fill out the form. Pick any name
14
+ you want, and use http://localhost:4567 and
15
+ http://localhost:4567/auth/github/callback for the Main and Callback URLs,
16
+ respectively. After creating the application, use the generated client id and
17
+ client secret by running this script with the OAUTH_GITHUB_CLIENT_ID and
18
+ OATH_GITHUB_CLIENT_SECRET environment variables set.
19
+ EOF
20
+
21
+ print "Ready to go? (y/N): "
22
+
23
+ answer = STDIN.gets.chomp
24
+
25
+ unless answer =~ /^y(es)?$/i
26
+ exit(1)
27
+ end
28
+
29
+ unless ENV['OAUTH_GITHUB_CLIENT_ID'] && ENV['OAUTH_GITHUB_CLIENT_SECRET']
30
+ raise "Please set the OAUTH_GITHUB_CLIENT_ID and OAUTH_GITHUB_CLIENT_SECRET " \
31
+ + "environment variables before running this."
32
+ end
33
+
34
+ require 'rubygems'
35
+ require 'bundler/setup'
36
+ Bundler.setup(:sinatra)
37
+ require 'sinatra'
38
+ require 'openssl'
39
+ require 'omniauth'
40
+
41
+ enable :sessions
42
+
43
+ use OmniAuth::Builder do
44
+ provider :github, ENV['OAUTH_GITHUB_CLIENT_ID'], ENV['OAUTH_GITHUB_CLIENT_SECRET'],
45
+ :scope => 'user,repo,gist'
46
+ end
47
+
48
+ get '/' do
49
+ redirect '/auth/github'
50
+ end
51
+
52
+ get '/auth/github/callback' do
53
+ token = request.env['omniauth.auth']['credentials']['token']
54
+ "Your GitHub Access Token is #{token}"
55
+ end
@@ -5,13 +5,15 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{github-v3-api}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["John Wilger"]
12
- s.date = %q{2011-06-24}
12
+ s.date = %q{2011-07-03}
13
+ s.default_executable = %q{github-v3-api-get-token}
13
14
  s.description = %q{Ponies}
14
15
  s.email = %q{johnwilger@gmail.com}
16
+ s.executables = ["github-v3-api-get-token"]
15
17
  s.extra_rdoc_files = [
16
18
  "LICENSE.txt",
17
19
  "README.rdoc"
@@ -26,7 +28,7 @@ Gem::Specification.new do |s|
26
28
  "README.rdoc",
27
29
  "Rakefile",
28
30
  "VERSION",
29
- "get_access_token_sinatra_app.rb.template",
31
+ "bin/github-v3-api-get-token",
30
32
  "github-v3-api.gemspec",
31
33
  "lib/github-v3-api.rb",
32
34
  "lib/github_v3_api.rb",
data/lib/github_v3_api.rb CHANGED
@@ -17,6 +17,12 @@ require 'github_v3_api/repo'
17
17
  # #=> an instance of GitHubV3API::OrgsAPI
18
18
  #
19
19
  class GitHubV3API
20
+ # Raised when an API request returns a 404 error
21
+ NotFound = Class.new(RuntimeError)
22
+
23
+ # Raised when an API request uses an invalid access token
24
+ Unauthorized = Class.new(RuntimeError)
25
+
20
26
  # Returns a GitHubV3API instance that is able to access github with the
21
27
  # +access_token+ owner's authorization.
22
28
  #
@@ -46,5 +52,7 @@ class GitHubV3API
46
52
  {:accept => :json,
47
53
  :authorization => "token #{@access_token}"})
48
54
  JSON.parse(result)
55
+ rescue RestClient::Unauthorized
56
+ raise Unauthorized, "The access token is invalid according to GitHub"
49
57
  end
50
58
  end
@@ -7,6 +7,10 @@ class GitHubV3API
7
7
  :name, :open_issues, :organization, :owner, :parent, :private, :pushed_at,
8
8
  :size, :source, :url, :watchers
9
9
 
10
+ def owner_login
11
+ owner['login']
12
+ end
13
+
10
14
  private
11
15
 
12
16
  def natural_key
@@ -40,6 +40,8 @@ class GitHubV3API
40
40
  def get(user, repo_name)
41
41
  org_data = @connection.get("/repos/#{user}/#{repo_name}")
42
42
  GitHubV3API::Repo.new_with_all_data(self, org_data)
43
+ rescue RestClient::ResourceNotFound
44
+ raise NotFound, "The repository #{user}/#{repo_name} does not exist or is not visible to the user."
43
45
  end
44
46
  end
45
47
  end
@@ -33,5 +33,11 @@ describe GitHubV3API do
33
33
  api = GitHubV3API.new('abcde')
34
34
  api.get('/something').should == [{"foo" => "bar"}]
35
35
  end
36
+
37
+ it 'raises GitHubV3API::Unauthorized instead of RestClient::Unauthorized' do
38
+ RestClient.stub!(:get).and_raise(RestClient::Unauthorized)
39
+ api = GitHubV3API.new('abcde')
40
+ lambda { api.get('/something') }.should raise_error(GitHubV3API::Unauthorized)
41
+ end
36
42
  end
37
43
  end
data/spec/org_spec.rb CHANGED
@@ -10,7 +10,7 @@ describe GitHubV3API::Org do
10
10
  total_private_repos type url)
11
11
  fields.each do |f|
12
12
  org = GitHubV3API::Org.new_with_all_data(stub('api'), {f.to_s => 'foo'})
13
- org.methods.should include(f)
13
+ org.methods.should include(f.to_sym)
14
14
  org.send(f).should == 'foo'
15
15
  end
16
16
  end
data/spec/repo_spec.rb CHANGED
@@ -8,7 +8,7 @@ describe GitHubV3API::Repo do
8
8
  organization owner parent private pushed_at size source url watchers)
9
9
  fields.each do |f|
10
10
  repo = GitHubV3API::Repo.new_with_all_data(stub('api'), {f.to_s => 'foo'})
11
- repo.methods.should include(f)
11
+ repo.methods.should include(f.to_sym)
12
12
  repo.send(f).should == 'foo'
13
13
  end
14
14
  end
@@ -32,4 +32,12 @@ describe GitHubV3API::Repo do
32
32
  repo['private'].should == true
33
33
  end
34
34
  end
35
+
36
+ describe '#owner_login' do
37
+ it 'returns the login name of the repo owner' do
38
+ api = stub(GitHubV3API::ReposAPI)
39
+ repo = GitHubV3API::Repo.new_with_all_data(api, 'owner' => {'login' => 'octocat'})
40
+ repo.owner_login.should == 'octocat'
41
+ end
42
+ end
35
43
  end
@@ -21,5 +21,13 @@ describe GitHubV3API::ReposAPI do
21
21
  GitHubV3API::Repo.should_receive(:new_with_all_data).with(api, :repo_hash).and_return(:repo)
22
22
  api.get('octocat', 'hello-world').should == :repo
23
23
  end
24
+
25
+ it 'raises GitHubV3API::NotFound instead of a RestClient::ResourceNotFound' do
26
+ connection = mock(GitHubV3API)
27
+ connection.should_receive(:get) \
28
+ .and_raise(RestClient::ResourceNotFound)
29
+ api = GitHubV3API::ReposAPI.new(connection)
30
+ lambda { api.get('octocat', 'hello-world') }.should raise_error(GitHubV3API::NotFound)
31
+ end
24
32
  end
25
33
  end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-v3-api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 3
10
- version: 0.0.3
5
+ version: 0.0.4
11
6
  platform: ruby
12
7
  authors:
13
8
  - John Wilger
@@ -15,139 +10,101 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-06-24 00:00:00 -07:00
19
- default_executable:
13
+ date: 2011-07-03 00:00:00 -07:00
14
+ default_executable: github-v3-api-get-token
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
22
- type: :runtime
17
+ name: rest-client
23
18
  requirement: &id001 !ruby/object:Gem::Requirement
24
19
  none: false
25
20
  requirements:
26
21
  - - ~>
27
22
  - !ruby/object:Gem::Version
28
- hash: 9
29
- segments:
30
- - 1
31
- - 6
32
- - 3
33
23
  version: 1.6.3
34
- name: rest-client
35
- version_requirements: *id001
24
+ type: :runtime
36
25
  prerelease: false
26
+ version_requirements: *id001
37
27
  - !ruby/object:Gem::Dependency
38
- type: :runtime
28
+ name: json
39
29
  requirement: &id002 !ruby/object:Gem::Requirement
40
30
  none: false
41
31
  requirements:
42
32
  - - ~>
43
33
  - !ruby/object:Gem::Version
44
- hash: 5
45
- segments:
46
- - 1
47
- - 5
48
- - 3
49
34
  version: 1.5.3
50
- name: json
51
- version_requirements: *id002
35
+ type: :runtime
52
36
  prerelease: false
37
+ version_requirements: *id002
53
38
  - !ruby/object:Gem::Dependency
54
- type: :development
39
+ name: rspec
55
40
  requirement: &id003 !ruby/object:Gem::Requirement
56
41
  none: false
57
42
  requirements:
58
43
  - - ~>
59
44
  - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 2
63
- - 3
64
- - 0
65
45
  version: 2.3.0
66
- name: rspec
67
- version_requirements: *id003
46
+ type: :development
68
47
  prerelease: false
48
+ version_requirements: *id003
69
49
  - !ruby/object:Gem::Dependency
70
- type: :development
50
+ name: bundler
71
51
  requirement: &id004 !ruby/object:Gem::Requirement
72
52
  none: false
73
53
  requirements:
74
54
  - - ~>
75
55
  - !ruby/object:Gem::Version
76
- hash: 23
77
- segments:
78
- - 1
79
- - 0
80
- - 0
81
56
  version: 1.0.0
82
- name: bundler
83
- version_requirements: *id004
57
+ type: :development
84
58
  prerelease: false
59
+ version_requirements: *id004
85
60
  - !ruby/object:Gem::Dependency
86
- type: :development
61
+ name: jeweler
87
62
  requirement: &id005 !ruby/object:Gem::Requirement
88
63
  none: false
89
64
  requirements:
90
65
  - - ~>
91
66
  - !ruby/object:Gem::Version
92
- hash: 15
93
- segments:
94
- - 1
95
- - 6
96
- - 0
97
67
  version: 1.6.0
98
- name: jeweler
99
- version_requirements: *id005
68
+ type: :development
100
69
  prerelease: false
70
+ version_requirements: *id005
101
71
  - !ruby/object:Gem::Dependency
102
- type: :development
72
+ name: rcov
103
73
  requirement: &id006 !ruby/object:Gem::Requirement
104
74
  none: false
105
75
  requirements:
106
76
  - - ">="
107
77
  - !ruby/object:Gem::Version
108
- hash: 3
109
- segments:
110
- - 0
111
78
  version: "0"
112
- name: rcov
113
- version_requirements: *id006
79
+ type: :development
114
80
  prerelease: false
81
+ version_requirements: *id006
115
82
  - !ruby/object:Gem::Dependency
116
- type: :development
83
+ name: reek
117
84
  requirement: &id007 !ruby/object:Gem::Requirement
118
85
  none: false
119
86
  requirements:
120
87
  - - ~>
121
88
  - !ruby/object:Gem::Version
122
- hash: 15
123
- segments:
124
- - 1
125
- - 2
126
- - 8
127
89
  version: 1.2.8
128
- name: reek
129
- version_requirements: *id007
90
+ type: :development
130
91
  prerelease: false
92
+ version_requirements: *id007
131
93
  - !ruby/object:Gem::Dependency
132
- type: :development
94
+ name: roodi
133
95
  requirement: &id008 !ruby/object:Gem::Requirement
134
96
  none: false
135
97
  requirements:
136
98
  - - ~>
137
99
  - !ruby/object:Gem::Version
138
- hash: 11
139
- segments:
140
- - 2
141
- - 1
142
- - 0
143
100
  version: 2.1.0
144
- name: roodi
145
- version_requirements: *id008
101
+ type: :development
146
102
  prerelease: false
103
+ version_requirements: *id008
147
104
  description: Ponies
148
105
  email: johnwilger@gmail.com
149
- executables: []
150
-
106
+ executables:
107
+ - github-v3-api-get-token
151
108
  extensions: []
152
109
 
153
110
  extra_rdoc_files:
@@ -163,7 +120,7 @@ files:
163
120
  - README.rdoc
164
121
  - Rakefile
165
122
  - VERSION
166
- - get_access_token_sinatra_app.rb.template
123
+ - bin/github-v3-api-get-token
167
124
  - github-v3-api.gemspec
168
125
  - lib/github-v3-api.rb
169
126
  - lib/github_v3_api.rb
@@ -192,7 +149,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
192
149
  requirements:
193
150
  - - ">="
194
151
  - !ruby/object:Gem::Version
195
- hash: 3
152
+ hash: 1496179745078912717
196
153
  segments:
197
154
  - 0
198
155
  version: "0"
@@ -201,9 +158,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
201
158
  requirements:
202
159
  - - ">="
203
160
  - !ruby/object:Gem::Version
204
- hash: 3
205
- segments:
206
- - 0
207
161
  version: "0"
208
162
  requirements: []
209
163
 
@@ -1,25 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- Bundler.setup(:sinatra)
4
- require 'sinatra'
5
- require 'openssl'
6
- require 'omniauth'
7
-
8
- # Because fuck you, Apple
9
- OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
10
-
11
- enable :sessions
12
-
13
- use OmniAuth::Builder do
14
- provider :github, YOUR_APP_ID, YOUR_APP_SECRET,
15
- :scope => 'user,repo,gist'
16
- end
17
-
18
- get '/' do
19
- redirect '/auth/github'
20
- end
21
-
22
- get '/auth/github/callback' do
23
- token = request.env['omniauth.auth']['credentials']['token']
24
- "Your GitHub Access Token is #{token}"
25
- end