github_api 0.16.0 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- 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](https://badges.gitter.im/Join%20Chat.svg)][gitter]
|
6
6
|
|
7
7
|
[![Gem Version](https://badge.fury.io/rb/github_api.svg)][gem]
|
8
8
|
[![Build Status](https://secure.travis-ci.org/piotrmurach/github.svg?branch=master)][travis]
|
@@ -11,6 +11,7 @@
|
|
11
11
|
[![Inline docs](http://inch-ci.org/github/piotrmurach/github.svg)][inchpages]
|
12
12
|
[![Dependency Status](https://gemnasium.com/piotrmurach/github.svg?travis)][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
|