github_api 0.16.0 → 0.17.0
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.
- checksums.yaml +4 -4
- data/README.md +22 -3
- data/lib/github_api/client.rb +3 -0
- data/lib/github_api/client/orgs.rb +4 -0
- data/lib/github_api/client/orgs/projects.rb +55 -0
- data/lib/github_api/client/projects.rb +81 -0
- data/lib/github_api/client/projects/cards.rb +156 -0
- data/lib/github_api/client/projects/columns.rb +144 -0
- data/lib/github_api/client/repos.rb +4 -1
- data/lib/github_api/client/repos/comments.rb +0 -1
- data/lib/github_api/client/repos/projects.rb +60 -0
- data/lib/github_api/client/repos/pub_sub_hubbub.rb +4 -6
- data/lib/github_api/client/users/followers.rb +1 -1
- data/lib/github_api/error/client_error.rb +2 -2
- data/lib/github_api/error/service_error.rb +6 -1
- data/lib/github_api/normalizer.rb +3 -5
- data/lib/github_api/params_hash.rb +1 -4
- data/lib/github_api/request.rb +1 -1
- data/lib/github_api/response/follow_redirects.rb +3 -3
- data/lib/github_api/version.rb +1 -1
- metadata +71 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78e5b988d1308a8fb225d36cab72b3fdb9643fe3
|
4
|
+
data.tar.gz: a66c54c119e6e9bf4c12dda1de545a5a1cdba5a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 972cd5cb9b8c5eac8a3697a00a2bc578abc0758694bd9028631f7bbd81a416b4be9816ac2c9f168a5b414f6b9b05424725ef87184a47e8ab26895ba71088e31d
|
7
|
+
data.tar.gz: e1987a1183df4060db459a10771eb2a00bc669499edb315fcc862e98ffb4414eba385a53cf04b8299a0b6e3f3a313d002c261109b2f917606b7e2243855c84ba
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
<a href="http://piotrmurach.github.io/github/"><img width="136" src="https://github.com/piotrmurach/github/raw/master/icons/github_api.png" alt="github api logo" /></a>
|
3
3
|
</div>
|
4
4
|
|
5
|
-
# GithubAPI
|
5
|
+
# GithubAPI [][gitter]
|
6
6
|
|
7
7
|
[][gem]
|
8
8
|
[][travis]
|
@@ -11,6 +11,7 @@
|
|
11
11
|
[][inchpages]
|
12
12
|
[][gemnasium]
|
13
13
|
|
14
|
+
[gitter]: https://gitter.im/piotrmurach/github_api
|
14
15
|
[gem]: http://badge.fury.io/rb/github_api
|
15
16
|
[travis]: http://travis-ci.org/piotrmurach/github
|
16
17
|
[codeclimate]: https://codeclimate.com/github/piotrmurach/github
|
@@ -705,9 +706,27 @@ github.delete 'username', 'tome-of-knowledge', 'full_path_to/file.ext',
|
|
705
706
|
|
706
707
|
The test suite is split into two groups, `live` and `mock`.
|
707
708
|
|
708
|
-
The `live` tests are the
|
709
|
+
The `live` tests are in the `features` folder and exercise the GitHub API directly by making live requests and then caching responses with VCR in directory named `features\cassettes`. For details on how to get set up, please navigate to the `features` folder.
|
709
710
|
|
710
|
-
|
711
|
+
To run all feature tests do:
|
712
|
+
|
713
|
+
```ruby
|
714
|
+
bundle exec rake features
|
715
|
+
```
|
716
|
+
|
717
|
+
The `mock` tests are in the `spec` folder and their primary concern is to test the gem internals without the hindrance of external calls.
|
718
|
+
|
719
|
+
To run all specs do:
|
720
|
+
|
721
|
+
```ruby
|
722
|
+
bundle exec rake spec
|
723
|
+
```
|
724
|
+
|
725
|
+
Finally to run all tests do:
|
726
|
+
|
727
|
+
```ruby
|
728
|
+
bundle exec rake
|
729
|
+
```
|
711
730
|
|
712
731
|
## Development
|
713
732
|
|
data/lib/github_api/client.rb
CHANGED
@@ -13,6 +13,7 @@ module Github
|
|
13
13
|
'markdown',
|
14
14
|
'meta',
|
15
15
|
'orgs',
|
16
|
+
'projects',
|
16
17
|
'pull_requests',
|
17
18
|
'repos',
|
18
19
|
'say',
|
@@ -52,6 +53,8 @@ module Github
|
|
52
53
|
namespace :orgs
|
53
54
|
alias :organizations :orgs
|
54
55
|
|
56
|
+
namespace :projects
|
57
|
+
|
55
58
|
namespace :pull_requests
|
56
59
|
alias :pulls :pull_requests
|
57
60
|
|
@@ -8,6 +8,7 @@ module Github
|
|
8
8
|
'hooks',
|
9
9
|
'members',
|
10
10
|
'memberships',
|
11
|
+
'projects',
|
11
12
|
'teams'
|
12
13
|
|
13
14
|
# Access to Client::Orgs::Hooks API
|
@@ -19,6 +20,9 @@ module Github
|
|
19
20
|
# Access to Client::Orgs::Memberships API
|
20
21
|
namespace :memberships
|
21
22
|
|
23
|
+
# Access to Client::Orgs::Projects API
|
24
|
+
namespace :projects
|
25
|
+
|
22
26
|
# Access to Client::Orgs::Teams API
|
23
27
|
namespace :teams
|
24
28
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Github
|
4
|
+
class Client::Orgs::Projects < API
|
5
|
+
PREVIEW_MEDIA = "application/vnd.github.inertia-preview+json".freeze # :nodoc:
|
6
|
+
|
7
|
+
# List your organization projects
|
8
|
+
#
|
9
|
+
# @see List your organization projects
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# github = Github.new 'org-name'
|
13
|
+
# github.orgs.projects.list 'org-name' { |project| ... }
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# github = Github.new
|
17
|
+
# github.orgs.projects.list 'org-name', state: 'closed'
|
18
|
+
#
|
19
|
+
# @api public
|
20
|
+
def list(*args)
|
21
|
+
arguments(args, required: [:org_name])
|
22
|
+
params = arguments.params
|
23
|
+
|
24
|
+
params["accept"] ||= PREVIEW_MEDIA
|
25
|
+
|
26
|
+
response = get_request("/orgs/#{arguments.org_name}/projects", params)
|
27
|
+
return response unless block_given?
|
28
|
+
response.each { |el| yield el }
|
29
|
+
end
|
30
|
+
alias_method :all, :list
|
31
|
+
|
32
|
+
# Create a new project for the specified repo
|
33
|
+
#
|
34
|
+
# @param [Hash] params
|
35
|
+
# @option params [String] :name
|
36
|
+
# Required string - The name of the project.
|
37
|
+
# @option params [String] :body
|
38
|
+
# Optional string - The body of the project.
|
39
|
+
#
|
40
|
+
# @example
|
41
|
+
# github = Github.new
|
42
|
+
# github.repos.create 'owner-name', 'repo-name', name: 'project-name'
|
43
|
+
# github.repos.create name: 'project-name', body: 'project-body', owner: 'owner-name', repo: 'repo-name'
|
44
|
+
def create(*args)
|
45
|
+
arguments(args, required: [:org_name]) do
|
46
|
+
assert_required %w[ name ]
|
47
|
+
end
|
48
|
+
params = arguments.params
|
49
|
+
|
50
|
+
params["accept"] ||= PREVIEW_MEDIA
|
51
|
+
|
52
|
+
post_request("/orgs/#{arguments.org_name}/projects", params)
|
53
|
+
end
|
54
|
+
end # Projects
|
55
|
+
end # Github
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Github
|
5
|
+
# Projects API
|
6
|
+
class Client::Projects < API
|
7
|
+
PREVIEW_MEDIA = "application/vnd.github.inertia-preview+json" # :nodoc:
|
8
|
+
|
9
|
+
require_all 'github_api/client/projects',
|
10
|
+
'columns',
|
11
|
+
'cards'
|
12
|
+
|
13
|
+
# Access to Projects::Columns API
|
14
|
+
namespace :columns
|
15
|
+
|
16
|
+
# Access to Projects::Cards API
|
17
|
+
namespace :cards
|
18
|
+
|
19
|
+
# Get properties for a single project
|
20
|
+
#
|
21
|
+
# @see https://developer.github.com/v3/projects/#get-a-project
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
# github = Github.new
|
25
|
+
# github.projects.get 1002604
|
26
|
+
#
|
27
|
+
# @api public
|
28
|
+
def get(*args)
|
29
|
+
arguments(args, required: [:id])
|
30
|
+
params = arguments.params
|
31
|
+
|
32
|
+
params["accept"] ||= PREVIEW_MEDIA
|
33
|
+
|
34
|
+
get_request("/projects/#{arguments.id}", params)
|
35
|
+
end
|
36
|
+
alias find get
|
37
|
+
|
38
|
+
# Edit a project
|
39
|
+
#
|
40
|
+
# @param [Hash] params
|
41
|
+
# @option params [String] :name
|
42
|
+
# Optional string
|
43
|
+
# @option params [String] :body
|
44
|
+
# Optional string
|
45
|
+
# @option params [String] :state
|
46
|
+
# Optional string
|
47
|
+
#
|
48
|
+
# @example
|
49
|
+
# github = Github.new
|
50
|
+
# github.projects.edit 1002604,
|
51
|
+
# name: "Outcomes Tracker",
|
52
|
+
# body: "The board to track work for the Outcomes application."
|
53
|
+
#
|
54
|
+
# @api public
|
55
|
+
def edit(*args)
|
56
|
+
arguments(args, required: [:id])
|
57
|
+
params = arguments.params
|
58
|
+
|
59
|
+
params["accept"] ||= PREVIEW_MEDIA
|
60
|
+
|
61
|
+
patch_request("/projects/#{arguments.id}", params)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Delete a project
|
65
|
+
#
|
66
|
+
# @example
|
67
|
+
# github = Github.new
|
68
|
+
# github.projects.delete 1002604
|
69
|
+
#
|
70
|
+
# @api public
|
71
|
+
def delete(*args)
|
72
|
+
arguments(args, required: [:id])
|
73
|
+
params = arguments.params
|
74
|
+
|
75
|
+
params["accept"] ||= PREVIEW_MEDIA
|
76
|
+
|
77
|
+
delete_request("/projects/#{arguments.id}", arguments.params)
|
78
|
+
end
|
79
|
+
alias remove delete
|
80
|
+
end # Projects
|
81
|
+
end # Github
|
@@ -0,0 +1,156 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Github
|
5
|
+
class Client::Projects::Cards < API
|
6
|
+
REQUIRED_MOVE_CARD_PARAMS = %w(position).freeze
|
7
|
+
|
8
|
+
# List project cards for a column
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# github = Github.new
|
12
|
+
# github.projects.cards.list :column_id
|
13
|
+
#
|
14
|
+
# @see https://developer.github.com/v3/projects/cards/#list-project-cards
|
15
|
+
#
|
16
|
+
# @api public
|
17
|
+
def list(*args)
|
18
|
+
arguments(args, required: [:column_id])
|
19
|
+
params = arguments.params
|
20
|
+
|
21
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
22
|
+
|
23
|
+
response = get_request("/projects/columns/#{arguments.column_id}/cards", params)
|
24
|
+
|
25
|
+
return response unless block_given?
|
26
|
+
response.each { |el| yield el }
|
27
|
+
end
|
28
|
+
alias all list
|
29
|
+
|
30
|
+
# Get a project card
|
31
|
+
#
|
32
|
+
# @example
|
33
|
+
# github = Github.new
|
34
|
+
# github.projects.cards.get :card_id
|
35
|
+
#
|
36
|
+
# @see https://developer.github.com/v3/projects/cards/#get-a-project-card
|
37
|
+
#
|
38
|
+
# @api public
|
39
|
+
def get(*args)
|
40
|
+
arguments(args, required: [:card_id])
|
41
|
+
params = arguments.params
|
42
|
+
|
43
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
44
|
+
|
45
|
+
get_request("/projects/columns/cards/#{arguments.card_id}", params)
|
46
|
+
end
|
47
|
+
alias find get
|
48
|
+
|
49
|
+
# Create a project card for a column
|
50
|
+
#
|
51
|
+
# @param [Hash] params
|
52
|
+
# @option params [String] :note
|
53
|
+
# The card's note content. Only valid for cards without another type of
|
54
|
+
# content, so this must be omitted if content_id and content_type are
|
55
|
+
# specified.
|
56
|
+
# @option params [Integer] :content_id
|
57
|
+
# The id of the Issue to associate with this card.
|
58
|
+
# @option params [String] :content_type
|
59
|
+
# The type of content to associate with this card. Can only be "Issue" at
|
60
|
+
# this time.
|
61
|
+
#
|
62
|
+
# @example
|
63
|
+
# github = Github.new
|
64
|
+
# github.projects.cards.create :column_id, note: 'Card Note'
|
65
|
+
#
|
66
|
+
# @example
|
67
|
+
# github = Github.new
|
68
|
+
# github.projects.cards.create :column_id, id: <content-id>, content_type: 'content-type'
|
69
|
+
#
|
70
|
+
# @see https://developer.github.com/v3/projects/cards/#create-a-project-card
|
71
|
+
#
|
72
|
+
# @api public
|
73
|
+
def create(*args)
|
74
|
+
arguments(args, required: [:column_id])
|
75
|
+
params = arguments.params
|
76
|
+
|
77
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
78
|
+
|
79
|
+
post_request("/projects/columns/#{arguments.column_id}/cards", params)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Update a project card
|
83
|
+
#
|
84
|
+
# @param [Hash] params
|
85
|
+
# @option params [String] :note
|
86
|
+
# The card's note content. Only valid for cards without another type of
|
87
|
+
# content, so this cannot be specified if the card already has a
|
88
|
+
# content_id and content_type.
|
89
|
+
#
|
90
|
+
# @example
|
91
|
+
# github = Github.new
|
92
|
+
# github.projects.cards.update :card_id, note: 'New card note'
|
93
|
+
#
|
94
|
+
# @see https://developer.github.com/v3/projects/cards/#update-a-project-card
|
95
|
+
#
|
96
|
+
# @api public
|
97
|
+
def update(*args)
|
98
|
+
arguments(args, required: [:card_id])
|
99
|
+
params = arguments.params
|
100
|
+
|
101
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
102
|
+
|
103
|
+
patch_request("/projects/columns/cards/#{arguments.card_id}", params)
|
104
|
+
end
|
105
|
+
alias edit update
|
106
|
+
|
107
|
+
# Delete a project card
|
108
|
+
#
|
109
|
+
# @example
|
110
|
+
# github = Github.new
|
111
|
+
# github.projects.cards.delete :card_id
|
112
|
+
#
|
113
|
+
# @see https://developer.github.com/v3/projects/cards/#delete-a-project-card
|
114
|
+
#
|
115
|
+
# @api public
|
116
|
+
def delete(*args)
|
117
|
+
arguments(args, required: [:card_id])
|
118
|
+
params = arguments.params
|
119
|
+
|
120
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
121
|
+
|
122
|
+
delete_request("/projects/columns/cards/#{arguments.card_id}", params)
|
123
|
+
end
|
124
|
+
alias remove delete
|
125
|
+
|
126
|
+
# Move a project card
|
127
|
+
#
|
128
|
+
# @param [Hash] params
|
129
|
+
# @option params [String] :position
|
130
|
+
# Required. Required. Can be one of 'first', 'last', or
|
131
|
+
# 'after:<column-id>', where <column-id> is the id value of a column in
|
132
|
+
# the same project.
|
133
|
+
#
|
134
|
+
# @example
|
135
|
+
# github = Github.new
|
136
|
+
# github.projects.cards.move :card_id, position: 'bottom'
|
137
|
+
#
|
138
|
+
# @example
|
139
|
+
# github = Github.new
|
140
|
+
# github.projects.cards.move :card_id, position: 'after:<card-id>', column_id: <column-id>
|
141
|
+
#
|
142
|
+
# @see https://developer.github.com/v3/projects/cards/#move-a-project-card
|
143
|
+
#
|
144
|
+
# @api public
|
145
|
+
def move(*args)
|
146
|
+
arguments(args, required: [:card_id]) do
|
147
|
+
assert_required REQUIRED_MOVE_CARD_PARAMS
|
148
|
+
end
|
149
|
+
params = arguments.params
|
150
|
+
|
151
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
152
|
+
|
153
|
+
post_request("/projects/columns/cards/#{arguments.card_id}/moves", params)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Github
|
5
|
+
class Client::Projects::Columns < API
|
6
|
+
REQUIRED_COLUMN_PARAMS = %w(name).freeze
|
7
|
+
REQUIRED_MOVE_COLUMN_PARAMS = %w(position).freeze
|
8
|
+
|
9
|
+
# List a project's columns
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# github = Github.new
|
13
|
+
# github.projects.columns.list :project_id
|
14
|
+
#
|
15
|
+
# @see https://developer.github.com/v3/projects/columns/#list-project-columns
|
16
|
+
#
|
17
|
+
# @api public
|
18
|
+
def list(*args)
|
19
|
+
arguments(args, required: [:project_id])
|
20
|
+
params = arguments.params
|
21
|
+
|
22
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
23
|
+
|
24
|
+
response = get_request("/projects/#{arguments.project_id}/columns", params)
|
25
|
+
|
26
|
+
return response unless block_given?
|
27
|
+
response.each { |el| yield el }
|
28
|
+
end
|
29
|
+
alias all list
|
30
|
+
|
31
|
+
# Get a project columns
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# github = Github.new
|
35
|
+
# github.projects.columns.get :column_id
|
36
|
+
#
|
37
|
+
# @see https://developer.github.com/v3/projects/columns/#get-a-project-column
|
38
|
+
#
|
39
|
+
# @api public
|
40
|
+
def get(*args)
|
41
|
+
arguments(args, required: [:column_id])
|
42
|
+
params = arguments.params
|
43
|
+
|
44
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
45
|
+
|
46
|
+
get_request("/projects/columns/#{arguments.column_id}", params)
|
47
|
+
end
|
48
|
+
alias find get
|
49
|
+
|
50
|
+
# Create a project column
|
51
|
+
#
|
52
|
+
# @param [Hash] params
|
53
|
+
# @option params [String] :name
|
54
|
+
# Required. The name of the column.
|
55
|
+
#
|
56
|
+
# @example
|
57
|
+
# github = Github.new
|
58
|
+
# github.projects.columns.create :project_id, name: 'column-name'
|
59
|
+
#
|
60
|
+
# @see https://developer.github.com/v3/projects/columns/#create-a-project-column
|
61
|
+
#
|
62
|
+
# @api public
|
63
|
+
def create(*args)
|
64
|
+
arguments(args, required: [:project_id]) do
|
65
|
+
assert_required REQUIRED_COLUMN_PARAMS
|
66
|
+
end
|
67
|
+
params = arguments.params
|
68
|
+
|
69
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
70
|
+
|
71
|
+
post_request("/projects/#{arguments.project_id}/columns", params)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Update a project column
|
75
|
+
#
|
76
|
+
# @param [Hash] params
|
77
|
+
# @option params [String] :name
|
78
|
+
# Required. The name of the column.
|
79
|
+
#
|
80
|
+
# @example
|
81
|
+
# github = Github.new
|
82
|
+
# github.repos.projects.update :column_id, name: 'new-column-name'
|
83
|
+
#
|
84
|
+
# @see https://developer.github.com/v3/projects/columns/#update-a-project-column
|
85
|
+
#
|
86
|
+
# @api public
|
87
|
+
def update(*args)
|
88
|
+
arguments(args, required: [:column_id]) do
|
89
|
+
assert_required REQUIRED_COLUMN_PARAMS
|
90
|
+
end
|
91
|
+
params = arguments.params
|
92
|
+
|
93
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
94
|
+
|
95
|
+
patch_request("/projects/columns/#{arguments.column_id}", params)
|
96
|
+
end
|
97
|
+
alias edit update
|
98
|
+
|
99
|
+
# Delete a project column
|
100
|
+
#
|
101
|
+
# @example
|
102
|
+
# github = Github.new
|
103
|
+
# github.projects.columns.delete :column_id
|
104
|
+
#
|
105
|
+
# @see https://developer.github.com/v3/projects/columns/#delete-a-project-column
|
106
|
+
#
|
107
|
+
# @api public
|
108
|
+
def delete(*args)
|
109
|
+
arguments(args, required: [:column_id])
|
110
|
+
params = arguments.params
|
111
|
+
|
112
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
113
|
+
|
114
|
+
delete_request("/projects/columns/#{arguments.column_id}", params)
|
115
|
+
end
|
116
|
+
alias remove delete
|
117
|
+
|
118
|
+
# Move a project column
|
119
|
+
#
|
120
|
+
# @param [Hash] params
|
121
|
+
# @option params [String] :position
|
122
|
+
# Required. Required. Can be one of 'first', 'last', or
|
123
|
+
# 'after:<column-id>', where <column-id> is the id value of a column in
|
124
|
+
# the same project.
|
125
|
+
#
|
126
|
+
# @example
|
127
|
+
# github = Github.new
|
128
|
+
# github.projects.columns.move :column_id, position: 'first'
|
129
|
+
#
|
130
|
+
# @see https://developer.github.com/v3/projects/columns/#move-a-project-column
|
131
|
+
#
|
132
|
+
# @api public
|
133
|
+
def move(*args)
|
134
|
+
arguments(args, required: [:column_id]) do
|
135
|
+
assert_required REQUIRED_MOVE_COLUMN_PARAMS
|
136
|
+
end
|
137
|
+
params = arguments.params
|
138
|
+
|
139
|
+
params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
|
140
|
+
|
141
|
+
post_request("/projects/columns/#{arguments.column_id}/moves", params)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -15,6 +15,7 @@ module Github
|
|
15
15
|
'keys',
|
16
16
|
'merging',
|
17
17
|
'pages',
|
18
|
+
'projects',
|
18
19
|
'pub_sub_hubbub',
|
19
20
|
'releases',
|
20
21
|
'statistics',
|
@@ -71,6 +72,9 @@ module Github
|
|
71
72
|
# Access to Repos::Pages API
|
72
73
|
namespace :pages
|
73
74
|
|
75
|
+
# Access to Repos::Projects API
|
76
|
+
namespace :projects
|
77
|
+
|
74
78
|
# Access to Repos::PubSubHubbub API
|
75
79
|
namespace :pubsubhubbub, full_name: :pub_sub_hubbub
|
76
80
|
|
@@ -229,7 +233,6 @@ module Github
|
|
229
233
|
# @example
|
230
234
|
def create(*args)
|
231
235
|
arguments(args) do
|
232
|
-
permit VALID_REPO_OPTIONS + %w[ org ]
|
233
236
|
assert_required %w[ name ]
|
234
237
|
end
|
235
238
|
params = arguments.params
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Github
|
4
|
+
class Client::Repos::Projects < API
|
5
|
+
PREVIEW_MEDIA = "application/vnd.github.inertia-preview+json".freeze # :nodoc:
|
6
|
+
|
7
|
+
# List a repo's projects
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# github = Github.new
|
11
|
+
# github.repos.projects.list owner: 'owner-name', repo: 'repo-name'
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# github = Github.new
|
15
|
+
# github.repos.projects.list state: 'open', owner: 'owner-name', repo: 'repo-name'
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# github.repos.projects.list owner: 'owner-name', repo: 'repo-name' { |cbr| .. }
|
19
|
+
#
|
20
|
+
# @return [Array]
|
21
|
+
#
|
22
|
+
# @api public
|
23
|
+
def list(*args)
|
24
|
+
arguments(args, required: [:owner, :repo])
|
25
|
+
params = arguments.params
|
26
|
+
|
27
|
+
params["accept"] ||= PREVIEW_MEDIA
|
28
|
+
|
29
|
+
response = get_request("/repos/#{arguments.owner}/#{arguments.repo}/projects", params)
|
30
|
+
return response unless block_given?
|
31
|
+
response.each { |el| yield el }
|
32
|
+
end
|
33
|
+
alias :all :list
|
34
|
+
|
35
|
+
# Create a new project for the specified repo
|
36
|
+
#
|
37
|
+
# @param [Hash] params
|
38
|
+
# @option params [String] :name
|
39
|
+
# Required string - The name of the project.
|
40
|
+
# @option params [String] :body
|
41
|
+
# Optional string - The body of the project.
|
42
|
+
#
|
43
|
+
# @example
|
44
|
+
# github = Github.new
|
45
|
+
# github.repos.create 'owner-name', 'repo-name', name: 'project-name'
|
46
|
+
# github.repos.create name: 'project-name', body: 'project-body', owner: 'owner-name', repo: 'repo-name'
|
47
|
+
#
|
48
|
+
# @api public
|
49
|
+
def create(*args)
|
50
|
+
arguments(args, required: [:owner, :repo]) do
|
51
|
+
assert_required %w[ name ]
|
52
|
+
end
|
53
|
+
params = arguments.params
|
54
|
+
|
55
|
+
params["accept"] ||= PREVIEW_MEDIA
|
56
|
+
|
57
|
+
post_request("/repos/#{arguments.owner}/#{arguments.repo}/projects", params)
|
58
|
+
end
|
59
|
+
end # Projects
|
60
|
+
end # Github
|
@@ -2,10 +2,8 @@
|
|
2
2
|
|
3
3
|
module Github
|
4
4
|
class Client::Repos::PubSubHubbub < API
|
5
|
-
|
6
|
-
|
7
|
-
CONTENT_TYPE => 'application/x-www-form-urlencoded'
|
8
|
-
}
|
5
|
+
HEADERS = {
|
6
|
+
CONTENT_TYPE => 'application/x-www-form-urlencoded'
|
9
7
|
}
|
10
8
|
|
11
9
|
# Subscribe to existing topic/event through pubsubhubbub
|
@@ -29,7 +27,7 @@ module Github
|
|
29
27
|
def subscribe(*args)
|
30
28
|
params = arguments(args, required: [:topic, :callback]).params
|
31
29
|
_merge_action!("subscribe", arguments.topic, arguments.callback, params)
|
32
|
-
params['
|
30
|
+
params['headers'] = HEADERS
|
33
31
|
|
34
32
|
post_request("/hub", params)
|
35
33
|
end
|
@@ -56,7 +54,7 @@ module Github
|
|
56
54
|
def unsubscribe(*args)
|
57
55
|
params = arguments(args, required: [:topic, :callback]).params
|
58
56
|
_merge_action!("unsubscribe", arguments.topic, arguments.callback, params)
|
59
|
-
params['
|
57
|
+
params['headers'] = HEADERS
|
60
58
|
|
61
59
|
post_request("/hub", params)
|
62
60
|
end
|
@@ -26,7 +26,7 @@ module Github #:nodoc
|
|
26
26
|
super(
|
27
27
|
generate_message(
|
28
28
|
problem: "Invalid option #{invalid.keys.join(', ')} provided for this request.",
|
29
|
-
summary: "Github gem checks the request parameters passed to ensure that github api is not hit
|
29
|
+
summary: "Github gem checks the request parameters passed to ensure that github api is not hit unnecessarily and to fail fast.",
|
30
30
|
resolution: "Valid options are: #{valid.join(', ')}, make sure these are the ones you are using"
|
31
31
|
)
|
32
32
|
)
|
@@ -39,7 +39,7 @@ module Github #:nodoc
|
|
39
39
|
super(
|
40
40
|
generate_message(
|
41
41
|
problem: "Missing required parameters: #{provided.keys.join(', ')} provided for this request.",
|
42
|
-
summary: "Github gem checks the request parameters passed to ensure that github api is not hit
|
42
|
+
summary: "Github gem checks the request parameters passed to ensure that github api is not hit unnecessarily and to fail fast.",
|
43
43
|
resolution: "Required parameters are: #{required.join(', ')}, make sure these are the ones you are using"
|
44
44
|
)
|
45
45
|
)
|
@@ -137,7 +137,12 @@ module Github
|
|
137
137
|
elsif data[:errors]
|
138
138
|
message = "\nErrors:\n"
|
139
139
|
message << data[:errors].map do |error|
|
140
|
-
|
140
|
+
case error
|
141
|
+
when Hash
|
142
|
+
"Error: #{error.map { |k, v| "#{k}: #{v}" }.join(', ')}"
|
143
|
+
else
|
144
|
+
"Error: #{error}"
|
145
|
+
end
|
141
146
|
end.join("\n")
|
142
147
|
end
|
143
148
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# encoding: utf-8
|
2
3
|
|
3
4
|
module Github
|
4
|
-
#
|
5
|
+
# Normalize client-supplied parameter keys.
|
5
6
|
module Normalizer
|
6
7
|
# Turns any keys from nested hashes including nested arrays into strings
|
7
|
-
#
|
8
8
|
def normalize!(params)
|
9
9
|
case params
|
10
10
|
when Hash
|
@@ -16,10 +16,8 @@ module Github
|
|
16
16
|
params.map! do |el|
|
17
17
|
normalize!(el)
|
18
18
|
end
|
19
|
-
else
|
20
|
-
params.to_s
|
21
19
|
end
|
22
|
-
|
20
|
+
params
|
23
21
|
end
|
24
22
|
end # Normalizer
|
25
23
|
end # Github
|
@@ -9,7 +9,7 @@ module Github
|
|
9
9
|
include Normalizer
|
10
10
|
include MimeType
|
11
11
|
|
12
|
-
REQUEST_PARAMS = [:accept, :media, :data, :raw, :
|
12
|
+
REQUEST_PARAMS = [:accept, :media, :data, :raw, :headers]
|
13
13
|
|
14
14
|
def initialize(hash)
|
15
15
|
super(normalize!(Hash[hash]))
|
@@ -71,9 +71,6 @@ module Github
|
|
71
71
|
if value = accept
|
72
72
|
headers[:accept] = value
|
73
73
|
end
|
74
|
-
if self['content_type']
|
75
|
-
headers[:content_type] = self['content_type']
|
76
|
-
end
|
77
74
|
opts[:raw] = key?('raw') ? self['raw'] : false
|
78
75
|
opts[:headers] = headers unless headers.empty?
|
79
76
|
opts
|
data/lib/github_api/request.rb
CHANGED
@@ -55,7 +55,7 @@ module Github
|
|
55
55
|
raise ArgumentError, "unknown http method: #{method}"
|
56
56
|
end
|
57
57
|
|
58
|
-
puts "EXECUTED: #{action} - #{path} with PARAMS: #{params}" if ENV['DEBUG']
|
58
|
+
puts "EXECUTED: #{action} - #{path} with PARAMS: #{params.request_params}" if ENV['DEBUG']
|
59
59
|
|
60
60
|
request_options = params.options
|
61
61
|
connection_options = current_options.merge(request_options)
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'set'
|
3
3
|
|
4
|
-
# First saw on octokit, then copied from lostisland/faraday_middleware
|
4
|
+
# First saw on octokit, then copied from lostisland/faraday_middleware
|
5
5
|
# and adapted for this library.
|
6
6
|
#
|
7
|
-
# faraday_middleware/lib/faraday_middleware/response/follow_redirects.rb
|
7
|
+
# faraday_middleware/lib/faraday_middleware/response/follow_redirects.rb
|
8
8
|
|
9
9
|
module Github
|
10
10
|
# Public: Exception thrown when the maximum amount of requests is exceeded.
|
@@ -35,7 +35,7 @@ module Github
|
|
35
35
|
# faraday.use :cookie_jar
|
36
36
|
# faraday.adapter Faraday.default_adapter
|
37
37
|
# end
|
38
|
-
|
38
|
+
|
39
39
|
class Response::FollowRedirects < Faraday::Middleware
|
40
40
|
# HTTP methods for which 30x redirects can be followed
|
41
41
|
ALLOWED_METHODS = Set.new [:head, :options, :get, :post, :put, :patch, :delete]
|
data/lib/github_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: github_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Murach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -112,14 +112,20 @@ dependencies:
|
|
112
112
|
requirements:
|
113
113
|
- - ">="
|
114
114
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
115
|
+
version: 1.5.0
|
116
|
+
- - "<"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '2.0'
|
116
119
|
type: :development
|
117
120
|
prerelease: false
|
118
121
|
version_requirements: !ruby/object:Gem::Requirement
|
119
122
|
requirements:
|
120
123
|
- - ">="
|
121
124
|
- !ruby/object:Gem::Version
|
122
|
-
version:
|
125
|
+
version: 1.5.0
|
126
|
+
- - "<"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '2.0'
|
123
129
|
- !ruby/object:Gem::Dependency
|
124
130
|
name: rake
|
125
131
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,6 +140,62 @@ dependencies:
|
|
134
140
|
- - "<"
|
135
141
|
- !ruby/object:Gem::Version
|
136
142
|
version: '11.0'
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: cucumber
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '2.1'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - "~>"
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '2.1'
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: rspec
|
159
|
+
requirement: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - "~>"
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: 2.14.1
|
164
|
+
type: :development
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - "~>"
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: 2.14.1
|
171
|
+
- !ruby/object:Gem::Dependency
|
172
|
+
name: vcr
|
173
|
+
requirement: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - "~>"
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: 3.0.3
|
178
|
+
type: :development
|
179
|
+
prerelease: false
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - "~>"
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: 3.0.3
|
185
|
+
- !ruby/object:Gem::Dependency
|
186
|
+
name: webmock
|
187
|
+
requirement: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - "~>"
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: 2.3.2
|
192
|
+
type: :development
|
193
|
+
prerelease: false
|
194
|
+
version_requirements: !ruby/object:Gem::Requirement
|
195
|
+
requirements:
|
196
|
+
- - "~>"
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: 2.3.2
|
137
199
|
description: " Ruby client that supports all of the GitHub API methods. It's build
|
138
200
|
in a modular way, that is, you can either instantiate the whole api wrapper Github.new
|
139
201
|
or use parts of it e.i. Github::Client::Repos.new if working solely with repositories
|
@@ -187,7 +249,11 @@ files:
|
|
187
249
|
- lib/github_api/client/orgs/hooks.rb
|
188
250
|
- lib/github_api/client/orgs/members.rb
|
189
251
|
- lib/github_api/client/orgs/memberships.rb
|
252
|
+
- lib/github_api/client/orgs/projects.rb
|
190
253
|
- lib/github_api/client/orgs/teams.rb
|
254
|
+
- lib/github_api/client/projects.rb
|
255
|
+
- lib/github_api/client/projects/cards.rb
|
256
|
+
- lib/github_api/client/projects/columns.rb
|
191
257
|
- lib/github_api/client/pull_requests.rb
|
192
258
|
- lib/github_api/client/pull_requests/comments.rb
|
193
259
|
- lib/github_api/client/pull_requests/reviews.rb
|
@@ -203,6 +269,7 @@ files:
|
|
203
269
|
- lib/github_api/client/repos/keys.rb
|
204
270
|
- lib/github_api/client/repos/merging.rb
|
205
271
|
- lib/github_api/client/repos/pages.rb
|
272
|
+
- lib/github_api/client/repos/projects.rb
|
206
273
|
- lib/github_api/client/repos/pub_sub_hubbub.rb
|
207
274
|
- lib/github_api/client/repos/releases.rb
|
208
275
|
- lib/github_api/client/repos/releases/assets.rb
|