github_api_v3 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/README.md +132 -29
- data/lib/github_api_v3/client/gists.rb +75 -5
- data/lib/github_api_v3/client/gitignore.rb +33 -0
- data/lib/github_api_v3/client/markdown.rb +29 -0
- data/lib/github_api_v3/client/repos.rb +8 -5
- data/lib/github_api_v3/client/users.rb +3 -3
- data/lib/github_api_v3/client.rb +100 -8
- data/lib/github_api_v3/default.rb +5 -0
- data/lib/github_api_v3/error.rb +13 -0
- data/lib/github_api_v3/version.rb +1 -1
- data/spec/cassettes/GitHub_Client_Gists/_create_delete_gist/creates_a_gist.json +1 -1
- data/spec/cassettes/GitHub_Client_Gists/_create_delete_gist/deletes_a_gist.json +1 -1
- data/spec/cassettes/GitHub_Client_Gists/_create_gist_comment/creates_the_comment.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_create_gist_comment/returns_comment_information_after_creation.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_delete_gist_comment/deletes_the_comment.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_delete_gist_comment/returns_true_or_false.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_edit_gist_comment/edits_the_comment.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_edit_gist_comment/returns_comment_information_after_editing.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_fork_gist/forks_a_gist.json +1 -1
- data/spec/cassettes/GitHub_Client_Gists/_fork_gist/returns_false_when_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_gist/returns_a_404_when_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_gist_comment/returns_a_404_when_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_gist_comment/returns_a_comment.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_gist_comments/returns_a_404_when_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_gist_comments/returns_a_list_of_comments.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_gist_starred_/returns_false_when_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_gist_starred_/should_return_true_or_false.json +1 -1
- data/spec/cassettes/GitHub_Client_Gists/_star_gist/returns_false_when_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_star_gist/stars_a_gist.json +1 -1
- data/spec/cassettes/GitHub_Client_Gists/_unstar_gist/returns_false_when_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Gists/_unstar_gist/unstars_a_gist.json +1 -1
- data/spec/cassettes/GitHub_Client_Gitignore/_gitignore/returns_a_hash.json +1 -0
- data/spec/cassettes/GitHub_Client_Gitignore/_gitignore/returns_the_correct_template.json +1 -0
- data/spec/cassettes/GitHub_Client_Gitignore/_gitignore_list/returns_an_array_of_templates.json +1 -0
- data/spec/cassettes/GitHub_Client_Markdown/_markdown/returns_rendered_markdown.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_add_remove_collaborator/adds_a_collaborator.json +1 -1
- data/spec/cassettes/GitHub_Client_Repos/_add_remove_collaborator/removes_a_collaborator.json +1 -1
- data/spec/cassettes/GitHub_Client_Repos/_branch/returns_a_404_if_repo_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_collaborator_/returns_a_boolean.json +1 -1
- data/spec/cassettes/GitHub_Client_Repos/_collaborators/returns_a_404_if_repo_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_contributors/returns_a_404_if_repo_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_create_repo/returns_unauthorized_when_not_authorized.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_delete_repo/deletes_a_repo.json +1 -1
- data/spec/cassettes/GitHub_Client_Repos/_delete_repo/returns_false_if_not_authorized.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_delete_repo/returns_false_when_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_delete_repo/returns_unauthorized_if_not_authorized.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_languages/returns_a_404_if_repo_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_org_repos/returns_a_404_if_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_org_repos/returns_a_404_if_repo_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Repos/_tags/returns_a_404_if_repo_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Users/_events/returns_a_404_for_user_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Users/_follow/follows_a_user.json +1 -1
- data/spec/cassettes/GitHub_Client_Users/_follows_/returns_false_when_not_following.json +1 -0
- data/spec/cassettes/GitHub_Client_Users/_follows_/{returns_a_boolean.json → returns_true_when_following.json} +1 -1
- data/spec/cassettes/GitHub_Client_Users/_unfollow/unfollows_a_user.json +1 -1
- data/spec/cassettes/GitHub_Client_Users/_user/returns_a_404_if_user_not_found.json +1 -0
- data/spec/cassettes/GitHub_Client_Users/keys/returns_404_for_user_not_found.json +1 -0
- data/spec/github_api_v3/client/gists_spec.rb +83 -0
- data/spec/github_api_v3/client/gitignore_spec.rb +23 -0
- data/spec/github_api_v3/client/markdown_spec.rb +12 -0
- data/spec/github_api_v3/client/repos_spec.rb +37 -1
- data/spec/github_api_v3/client/users_spec.rb +20 -5
- metadata +77 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd0406fd884e781cfdc83e36808666c83cad39e4
|
4
|
+
data.tar.gz: f4a3414547c49f1c6eb4ca040bb968b6a9a2a92a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29f439a47344bae930b71495dea13f84a8f5da4558a75e71d09e4cac398b74d804a64aac0b2756557a162c99fe9e2a1fe3cce34258d34d7dbc90a635c6753001
|
7
|
+
data.tar.gz: 1c4e26602951983561dab72d654d826ce6d07b27808002ffeeb33b95ef79d8fdfa6aa4cbc848642b9bdc44cb0feaa253ab1d6b625aca704a2f53a18693f14f2b
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -4,8 +4,14 @@
|
|
4
4
|
|
5
5
|
This is a simple wrapper for GitHub's v3 API. It is in the EARLY stages of development. Knowing a little about [GitHub's API](http://developer.github.com/) will aid in its use.
|
6
6
|
|
7
|
+
## Documentation
|
8
|
+
|
9
|
+
Full documentation for the gem can be found at [rdoc.info/gems/github_api_v3/frames/index](http://rdoc.info/gems/github_api_v3/frames/index).
|
10
|
+
|
7
11
|
## Installation
|
8
12
|
|
13
|
+
To install the gem, issue the following command:
|
14
|
+
|
9
15
|
```bash
|
10
16
|
$ gem install github_api_v3
|
11
17
|
```
|
@@ -14,72 +20,169 @@ $ gem install github_api_v3
|
|
14
20
|
|
15
21
|
```ruby
|
16
22
|
require 'github_api_v3'
|
17
|
-
# => true
|
18
23
|
```
|
19
24
|
|
20
25
|
### Unauthenticated Requests
|
21
26
|
|
22
|
-
There are multiple different unauthenticated requests to the API.
|
27
|
+
There are multiple different unauthenticated requests to the API. These are performed when no credentials are given, and usually start with `GitHub`.
|
23
28
|
|
24
|
-
#### User
|
25
29
|
|
26
|
-
|
30
|
+
### Authenticated Requests
|
31
|
+
|
32
|
+
Some methods, such as retrieving private repos or emails, require authentication. To create one of these requests, you'll need to pass in your login and access token. You can create a personal access token on your [account page](https://github.com/settings/applications).
|
27
33
|
|
28
34
|
```ruby
|
35
|
+
client = GitHub::Client.new(login: 'username', access_token: 'abcdefghijklmnopqrstuvwxyz12345')
|
36
|
+
client.emails # => ["email@example.com", "email2@example.com"]
|
37
|
+
client.repos # => #<Array:0x007fb8aa0d1a00>
|
38
|
+
client.follow('matz') # => true
|
39
|
+
client.user # => #<Hash:0x007fb8a9109d70>
|
40
|
+
```
|
41
|
+
|
42
|
+
Anytime a method is shown below starting with `client`, it is an authenticated method.
|
43
|
+
|
44
|
+
### Sample usage
|
45
|
+
|
46
|
+
#### Users
|
47
|
+
|
48
|
+
The following are some sample usages of the Users module.
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
# Retrieve a single user
|
29
52
|
user = GitHub.user('caseyscarborough')
|
30
53
|
user.login # => "caseyscarborough"
|
31
54
|
user.name # => "Casey Scarborough"
|
32
55
|
user.html_url # => "https://github.com/caseyscarborough"
|
33
56
|
user.following # => 23
|
34
|
-
# etc...
|
35
|
-
```
|
36
|
-
You can find the available attributes [here](http://developer.github.com/v3/users/#get-a-single-user).
|
37
57
|
|
38
|
-
|
58
|
+
# Retrieve an array of all GitHub users
|
59
|
+
GitHub.users
|
39
60
|
|
40
|
-
|
61
|
+
# Get emails for authenticated user
|
62
|
+
client.emails
|
41
63
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
```
|
64
|
+
# Follow/unfollow a user
|
65
|
+
client.follow('caseyscarborough')
|
66
|
+
client.unfollow('caseyscarborough')
|
46
67
|
|
47
|
-
|
68
|
+
# Check if a user follows another user
|
69
|
+
GitHub.follows?('caseyscarborough','matz')
|
48
70
|
|
49
|
-
|
71
|
+
# Get a list of an unauthenticated user's followers
|
72
|
+
GitHub.followers('caseyscarborough')
|
50
73
|
|
51
|
-
|
52
|
-
|
53
|
-
|
74
|
+
# Get a list of an authenticated user's followers
|
75
|
+
client.followers
|
76
|
+
|
77
|
+
# Get a list of user's a user is following
|
78
|
+
GitHub.following('caseyscarborough')
|
79
|
+
|
80
|
+
# See if authenticated user is following another user
|
81
|
+
client.following?('caseyscarborough')
|
82
|
+
|
83
|
+
# Get events for a user
|
84
|
+
GitHub.events('caseyscarborough')
|
85
|
+
|
86
|
+
# etc...
|
54
87
|
```
|
88
|
+
You can find the available attributes [here](http://developer.github.com/v3/users/#get-a-single-user). Check the [Users documentation](http://rdoc.info/gems/github_api_v3/GitHub/Client/Users) for the gem for a complete list and more examples.
|
55
89
|
|
56
90
|
#### Repositories
|
57
91
|
|
58
|
-
|
92
|
+
The following are some sample usages for the Repos module.
|
59
93
|
|
60
94
|
```ruby
|
61
|
-
repos
|
62
|
-
repos
|
95
|
+
# Get repos for an unauthenticated/authenticated user
|
96
|
+
GitHub.repos('caseyscarborough')
|
97
|
+
client.repos
|
98
|
+
|
99
|
+
# Get all public repos on GitHub
|
100
|
+
GitHub.all_repos
|
101
|
+
|
102
|
+
# Get a specific repo
|
103
|
+
GitHub.repo('owner','repo-name')
|
104
|
+
|
105
|
+
# Create a repo
|
106
|
+
client.create_repo('new-repo', description: 'New repository.', private: true)
|
107
|
+
|
108
|
+
# Delete a repo
|
109
|
+
client.delete_repo('repo-name')
|
110
|
+
|
111
|
+
# Get a repository's contributors/languages/tags/branches/collaborators
|
112
|
+
GitHub.contributors('caseyscarborough','github')
|
113
|
+
GitHub.languages('caseyscarborough','github')
|
114
|
+
GitHub.tags('caseyscarborough','github')
|
115
|
+
GitHub.branches('caseyscarborough','github')
|
116
|
+
GitHub.collaborators('caseyscarborough','github')
|
117
|
+
|
118
|
+
# Get a specific branch
|
119
|
+
GitHub.branch('caseyscarborough','github','master')
|
120
|
+
|
121
|
+
# Add/remove collaborator
|
122
|
+
client.add_collaborator('owner','repo-name','user-to-add')
|
123
|
+
client.remove_collaborator('owner','repo-name','user-to-remove')
|
63
124
|
```
|
125
|
+
For a full list with descriptions, see the [Repos documentation](http://rdoc.info/gems/github_api_v3/GitHub/Client/Repos) for the gem.
|
64
126
|
|
65
|
-
|
127
|
+
#### Gists
|
66
128
|
|
67
|
-
|
129
|
+
The following are sample uses for the Gists module.
|
68
130
|
|
69
131
|
```ruby
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
client.
|
132
|
+
# Get all gists for a user
|
133
|
+
GitHub.gists('caseyscarborough')
|
134
|
+
|
135
|
+
# Get all gists for authenticated user
|
136
|
+
client.gists
|
137
|
+
|
138
|
+
# Get all public gists
|
139
|
+
GitHub.gists
|
140
|
+
|
141
|
+
# Get a gist by id
|
142
|
+
GitHub.gist(1234567)
|
143
|
+
|
144
|
+
# Create a gist
|
145
|
+
client.create_gist(
|
146
|
+
files: {"file1.txt" => { content: "File contents" }},
|
147
|
+
description: "Gist description",
|
148
|
+
public: "false"
|
149
|
+
)
|
150
|
+
|
151
|
+
# Check if a gist is starred
|
152
|
+
client.gist_starred?(1234567)
|
153
|
+
|
154
|
+
# Star/unstar/fork/delete a gist
|
155
|
+
client.star_gist(1234567)
|
156
|
+
client.unstar_gist(1234567)
|
157
|
+
client.fork_gist(1234567)
|
158
|
+
client.delete_gist(1234567)
|
75
159
|
```
|
160
|
+
Check out the [Gist documentation](http://rdoc.info/gems/github_api_v3/GitHub/Client/Gists) for more information.
|
161
|
+
|
162
|
+
## Running the Test Suite
|
163
|
+
|
164
|
+
The test suite can be run by issuing the following command from the root of the directory:
|
76
165
|
|
77
|
-
|
166
|
+
```bash
|
167
|
+
$ rspec spec/
|
168
|
+
```
|
78
169
|
|
79
170
|
## To Do
|
80
171
|
|
81
172
|
The better question is... What's not to do? Any functionality of the API listed at [developer.github.com](http://developer.github.com/) that isn't currently in effect.
|
82
173
|
|
174
|
+
Some main missing functionality:
|
175
|
+
* A good bit of the [Repos API](http://developer.github.com/v3/repos/), such as:
|
176
|
+
* Comments
|
177
|
+
* Commits
|
178
|
+
* Hooks
|
179
|
+
* Forks
|
180
|
+
* etc.
|
181
|
+
* Markdown
|
182
|
+
* Editing Gists
|
183
|
+
* Editing Repos
|
184
|
+
* Updating User keys
|
185
|
+
|
83
186
|
## Contributing
|
84
187
|
|
85
188
|
1. Fork it
|
@@ -1,6 +1,9 @@
|
|
1
1
|
module GitHub
|
2
2
|
class Client
|
3
3
|
|
4
|
+
# Contains methods for the Gists API.
|
5
|
+
#
|
6
|
+
# @see http://developer.github.com/v3/gists/
|
4
7
|
module Gists
|
5
8
|
|
6
9
|
# List gists.
|
@@ -60,7 +63,7 @@ module GitHub
|
|
60
63
|
# @return [Boolean] True if it is starred, false if not.
|
61
64
|
# @see http://developer.github.com/v3/gists/#check-if-a-gist-is-starred
|
62
65
|
def gist_starred?(id)
|
63
|
-
|
66
|
+
boolean_get "/gists/#{id}/star", auth_params
|
64
67
|
end
|
65
68
|
|
66
69
|
# Star a gist.
|
@@ -73,7 +76,7 @@ module GitHub
|
|
73
76
|
# @example
|
74
77
|
# client.star_gist(5928712)
|
75
78
|
def star_gist(id)
|
76
|
-
|
79
|
+
boolean_put "/gists/#{id}/star", auth_params
|
77
80
|
end
|
78
81
|
|
79
82
|
# Unstar a gist.
|
@@ -86,7 +89,7 @@ module GitHub
|
|
86
89
|
# @example
|
87
90
|
# client.unstar_gist(5928712)
|
88
91
|
def unstar_gist(id)
|
89
|
-
|
92
|
+
boolean_delete "/gists/#{id}/star", auth_params
|
90
93
|
end
|
91
94
|
|
92
95
|
# Fork a gist.
|
@@ -99,7 +102,7 @@ module GitHub
|
|
99
102
|
# @example
|
100
103
|
# client.fork_gist(5928712)
|
101
104
|
def fork_gist(id)
|
102
|
-
|
105
|
+
boolean_post "/gists/#{id}/fork", auth_params, {}
|
103
106
|
end
|
104
107
|
|
105
108
|
# Delete a gist.
|
@@ -111,8 +114,75 @@ module GitHub
|
|
111
114
|
# @example
|
112
115
|
# client.delete_gist(5928712)
|
113
116
|
def delete_gist(id)
|
114
|
-
|
117
|
+
boolean_delete "/gists/#{id}", auth_params
|
115
118
|
end
|
119
|
+
|
120
|
+
# List comments on a gist.
|
121
|
+
#
|
122
|
+
# @param id [Integer] The Gist ID.
|
123
|
+
# @return [Array] An array of comments.
|
124
|
+
# @see http://developer.github.com/v3/gists/comments/#list-comments-on-a-gist
|
125
|
+
# @example
|
126
|
+
# GitHub.gist_comments(5928712)
|
127
|
+
def gist_comments(id)
|
128
|
+
get "/gists/#{id}/comments"
|
129
|
+
end
|
130
|
+
|
131
|
+
# Get a single comment on a gist.
|
132
|
+
#
|
133
|
+
# @param id [Integer] The Gist ID.
|
134
|
+
# @param comment_id [Integer] The comment ID.
|
135
|
+
# @return [Hash] The comment data.
|
136
|
+
# @see http://developer.github.com/v3/gists/comments/#get-a-single-comment
|
137
|
+
# @example
|
138
|
+
# GitHub.gist_comment(5928712, 889239)
|
139
|
+
def gist_comment(id, comment_id)
|
140
|
+
get "/gists/#{id}/comments/#{comment_id}"
|
141
|
+
end
|
142
|
+
|
143
|
+
# Create a gist comment.
|
144
|
+
#
|
145
|
+
# Requires authentication.
|
146
|
+
#
|
147
|
+
# @param id [Integer] The Gist ID.
|
148
|
+
# @param comment [String] The comment text.
|
149
|
+
# @return [Hash] The Gist information.
|
150
|
+
# @see http://developer.github.com/v3/gists/comments/#create-a-comment
|
151
|
+
# @example
|
152
|
+
# client.create_gist_comment(5928712, 'Awesome!')
|
153
|
+
def create_gist_comment(id, comment)
|
154
|
+
post "/gists/#{id}/comments", auth_params, { body: comment }
|
155
|
+
end
|
156
|
+
|
157
|
+
# Edit an existing gist comment.
|
158
|
+
#
|
159
|
+
# Requires authentication.
|
160
|
+
#
|
161
|
+
# @param id [Integer] The Gist ID.
|
162
|
+
# @param comment_id [Integer] The ID of the comment to edit.
|
163
|
+
# @param comment [String] The comment text.
|
164
|
+
# @return [Hash] The Gist information.
|
165
|
+
# @see http://developer.github.com/v3/gists/comments/#edit-a-comment
|
166
|
+
# @example
|
167
|
+
# client.edit_gist_comment(5928712, 889239, 'Even more awesome!')
|
168
|
+
def edit_gist_comment(id, comment_id, comment)
|
169
|
+
patch "/gists/#{id}/comments/#{comment_id}", auth_params, { body: comment }
|
170
|
+
end
|
171
|
+
|
172
|
+
# Delete a gist comment.
|
173
|
+
#
|
174
|
+
# Requires authentication.
|
175
|
+
#
|
176
|
+
# @param id [Integer] The Gist ID.
|
177
|
+
# @param comment_id [Integer] The ID of the comment to delete.
|
178
|
+
# @return [Boolean] True if successful, false if not.
|
179
|
+
# @see http://developer.github.com/v3/gists/comments/#delete-a-comment
|
180
|
+
# @example
|
181
|
+
# client.delete_gist_comment(5928712, 889239)
|
182
|
+
def delete_gist_comment(id, comment_id)
|
183
|
+
boolean_delete "/gists/#{id}/comments/#{comment_id}", auth_params
|
184
|
+
end
|
185
|
+
|
116
186
|
end
|
117
187
|
|
118
188
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module GitHub
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Contains methods for the Gitignore API.
|
5
|
+
#
|
6
|
+
# @see http://developer.github.com/v3/gitignore/
|
7
|
+
module Gitignore
|
8
|
+
|
9
|
+
# Lists available .gitignore templates.
|
10
|
+
#
|
11
|
+
# @return [Array] List of template names.
|
12
|
+
# @see http://developer.github.com/v3/gitignore/#listing-available-templates
|
13
|
+
# @example
|
14
|
+
# GitHub.gitignore_list
|
15
|
+
def gitignore_list
|
16
|
+
get '/gitignore/templates'
|
17
|
+
end
|
18
|
+
|
19
|
+
# Gets a single .gitignore template.
|
20
|
+
#
|
21
|
+
# @param name [String] The template name.
|
22
|
+
# @return [String] The template contents.
|
23
|
+
# @see http://developer.github.com/v3/gitignore/#get-a-single-template
|
24
|
+
# @example
|
25
|
+
# GitHub.gitignore("Ruby")
|
26
|
+
def gitignore(name)
|
27
|
+
get "/gitignore/templates/#{name}"
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module GitHub
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Contains methods for the Markdown API.
|
5
|
+
#
|
6
|
+
# @see http://developer.github.com/v3/markdown/
|
7
|
+
module Markdown
|
8
|
+
|
9
|
+
# Render a markdown document.
|
10
|
+
#
|
11
|
+
# @param text [String] The Markdown text to render.
|
12
|
+
# @param options [Hash] The optional options.
|
13
|
+
# @option options [String] :mode The rendering mode.
|
14
|
+
# @option options [String] :context The repository context, only used when in 'gfm' mode.
|
15
|
+
# @return [String] The rendered text.
|
16
|
+
# @see http://developer.github.com/v3/markdown/#render-an-arbitrary-markdown-document
|
17
|
+
# @example
|
18
|
+
# GitHub.markdown('# Hello World! ## H2 **yeah**!')
|
19
|
+
# @example
|
20
|
+
# GitHub.markdown('# GitHub', mode: 'gfm', context: 'caseyscarborough/github')
|
21
|
+
def markdown(text, options={mode: 'markdown'})
|
22
|
+
options.merge!(text: text)
|
23
|
+
post "/markdown", {}, options
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
module GitHub
|
2
2
|
class Client
|
3
3
|
|
4
|
+
# Contains methods for the Repos API.
|
5
|
+
#
|
6
|
+
# @see http://developer.github.com/v3/repos/
|
4
7
|
module Repos
|
5
8
|
|
6
9
|
# List all repositories
|
@@ -77,7 +80,7 @@ module GitHub
|
|
77
80
|
# @example
|
78
81
|
# client.delete_repo('repo-name')
|
79
82
|
def delete_repo(owner, repo)
|
80
|
-
|
83
|
+
boolean_delete "/repos/#{owner}/#{repo}", auth_params
|
81
84
|
end
|
82
85
|
|
83
86
|
# Get organization repositories.
|
@@ -135,7 +138,7 @@ module GitHub
|
|
135
138
|
#
|
136
139
|
# @param owner [String] Owner of repository.
|
137
140
|
# @param repo [String] Repository name.
|
138
|
-
# @return [Array] List of
|
141
|
+
# @return [Array] List of branches and their information.
|
139
142
|
# @see http://developer.github.com/v3/repos/#list-branches
|
140
143
|
# @example
|
141
144
|
# GitHub.branches('caseyscarborough','github')
|
@@ -177,7 +180,7 @@ module GitHub
|
|
177
180
|
# @example
|
178
181
|
# GitHub.collaborator?('caseyscarborough','github','caseyscarborough')
|
179
182
|
def collaborator?(owner, repo, user)
|
180
|
-
|
183
|
+
boolean_get "/repos/#{owner}/#{repo}/collaborators/#{user}"
|
181
184
|
end
|
182
185
|
|
183
186
|
# Add a collaborator to a repository.
|
@@ -189,7 +192,7 @@ module GitHub
|
|
189
192
|
# @param user [String] User to add.
|
190
193
|
# @see http://developer.github.com/v3/repos/collaborators/#add-collaborator
|
191
194
|
def add_collaborator(owner, repo, user)
|
192
|
-
|
195
|
+
boolean_put "/repos/#{owner}/#{repo}/collaborators/#{user}", auth_params
|
193
196
|
end
|
194
197
|
|
195
198
|
# Remove a collaborator from a repository.
|
@@ -201,7 +204,7 @@ module GitHub
|
|
201
204
|
# @param user [String] User to remove.
|
202
205
|
# @see http://developer.github.com/v3/repos/collaborators/#remove-collaborator
|
203
206
|
def remove_collaborator(owner, repo, user)
|
204
|
-
|
207
|
+
boolean_delete "/repos/#{owner}/#{repo}/collaborators/#{user}", auth_params
|
205
208
|
end
|
206
209
|
|
207
210
|
end
|
@@ -54,7 +54,7 @@
|
|
54
54
|
# @example
|
55
55
|
# client.follow('caseyscarborough')
|
56
56
|
def follow(username)
|
57
|
-
|
57
|
+
boolean_put "/user/following/#{username}", auth_params
|
58
58
|
end
|
59
59
|
|
60
60
|
# Checks to see if a user is following another user.
|
@@ -124,7 +124,7 @@
|
|
124
124
|
# @example
|
125
125
|
# client.unfollow('matz')
|
126
126
|
def unfollow(username)
|
127
|
-
|
127
|
+
boolean_delete "/user/following/#{username}", auth_params
|
128
128
|
end
|
129
129
|
|
130
130
|
# Get a list of public keys for a user.
|
@@ -166,7 +166,7 @@
|
|
166
166
|
# @example
|
167
167
|
# client.delete_key(123)
|
168
168
|
def delete_key(id)
|
169
|
-
|
169
|
+
boolean_delete "/user/keys/#{id}", auth_params
|
170
170
|
end
|
171
171
|
|
172
172
|
def events(username)
|
data/lib/github_api_v3/client.rb
CHANGED
@@ -2,16 +2,26 @@ require 'json'
|
|
2
2
|
require 'github_api_v3/client/users'
|
3
3
|
require 'github_api_v3/client/repos'
|
4
4
|
require 'github_api_v3/client/gists'
|
5
|
+
require 'github_api_v3/client/markdown'
|
6
|
+
require 'github_api_v3/client/gitignore'
|
5
7
|
|
6
8
|
module GitHub
|
9
|
+
|
10
|
+
# The main client for the API.
|
11
|
+
#
|
12
|
+
# @see http://developer.github.com/v3/
|
7
13
|
class Client
|
8
14
|
|
9
15
|
include HTTParty
|
16
|
+
|
17
|
+
# Default base uri for the API functionality.
|
10
18
|
base_uri Default::API_ENDPOINT
|
11
19
|
|
12
20
|
include GitHub::Client::Users
|
13
21
|
include GitHub::Client::Repos
|
14
22
|
include GitHub::Client::Gists
|
23
|
+
include GitHub::Client::Markdown
|
24
|
+
include GitHub::Client::Gitignore
|
15
25
|
|
16
26
|
attr_reader :login, :access_token
|
17
27
|
|
@@ -23,38 +33,120 @@ module GitHub
|
|
23
33
|
|
24
34
|
private
|
25
35
|
|
26
|
-
|
36
|
+
# Perform a get request.
|
37
|
+
#
|
38
|
+
# @return [Hash, Array, String]
|
39
|
+
def get(url, params={})
|
27
40
|
response = self.class.get url, query: params
|
28
41
|
handle_response(response)
|
29
|
-
|
42
|
+
response.parsed_response
|
43
|
+
end
|
44
|
+
|
45
|
+
# Perform a get request with boolean return type.
|
46
|
+
#
|
47
|
+
# @return [Boolean]
|
48
|
+
def boolean_get(url, params={})
|
49
|
+
response = self.class.get url, query: params
|
50
|
+
response.code == 204
|
51
|
+
rescue GitHub::NotFound
|
52
|
+
false
|
30
53
|
end
|
31
54
|
|
32
|
-
|
55
|
+
# Perform a put request.
|
56
|
+
#
|
57
|
+
# @return [Hash, Array, String]
|
58
|
+
def put(url, params={})
|
33
59
|
response = self.class.put url, query: params
|
34
60
|
handle_response(response)
|
35
|
-
|
61
|
+
response.parsed_response
|
36
62
|
end
|
37
63
|
|
38
|
-
|
64
|
+
# Perform a put request with boolean return type.
|
65
|
+
#
|
66
|
+
# @return [Boolean]
|
67
|
+
def boolean_put(url, params={})
|
68
|
+
response = self.class.put url, query: params
|
69
|
+
response.code == 204
|
70
|
+
rescue GitHub::NotFound
|
71
|
+
false
|
72
|
+
end
|
73
|
+
|
74
|
+
# Perform a post request.
|
75
|
+
#
|
76
|
+
# @return [Hash, Array, String]
|
77
|
+
def post(url, params={}, body={})
|
39
78
|
response = self.class.post url, query: params, body: body.to_json
|
40
79
|
handle_response(response)
|
41
|
-
|
80
|
+
response.parsed_response
|
42
81
|
end
|
43
82
|
|
44
|
-
|
83
|
+
# Perform a post request with boolean return type.
|
84
|
+
#
|
85
|
+
# @return [Boolean]
|
86
|
+
def boolean_post(url, params={}, body={})
|
87
|
+
response = self.class.post url, query: params, body: body.to_json
|
88
|
+
response.code == 204
|
89
|
+
rescue GitHub::NotFound
|
90
|
+
false
|
91
|
+
end
|
92
|
+
|
93
|
+
# Perform a patch request.
|
94
|
+
#
|
95
|
+
# @return [Hash, Array, String]
|
96
|
+
def patch(url, params={}, body={})
|
97
|
+
response = self.class.patch url, query: params, body: body.to_json
|
98
|
+
handle_response(response)
|
99
|
+
response.parsed_response
|
100
|
+
end
|
101
|
+
|
102
|
+
# Perform a patch request with boolean return type.
|
103
|
+
#
|
104
|
+
# @return [Boolean]
|
105
|
+
def boolean_patch(url, params={}, body={})
|
106
|
+
response = self.class.patch url, query: params, body: body.to_json
|
107
|
+
response.code == 204
|
108
|
+
rescue GitHub::NotFound
|
109
|
+
false
|
110
|
+
end
|
111
|
+
|
112
|
+
# Perform a delete request.
|
113
|
+
#
|
114
|
+
# @return [Hash, Array, String]
|
115
|
+
def delete(url, params={})
|
45
116
|
response = self.class.delete url, query: params
|
46
117
|
handle_response(response)
|
47
|
-
|
118
|
+
response.parsed_response
|
119
|
+
end
|
120
|
+
|
121
|
+
# Perform a delete request with boolean return type.
|
122
|
+
#
|
123
|
+
# @return [Boolean]
|
124
|
+
def boolean_delete(url, params={})
|
125
|
+
response = self.class.delete url, query: params
|
126
|
+
response.code == 204
|
127
|
+
rescue GitHub::NotFound
|
128
|
+
false
|
48
129
|
end
|
49
130
|
|
131
|
+
# Return a hash with client's login and password.
|
132
|
+
#
|
133
|
+
# @return [Hash]
|
50
134
|
def basic_params
|
51
135
|
@password.nil? ? {} : { login: @login, password: @password }
|
52
136
|
end
|
53
137
|
|
138
|
+
# Return a hash with client's login and access token.
|
139
|
+
#
|
140
|
+
# @return [Hash]
|
54
141
|
def auth_params
|
55
142
|
@login.nil? ? {} : { login: @login, access_token: @access_token }
|
56
143
|
end
|
57
144
|
|
145
|
+
# Handle HTTP responses.
|
146
|
+
#
|
147
|
+
# Raise proper exceptions based on the response code.
|
148
|
+
#
|
149
|
+
# @return [HTTParty::Response]
|
58
150
|
def handle_response(response)
|
59
151
|
case response.code
|
60
152
|
when 401 then raise Unauthorized
|