geet 0.27.7 → 0.28.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/.github/workflows/ci.yml +0 -1
- data/README.md +8 -17
- data/geet.gemspec +1 -1
- data/lib/geet/commandline/configuration.rb +1 -1
- data/lib/geet/git/repository.rb +36 -70
- data/lib/geet/helpers/services_workflow_helper.rb +1 -1
- data/lib/geet/services/add_upstream_repo.rb +1 -1
- data/lib/geet/services/close_milestones.rb +1 -1
- data/lib/geet/services/comment_pr.rb +1 -1
- data/lib/geet/services/create_issue.rb +27 -28
- data/lib/geet/services/create_label.rb +2 -2
- data/lib/geet/services/create_milestone.rb +2 -2
- data/lib/geet/services/create_pr.rb +20 -27
- data/lib/geet/services/list_issues.rb +3 -3
- data/lib/geet/services/list_labels.rb +1 -1
- data/lib/geet/services/list_milestones.rb +7 -7
- data/lib/geet/services/list_prs.rb +1 -1
- data/lib/geet/services/merge_pr.rb +4 -3
- data/lib/geet/services/open_pr.rb +1 -1
- data/lib/geet/utils/git_client.rb +0 -11
- data/lib/geet/version.rb +1 -1
- data/spec/integration/create_label_spec.rb +0 -21
- data/spec/integration/create_pr_spec.rb +0 -1
- data/spec/integration/list_issues_spec.rb +0 -46
- data/spec/integration/list_labels_spec.rb +0 -27
- data/spec/integration/list_milestones_spec.rb +0 -27
- data/spec/integration/merge_pr_spec.rb +1 -31
- data/spec/spec_helper.rb +0 -3
- metadata +3 -17
- data/lib/geet/github/remote_repository.rb +0 -53
- data/lib/geet/gitlab/api_interface.rb +0 -212
- data/lib/geet/gitlab/issue.rb +0 -62
- data/lib/geet/gitlab/label.rb +0 -66
- data/lib/geet/gitlab/milestone.rb +0 -78
- data/lib/geet/gitlab/pr.rb +0 -114
- data/lib/geet/gitlab/user.rb +0 -52
- data/lib/geet/services/abstract_create_issue.rb +0 -21
- data/spec/vcr_cassettes/gitlab_com/create_label.yml +0 -64
- data/spec/vcr_cassettes/gitlab_com/list_issues.yml +0 -84
- data/spec/vcr_cassettes/gitlab_com/list_issues_with_assignee.yml +0 -162
- data/spec/vcr_cassettes/gitlab_com/list_labels.yml +0 -80
- data/spec/vcr_cassettes/gitlab_com/list_milestones.yml +0 -397
- data/spec/vcr_cassettes/gitlab_com/merge_pr.yml +0 -144
data/lib/geet/gitlab/issue.rb
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
# typed: strict
|
|
3
|
-
|
|
4
|
-
module Geet
|
|
5
|
-
module Gitlab
|
|
6
|
-
class Issue
|
|
7
|
-
extend T::Sig
|
|
8
|
-
|
|
9
|
-
sig { returns(Integer) }
|
|
10
|
-
attr_reader :number
|
|
11
|
-
|
|
12
|
-
sig { returns(String) }
|
|
13
|
-
attr_reader :title
|
|
14
|
-
|
|
15
|
-
sig { returns(String) }
|
|
16
|
-
attr_reader :link
|
|
17
|
-
|
|
18
|
-
sig {
|
|
19
|
-
params(
|
|
20
|
-
number: Integer,
|
|
21
|
-
title: String,
|
|
22
|
-
link: String
|
|
23
|
-
).void
|
|
24
|
-
}
|
|
25
|
-
def initialize(number, title, link)
|
|
26
|
-
@number = number
|
|
27
|
-
@title = title
|
|
28
|
-
@link = link
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# See https://docs.gitlab.com/ee/api/issues.html#list-issues
|
|
32
|
-
#
|
|
33
|
-
sig {
|
|
34
|
-
params(
|
|
35
|
-
api_interface: ApiInterface,
|
|
36
|
-
assignee: T.nilable(User),
|
|
37
|
-
milestone: T.nilable(Milestone)
|
|
38
|
-
).returns(T::Array[Issue])
|
|
39
|
-
}
|
|
40
|
-
def self.list(api_interface, assignee: nil, milestone: nil)
|
|
41
|
-
api_path = "projects/#{api_interface.path_with_namespace(encoded: true)}/issues"
|
|
42
|
-
|
|
43
|
-
request_params = {}
|
|
44
|
-
request_params[:assignee_id] = assignee.id if assignee
|
|
45
|
-
request_params[:milestone] = milestone.title if milestone
|
|
46
|
-
|
|
47
|
-
response = T.cast(
|
|
48
|
-
api_interface.send_request(api_path, params: request_params, multipage: true),
|
|
49
|
-
T::Array[T::Hash[String, T.untyped]]
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
response.map do |issue_data, result|
|
|
53
|
-
number = T.cast(issue_data.fetch("iid"), Integer)
|
|
54
|
-
title = T.cast(issue_data.fetch("title"), String)
|
|
55
|
-
link = T.cast(issue_data.fetch("web_url"), String)
|
|
56
|
-
|
|
57
|
-
new(number, title, link)
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
data/lib/geet/gitlab/label.rb
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
# typed: strict
|
|
3
|
-
|
|
4
|
-
module Geet
|
|
5
|
-
module Gitlab
|
|
6
|
-
class Label
|
|
7
|
-
extend T::Sig
|
|
8
|
-
|
|
9
|
-
sig { returns(String) }
|
|
10
|
-
attr_reader :name
|
|
11
|
-
|
|
12
|
-
sig { returns(String) }
|
|
13
|
-
attr_reader :color
|
|
14
|
-
|
|
15
|
-
sig {
|
|
16
|
-
params(
|
|
17
|
-
name: String,
|
|
18
|
-
color: String
|
|
19
|
-
).void
|
|
20
|
-
}
|
|
21
|
-
def initialize(name, color)
|
|
22
|
-
@name = name
|
|
23
|
-
@color = color
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
sig {
|
|
27
|
-
params(
|
|
28
|
-
api_interface: ApiInterface
|
|
29
|
-
).returns(T::Array[Label])
|
|
30
|
-
}
|
|
31
|
-
def self.list(api_interface)
|
|
32
|
-
api_path = "projects/#{api_interface.path_with_namespace(encoded: true)}/labels"
|
|
33
|
-
response = T.cast(
|
|
34
|
-
api_interface.send_request(api_path, multipage: true),
|
|
35
|
-
T::Array[T::Hash[String, T.untyped]]
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
response.map do |label_entry|
|
|
39
|
-
name = T.cast(label_entry.fetch("name"), String)
|
|
40
|
-
color = T.cast(label_entry.fetch("color"), String)
|
|
41
|
-
|
|
42
|
-
color = color.sub("#", "") # normalize
|
|
43
|
-
|
|
44
|
-
new(name, color)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# See https://docs.gitlab.com/ee/api/labels.html#create-a-new-label
|
|
49
|
-
sig {
|
|
50
|
-
params(
|
|
51
|
-
name: String,
|
|
52
|
-
color: String,
|
|
53
|
-
api_interface: ApiInterface
|
|
54
|
-
).returns(Label)
|
|
55
|
-
}
|
|
56
|
-
def self.create(name, color, api_interface)
|
|
57
|
-
api_path = "projects/#{api_interface.path_with_namespace(encoded: true)}/labels"
|
|
58
|
-
request_data = {name:, color: "##{color}"}
|
|
59
|
-
|
|
60
|
-
api_interface.send_request(api_path, data: request_data)
|
|
61
|
-
|
|
62
|
-
new(name, color)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
# typed: strict
|
|
3
|
-
|
|
4
|
-
require "date"
|
|
5
|
-
|
|
6
|
-
module Geet
|
|
7
|
-
module Gitlab
|
|
8
|
-
class Milestone
|
|
9
|
-
extend T::Sig
|
|
10
|
-
|
|
11
|
-
sig { returns(Integer) }
|
|
12
|
-
attr_reader :number
|
|
13
|
-
|
|
14
|
-
sig { returns(String) }
|
|
15
|
-
attr_reader :title
|
|
16
|
-
|
|
17
|
-
sig { returns(T.nilable(Date)) }
|
|
18
|
-
attr_reader :due_on
|
|
19
|
-
|
|
20
|
-
sig {
|
|
21
|
-
params(
|
|
22
|
-
number: Integer,
|
|
23
|
-
title: String,
|
|
24
|
-
due_on: T.nilable(Date),
|
|
25
|
-
api_interface: ApiInterface
|
|
26
|
-
).void
|
|
27
|
-
}
|
|
28
|
-
def initialize(number, title, due_on, api_interface)
|
|
29
|
-
@number = number
|
|
30
|
-
@title = title
|
|
31
|
-
@due_on = due_on
|
|
32
|
-
|
|
33
|
-
@api_interface = api_interface
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# See https://docs.gitlab.com/ee/api/milestones.html#list-project-milestones
|
|
37
|
-
#
|
|
38
|
-
sig {
|
|
39
|
-
params(
|
|
40
|
-
api_interface: ApiInterface
|
|
41
|
-
).returns(T::Array[Milestone])
|
|
42
|
-
}
|
|
43
|
-
def self.list(api_interface)
|
|
44
|
-
api_path = "projects/#{api_interface.path_with_namespace(encoded: true)}/milestones"
|
|
45
|
-
|
|
46
|
-
response = T.cast(
|
|
47
|
-
api_interface.send_request(api_path, multipage: true),
|
|
48
|
-
T::Array[T::Hash[String, T.untyped]]
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
response.map do |milestone_data|
|
|
52
|
-
number = T.cast(milestone_data.fetch("iid"), Integer)
|
|
53
|
-
title = T.cast(milestone_data.fetch("title"), String)
|
|
54
|
-
due_on = parse_due_date(
|
|
55
|
-
T.cast(milestone_data.fetch("due_date"), T.nilable(String))
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
new(number, title, due_on, api_interface)
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
class << self
|
|
63
|
-
extend T::Sig
|
|
64
|
-
|
|
65
|
-
private
|
|
66
|
-
|
|
67
|
-
sig {
|
|
68
|
-
params(
|
|
69
|
-
raw_due_date: T.nilable(String)
|
|
70
|
-
).returns(T.nilable(Date))
|
|
71
|
-
}
|
|
72
|
-
def parse_due_date(raw_due_date)
|
|
73
|
-
Date.parse(raw_due_date) if raw_due_date
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end # Milestone
|
|
77
|
-
end # Gitlab
|
|
78
|
-
end # Geet
|
data/lib/geet/gitlab/pr.rb
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
# typed: strict
|
|
3
|
-
|
|
4
|
-
module Geet
|
|
5
|
-
module Gitlab
|
|
6
|
-
class PR
|
|
7
|
-
extend T::Sig
|
|
8
|
-
|
|
9
|
-
sig { returns(Integer) }
|
|
10
|
-
attr_reader :number
|
|
11
|
-
|
|
12
|
-
sig { returns(String) }
|
|
13
|
-
attr_reader :title
|
|
14
|
-
|
|
15
|
-
sig { returns(String) }
|
|
16
|
-
attr_reader :link
|
|
17
|
-
|
|
18
|
-
sig {
|
|
19
|
-
params(
|
|
20
|
-
number: Integer,
|
|
21
|
-
api_interface: ApiInterface,
|
|
22
|
-
title: String,
|
|
23
|
-
link: String
|
|
24
|
-
).void
|
|
25
|
-
}
|
|
26
|
-
def initialize(number, api_interface, title, link)
|
|
27
|
-
@number = number
|
|
28
|
-
@api_interface = api_interface
|
|
29
|
-
@title = title
|
|
30
|
-
@link = link
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# See https://docs.gitlab.com/ee/api/merge_requests.html#list-merge-requests
|
|
34
|
-
#
|
|
35
|
-
sig {
|
|
36
|
-
params(
|
|
37
|
-
api_interface: ApiInterface,
|
|
38
|
-
milestone: T.nilable(Milestone),
|
|
39
|
-
assignee: T.nilable(User),
|
|
40
|
-
# Required only for API compatibility. it's not required; if passed, it's only checked
|
|
41
|
-
# against the API path to make sure it's correct.
|
|
42
|
-
owner: T.nilable(String),
|
|
43
|
-
head: T.nilable(String)
|
|
44
|
-
).returns(T::Array[PR])
|
|
45
|
-
}
|
|
46
|
-
def self.list(api_interface, milestone: nil, assignee: nil, owner: nil, head: nil)
|
|
47
|
-
api_path = "projects/#{api_interface.path_with_namespace(encoded: true)}/merge_requests"
|
|
48
|
-
|
|
49
|
-
check_list_owner!(api_interface, owner) if owner
|
|
50
|
-
|
|
51
|
-
request_params = {}
|
|
52
|
-
request_params[:assignee_id] = assignee.id if assignee
|
|
53
|
-
request_params[:milestone] = milestone.title if milestone
|
|
54
|
-
request_params[:source_branch] = head if head
|
|
55
|
-
|
|
56
|
-
response = T.cast(
|
|
57
|
-
api_interface.send_request(api_path, params: request_params, multipage: true),
|
|
58
|
-
T::Array[T::Hash[String, T.untyped]]
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
response.map do |issue_data, result|
|
|
62
|
-
number = T.cast(issue_data.fetch("iid"), Integer)
|
|
63
|
-
title = T.cast(issue_data.fetch("title"), String)
|
|
64
|
-
link = T.cast(issue_data.fetch("web_url"), String)
|
|
65
|
-
|
|
66
|
-
new(number, api_interface, title, link)
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# See https://docs.gitlab.com/ee/api/notes.html#create-new-merge-request-note
|
|
71
|
-
#
|
|
72
|
-
sig { params(comment: String).void }
|
|
73
|
-
def comment(comment)
|
|
74
|
-
api_path = "projects/#{@api_interface.path_with_namespace(encoded: true)}/merge_requests/#{number}/notes"
|
|
75
|
-
request_data = {body: comment}
|
|
76
|
-
|
|
77
|
-
@api_interface.send_request(api_path, data: request_data)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# See https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr
|
|
81
|
-
#
|
|
82
|
-
sig {
|
|
83
|
-
params(
|
|
84
|
-
merge_method: T.nilable(String)
|
|
85
|
-
).void
|
|
86
|
-
}
|
|
87
|
-
def merge(merge_method: nil)
|
|
88
|
-
raise ArgumentError, "GitLab does not support the merge_method parameter" if merge_method
|
|
89
|
-
|
|
90
|
-
api_path = "projects/#{@api_interface.path_with_namespace(encoded: true)}/merge_requests/#{number}/merge"
|
|
91
|
-
|
|
92
|
-
@api_interface.send_request(api_path, http_method: :put)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
class << self
|
|
96
|
-
extend T::Sig
|
|
97
|
-
|
|
98
|
-
private
|
|
99
|
-
|
|
100
|
-
sig {
|
|
101
|
-
params(
|
|
102
|
-
api_interface: ApiInterface,
|
|
103
|
-
owner: String
|
|
104
|
-
).void
|
|
105
|
-
}
|
|
106
|
-
def check_list_owner!(api_interface, owner)
|
|
107
|
-
if !api_interface.path_with_namespace.start_with?("#{owner}/")
|
|
108
|
-
raise "Mismatch owner/API path!: #{owner}<>#{api_interface.path_with_namespace}"
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end # PR
|
|
113
|
-
end # Gitlab
|
|
114
|
-
end # Geet
|
data/lib/geet/gitlab/user.rb
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
# typed: strict
|
|
3
|
-
|
|
4
|
-
module Geet
|
|
5
|
-
module Gitlab
|
|
6
|
-
class User
|
|
7
|
-
extend T::Sig
|
|
8
|
-
|
|
9
|
-
sig { returns(Integer) }
|
|
10
|
-
attr_reader :id
|
|
11
|
-
|
|
12
|
-
sig { returns(String) }
|
|
13
|
-
attr_reader :username
|
|
14
|
-
|
|
15
|
-
sig {
|
|
16
|
-
params(
|
|
17
|
-
id: Integer,
|
|
18
|
-
username: String,
|
|
19
|
-
api_interface: ApiInterface
|
|
20
|
-
).void
|
|
21
|
-
}
|
|
22
|
-
def initialize(id, username, api_interface)
|
|
23
|
-
@id = id
|
|
24
|
-
@username = username
|
|
25
|
-
@api_interface = api_interface
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Returns an array of User instances
|
|
29
|
-
#
|
|
30
|
-
sig {
|
|
31
|
-
params(
|
|
32
|
-
api_interface: ApiInterface
|
|
33
|
-
).returns(T::Array[User])
|
|
34
|
-
}
|
|
35
|
-
def self.list_collaborators(api_interface)
|
|
36
|
-
api_path = "projects/#{api_interface.path_with_namespace(encoded: true)}/members"
|
|
37
|
-
|
|
38
|
-
response = T.cast(
|
|
39
|
-
api_interface.send_request(api_path, multipage: true),
|
|
40
|
-
T::Array[T::Hash[String, T.untyped]]
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
response.map do |user_entry|
|
|
44
|
-
id = T.cast(user_entry.fetch("id"), Integer)
|
|
45
|
-
username = T.cast(user_entry.fetch("username"), String)
|
|
46
|
-
|
|
47
|
-
new(id, username, api_interface)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end # User
|
|
51
|
-
end # Gitlab
|
|
52
|
-
end # Geet
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
# typed: strict
|
|
3
|
-
|
|
4
|
-
require "stringio"
|
|
5
|
-
require "tmpdir"
|
|
6
|
-
|
|
7
|
-
module Geet
|
|
8
|
-
module Services
|
|
9
|
-
class AbstractCreateIssue
|
|
10
|
-
extend T::Sig
|
|
11
|
-
|
|
12
|
-
include Geet::Helpers::OsHelper
|
|
13
|
-
|
|
14
|
-
sig { params(repository: Git::Repository, out: T.any(IO, StringIO)).void }
|
|
15
|
-
def initialize(repository, out: $stdout)
|
|
16
|
-
@repository = repository
|
|
17
|
-
@out = out
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
http_interactions:
|
|
3
|
-
- request:
|
|
4
|
-
method: post
|
|
5
|
-
uri: https://gitlab.com/api/v4/projects/donaldduck%2Ftestproject/labels
|
|
6
|
-
body:
|
|
7
|
-
encoding: US-ASCII
|
|
8
|
-
string: name=my_label&color=%23123456
|
|
9
|
-
headers:
|
|
10
|
-
Accept-Encoding:
|
|
11
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
12
|
-
Accept:
|
|
13
|
-
- "*/*"
|
|
14
|
-
User-Agent:
|
|
15
|
-
- Ruby
|
|
16
|
-
Host:
|
|
17
|
-
- gitlab.com
|
|
18
|
-
Private-Token:
|
|
19
|
-
- "<GITLAB_CREDENTIALS>"
|
|
20
|
-
response:
|
|
21
|
-
status:
|
|
22
|
-
code: 201
|
|
23
|
-
message: Created
|
|
24
|
-
headers:
|
|
25
|
-
Server:
|
|
26
|
-
- nginx
|
|
27
|
-
Date:
|
|
28
|
-
- Tue, 03 Jul 2018 16:44:14 GMT
|
|
29
|
-
Content-Type:
|
|
30
|
-
- application/json
|
|
31
|
-
Content-Length:
|
|
32
|
-
- '180'
|
|
33
|
-
Cache-Control:
|
|
34
|
-
- max-age=0, private, must-revalidate
|
|
35
|
-
Etag:
|
|
36
|
-
- W/"9ccd74bc7bedefbbc67c4783b163c8fc"
|
|
37
|
-
Vary:
|
|
38
|
-
- Origin
|
|
39
|
-
X-Content-Type-Options:
|
|
40
|
-
- nosniff
|
|
41
|
-
X-Frame-Options:
|
|
42
|
-
- SAMEORIGIN
|
|
43
|
-
X-Request-Id:
|
|
44
|
-
- fb041fb4-a96d-4230-9eac-514d9db1a9f0
|
|
45
|
-
X-Runtime:
|
|
46
|
-
- '0.253058'
|
|
47
|
-
Strict-Transport-Security:
|
|
48
|
-
- max-age=31536000
|
|
49
|
-
Ratelimit-Limit:
|
|
50
|
-
- '600'
|
|
51
|
-
Ratelimit-Observed:
|
|
52
|
-
- '2'
|
|
53
|
-
Ratelimit-Remaining:
|
|
54
|
-
- '598'
|
|
55
|
-
Ratelimit-Reset:
|
|
56
|
-
- '1530636314'
|
|
57
|
-
Ratelimit-Resettime:
|
|
58
|
-
- Wed, 03 Jul 2018 16:45:14 GMT
|
|
59
|
-
body:
|
|
60
|
-
encoding: UTF-8
|
|
61
|
-
string: '{"id":123456,"name":"my_label","color":"#123456","description":null,"open_issues_count":0,"closed_issues_count":0,"open_merge_requests_count":0,"priority":null,"subscribed":false}'
|
|
62
|
-
http_version:
|
|
63
|
-
recorded_at: Tue, 03 Jul 2018 16:44:15 GMT
|
|
64
|
-
recorded_with: VCR 3.0.3
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
http_interactions:
|
|
3
|
-
- request:
|
|
4
|
-
method: get
|
|
5
|
-
uri: https://gitlab.com/api/v4/projects/donaldduck%2Ftestproject/issues
|
|
6
|
-
body:
|
|
7
|
-
encoding: US-ASCII
|
|
8
|
-
string: ''
|
|
9
|
-
headers:
|
|
10
|
-
Accept-Encoding:
|
|
11
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
12
|
-
Accept:
|
|
13
|
-
- "*/*"
|
|
14
|
-
User-Agent:
|
|
15
|
-
- Ruby
|
|
16
|
-
Host:
|
|
17
|
-
- gitlab.com
|
|
18
|
-
Private-Token:
|
|
19
|
-
- "<GITLAB_CREDENTIALS>"
|
|
20
|
-
response:
|
|
21
|
-
status:
|
|
22
|
-
code: 200
|
|
23
|
-
message: OK
|
|
24
|
-
headers:
|
|
25
|
-
Server:
|
|
26
|
-
- nginx
|
|
27
|
-
Date:
|
|
28
|
-
- Mon, 27 Nov 2017 20:58:06 GMT
|
|
29
|
-
Content-Type:
|
|
30
|
-
- application/json
|
|
31
|
-
Content-Length:
|
|
32
|
-
- '1648'
|
|
33
|
-
Cache-Control:
|
|
34
|
-
- max-age=0, private, must-revalidate
|
|
35
|
-
Etag:
|
|
36
|
-
- W/"622f178aa3f7cf68c0314a3faa6c520f"
|
|
37
|
-
Link:
|
|
38
|
-
- <https://gitlab.com/api/v4/projects/donaldduck%2Ftestproject/issues?id=donaldduck%2Ftestproject&order_by=created_at&page=1&per_page=20&sort=desc&state=all>;
|
|
39
|
-
rel="first", <https://gitlab.com/api/v4/projects/donaldduck%2Ftestproject/issues?id=donaldduck%2Ftestproject&order_by=created_at&page=1&per_page=20&sort=desc&state=all>;
|
|
40
|
-
rel="last"
|
|
41
|
-
Vary:
|
|
42
|
-
- Origin
|
|
43
|
-
X-Content-Type-Options:
|
|
44
|
-
- nosniff
|
|
45
|
-
X-Frame-Options:
|
|
46
|
-
- SAMEORIGIN
|
|
47
|
-
X-Next-Page:
|
|
48
|
-
- ''
|
|
49
|
-
X-Page:
|
|
50
|
-
- '1'
|
|
51
|
-
X-Per-Page:
|
|
52
|
-
- '20'
|
|
53
|
-
X-Prev-Page:
|
|
54
|
-
- ''
|
|
55
|
-
X-Request-Id:
|
|
56
|
-
- 9d46bac0-142f-464f-af89-4cac318e4563
|
|
57
|
-
X-Runtime:
|
|
58
|
-
- '0.428030'
|
|
59
|
-
X-Total:
|
|
60
|
-
- '2'
|
|
61
|
-
X-Total-Pages:
|
|
62
|
-
- '1'
|
|
63
|
-
Strict-Transport-Security:
|
|
64
|
-
- max-age=31536000
|
|
65
|
-
Ratelimit-Limit:
|
|
66
|
-
- '600'
|
|
67
|
-
Ratelimit-Observed:
|
|
68
|
-
- '1'
|
|
69
|
-
Ratelimit-Remaining:
|
|
70
|
-
- '599'
|
|
71
|
-
Ratelimit-Reset:
|
|
72
|
-
- '1511816346'
|
|
73
|
-
Ratelimit-Resettime:
|
|
74
|
-
- Tue, 27 Nov 2017 20:59:06 GMT
|
|
75
|
-
body:
|
|
76
|
-
encoding: UTF-8
|
|
77
|
-
string: '[{"id":123456,"iid":2,"project_id":123456,"title":"I like more pizza","description":"And
|
|
78
|
-
you should, too!","state":"opened","created_at":"2017-11-26T20:56:53.870Z","updated_at":"2017-11-27T18:57:07.289Z","closed_at":null,"labels":[],"milestone":null,"assignees":[],"author":{"id":123456,"name":"Donald
|
|
79
|
-
Duck","username":"donaldduck","state":"active","avatar_url":"https://secure.gravatar.com/avatar/0123456789abcdef0123456789abcdef?s=80\u0026d=identicon","web_url":"https://gitlab.com/donaldduck"},"assignee":null,"user_notes_count":1,"upvotes":0,"downvotes":0,"due_date":null,"confidential":false,"weight":null,"discussion_locked":null,"web_url":"https://gitlab.com/donaldduck/testproject/issues/2","time_stats":{"time_estimate":0,"total_time_spent":0,"human_time_estimate":null,"human_total_time_spent":null}},{"id":123456,"iid":1,"project_id":123456,"title":"I
|
|
80
|
-
like pizza","description":"How about you?","state":"opened","created_at":"2017-11-26T20:56:42.241Z","updated_at":"2017-11-26T20:56:42.241Z","closed_at":null,"labels":[],"milestone":null,"assignees":[],"author":{"id":123456,"name":"Donald
|
|
81
|
-
Duck","username":"donaldduck","state":"active","avatar_url":"https://secure.gravatar.com/avatar/0123456789abcdef0123456789abcdef?s=80\u0026d=identicon","web_url":"https://gitlab.com/donaldduck"},"assignee":null,"user_notes_count":0,"upvotes":0,"downvotes":0,"due_date":null,"confidential":false,"weight":null,"discussion_locked":null,"web_url":"https://gitlab.com/donaldduck/testproject/issues/1","time_stats":{"time_estimate":0,"total_time_spent":0,"human_time_estimate":null,"human_total_time_spent":null}}]'
|
|
82
|
-
http_version:
|
|
83
|
-
recorded_at: Mon, 27 Nov 2017 20:58:06 GMT
|
|
84
|
-
recorded_with: VCR 3.0.3
|