vx-service_connector 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vx/service_connector/base.rb +3 -4
  3. data/lib/vx/service_connector/github/payload.rb +73 -38
  4. data/lib/vx/service_connector/github.rb +6 -6
  5. data/lib/vx/service_connector/{gitlab_v4 → gitlab_v5}/files.rb +1 -1
  6. data/lib/vx/service_connector/{gitlab_v4 → gitlab_v5}/hooks.rb +1 -1
  7. data/lib/vx/service_connector/{gitlab_v4 → gitlab_v5}/notices.rb +1 -1
  8. data/lib/vx/service_connector/gitlab_v5/payload.rb +112 -0
  9. data/lib/vx/service_connector/{gitlab_v4 → gitlab_v5}/repos.rb +1 -1
  10. data/lib/vx/service_connector/{gitlab_v4 → gitlab_v5}/session.rb +1 -1
  11. data/lib/vx/service_connector/gitlab_v5.rb +30 -2
  12. data/lib/vx/service_connector/model.rb +12 -20
  13. data/lib/vx/service_connector/version.rb +1 -1
  14. data/lib/vx/service_connector.rb +0 -19
  15. data/spec/fixtures/github/payload/foreign_pull_request.json +810 -1
  16. data/spec/fixtures/github/payload/pull_request.json +0 -1
  17. data/spec/fixtures/github/payload/push_tag.json +0 -1
  18. data/spec/fixtures/{gitlab_v4 → gitlab_v5}/commits.json +0 -0
  19. data/spec/fixtures/{gitlab_v4 → gitlab_v5}/hooks.json +0 -0
  20. data/spec/fixtures/gitlab_v5/payload/push.json +32 -0
  21. data/spec/fixtures/{gitlab_v4 → gitlab_v5}/projects.json +0 -0
  22. data/spec/fixtures/{gitlab_v4 → gitlab_v5}/user_keys.json +0 -0
  23. data/spec/lib/github_payload_spec.rb +43 -94
  24. data/spec/lib/github_spec.rb +0 -23
  25. data/spec/lib/gitlab_v5_payload_spec.rb +33 -0
  26. data/spec/lib/gitlab_v5_spec.rb +74 -0
  27. data/spec/lib/model_spec.rb +3 -28
  28. data/spec/lib/service_connector_spec.rb +0 -35
  29. data/spec/support/github_web_mocks.rb +2 -2
  30. data/spec/support/gitlab_v5_web_mocks.rb +41 -2
  31. metadata +20 -32
  32. data/lib/vx/service_connector/github/commits.rb +0 -33
  33. data/lib/vx/service_connector/gitlab_v4/commits.rb +0 -35
  34. data/lib/vx/service_connector/gitlab_v4/deploy_keys.rb +0 -32
  35. data/lib/vx/service_connector/gitlab_v4/payload.rb +0 -126
  36. data/lib/vx/service_connector/gitlab_v4.rb +0 -49
  37. data/spec/fixtures/gitlab_v4/payload/merge_request1_unchecked.json +0 -47
  38. data/spec/fixtures/gitlab_v4/payload/merge_request2_can_be_merge.json +0 -47
  39. data/spec/fixtures/gitlab_v4/payload/push.json +0 -106
  40. data/spec/lib/gitlab_v4_payload_spec.rb +0 -101
  41. data/spec/lib/gitlab_v4_spec.rb +0 -141
  42. data/spec/support/gitlab_v4_web_mocks.rb +0 -73
@@ -1,33 +0,0 @@
1
- module Vx
2
- module ServiceConnector
3
- class Github
4
- Commits = Struct.new(:session, :repo) do
5
-
6
- def get(sha)
7
- begin
8
- commit = session.commit repo.full_name, sha
9
- commit_to_model commit
10
- rescue ::Octokit::NotFound => e
11
- $stderr.puts "ERROR: #{e.inspect}"
12
- nil
13
- end
14
- end
15
-
16
- private
17
-
18
- def commit_to_model(commit)
19
- url = commit.rels[:html]
20
-
21
- Model::Commit.new(
22
- commit.sha,
23
- commit.commit.message,
24
- commit.commit.author.name,
25
- commit.commit.author.email,
26
- url && url.href
27
- )
28
- end
29
-
30
- end
31
- end
32
- end
33
- end
@@ -1,35 +0,0 @@
1
- require 'base64'
2
-
3
- module Vx
4
- module ServiceConnector
5
- class GitlabV4
6
- Commits = Struct.new(:session, :repo) do
7
-
8
- def get(sha)
9
- begin
10
- all_commits = session.get "/projects/#{repo.id}/repository/commits", ref_name: sha
11
- commits_to_model all_commits
12
- rescue RequestError => e
13
- $stderr.puts "ERROR: #{e.inspect}"
14
- nil
15
- end
16
- end
17
-
18
- private
19
-
20
- def commits_to_model(commits)
21
- if commit = commits.first
22
- Model::Commit.new(
23
- commit.id,
24
- commit.title,
25
- commit.author_name,
26
- commit.author_email,
27
- nil
28
- )
29
- end
30
- end
31
-
32
- end
33
- end
34
- end
35
- end
@@ -1,32 +0,0 @@
1
- module Vx
2
- module ServiceConnector
3
- class GitlabV4
4
- DeployKeys = Struct.new(:session, :repo) do
5
-
6
- def all
7
- session.get "/user/keys"
8
- end
9
-
10
- def create(key_name, public_key)
11
- key_name = compute_key_name(key_name)
12
- session.post "/user/keys", title: key_name, key: public_key
13
- end
14
-
15
- def destroy(key_name)
16
- key_name = compute_key_name(key_name)
17
- all.select do |key|
18
- key.title == key_name
19
- end.map do |key|
20
- session.delete "/user/keys/#{key.id}"
21
- end
22
- end
23
-
24
- private
25
- def compute_key_name(orig_name)
26
- "#{orig_name} for #{repo.full_name}"
27
- end
28
- end
29
- end
30
- end
31
- end
32
-
@@ -1,126 +0,0 @@
1
- module Vx
2
- module ServiceConnector
3
- class GitlabV4
4
- class Payload
5
-
6
- def initialize(params)
7
- @params = params || {}
8
- end
9
-
10
- def pull_request?
11
- self["object_kind"] == 'merge_request'
12
- end
13
-
14
- def tag?
15
- false
16
- end
17
-
18
- def pull_request_number
19
- if pull_request?
20
- pull_request["id"]
21
- end
22
- end
23
-
24
- def head
25
- if pull_request?
26
- cid = (pull_request["st_commits"] || []).first
27
- cid && cid["id"]
28
- else
29
- self["after"]
30
- end
31
- end
32
-
33
- def base
34
- if pull_request?
35
- cid = (pull_request["st_commits"] || []).first
36
- cid && cid["parent_ids"] && cid["parent_ids"].first
37
- else
38
- self["before"]
39
- end
40
- end
41
-
42
- def branch
43
- if pull_request?
44
- pull_request["source_branch"]
45
- else
46
- self["ref"].to_s.split("refs/heads/").last
47
- end
48
- end
49
-
50
- def branch_label
51
- branch
52
- end
53
-
54
- def url
55
- self["commits"] && self["commits"].first && self["commits"].first["url"]
56
- end
57
-
58
- def pull_request_head_repo_id
59
- if pull_request?
60
- pull_request["target_project_id"]
61
- end
62
- end
63
-
64
- def pull_request_base_repo_id
65
- if pull_request?
66
- pull_request["source_project_id"]
67
- end
68
- end
69
-
70
- def closed_pull_request?
71
- false
72
- end
73
-
74
- def foreign_pull_request?
75
- pull_request_base_repo_id != pull_request_head_repo_id
76
- end
77
-
78
- def pull_request_status
79
- if pull_request?
80
- pull_request["merge_status"]
81
- end
82
- end
83
-
84
- def ignore_pull_request?
85
- if pull_request?
86
- pull_request_status != 'unchecked'
87
- end
88
- end
89
-
90
- def ignore?
91
- head == '0000000000000000000000000000000000000000' ||
92
- ignore_pull_request?
93
- end
94
-
95
- def to_model
96
- ServiceConnector::Model::Payload.new(
97
- !!pull_request?,
98
- pull_request_number,
99
- head,
100
- base,
101
- branch,
102
- branch_label,
103
- url,
104
- !!ignore?
105
- )
106
- end
107
-
108
- private
109
-
110
- def pull_request
111
- self["object_attributes"] || {}
112
- end
113
-
114
- def key?(name)
115
- @params.key? name
116
- end
117
-
118
- def [](val)
119
- @params[val]
120
- end
121
-
122
- end
123
-
124
- end
125
- end
126
- end
@@ -1,49 +0,0 @@
1
- require 'gitlab'
2
-
3
- module Vx
4
- module ServiceConnector
5
- GitlabV4 = Struct.new(:endpoint, :private_token) do
6
-
7
- include ServiceConnector::Base
8
-
9
- def repos
10
- @repos ||= GitlabV4::Repos.new(session).to_a
11
- end
12
-
13
- def organizations
14
- []
15
- end
16
-
17
- def hooks(repo)
18
- GitlabV4::Hooks.new(session, repo)
19
- end
20
-
21
- def deploy_keys(repo)
22
- GitlabV4::DeployKeys.new(session, repo)
23
- end
24
-
25
- def notices(repo)
26
- GitlabV4::Notices.new(session, repo)
27
- end
28
-
29
- def files(repo)
30
- GitlabV4::Files.new(session, repo)
31
- end
32
-
33
- def commits(repo)
34
- GitlabV4::Commits.new(session, repo)
35
- end
36
-
37
- private
38
-
39
- def create_session
40
- GitlabV4::Session.new(endpoint, private_token)
41
- end
42
-
43
- end
44
- end
45
- end
46
-
47
- Dir[File.expand_path("../gitlab_v4/*.rb", __FILE__)].each do |f|
48
- require f
49
- end
@@ -1,47 +0,0 @@
1
- {
2
- "object_kind": "merge_request",
3
- "object_attributes": {
4
- "id": 1,
5
- "target_branch": "master",
6
- "source_branch": "one",
7
- "source_project_id": 1,
8
- "author_id": 1,
9
- "assignee_id": null,
10
- "title": "One",
11
- "created_at": "2014-01-29T16:14:38.113Z",
12
- "updated_at": "2014-01-29T16:14:45.845Z",
13
- "st_commits": [
14
- {
15
- "id": "d0862adb2c46aecb3db4cb4a50867599e4015cf9",
16
- "message": "one",
17
- "parent_ids": [
18
- "f1f92a4ef47a4257973282718449154938c3684d"
19
- ],
20
- "authored_date": "2014-01-29T16:13:20+00:00",
21
- "author_name": "Dmitry Galinsky",
22
- "author_email": "dima.exe@gmail.com",
23
- "committed_date": "2014-01-29T16:13:20+00:00",
24
- "committer_name": "Dmitry Galinsky",
25
- "committer_email": "dima.exe@gmail.com"
26
- }
27
- ],
28
- "st_diffs": [
29
- {
30
- "diff": "--- a/README\n+++ b/README\n@@ -1 +1,2 @@\n 1\n+2",
31
- "new_path": "README",
32
- "old_path": "README",
33
- "a_mode": null,
34
- "b_mode": "100644",
35
- "new_file": false,
36
- "renamed_file": false,
37
- "deleted_file": false
38
- }
39
- ],
40
- "milestone_id": null,
41
- "state": "opened",
42
- "merge_status": "unchecked",
43
- "target_project_id": 1,
44
- "iid": 1,
45
- "description": "."
46
- }
47
- }
@@ -1,47 +0,0 @@
1
- {
2
- "object_kind": "merge_request",
3
- "object_attributes": {
4
- "id": 1,
5
- "target_branch": "master",
6
- "source_branch": "one",
7
- "source_project_id": 1,
8
- "author_id": 1,
9
- "assignee_id": null,
10
- "title": "One",
11
- "created_at": "2014-01-29T16:14:38.000Z",
12
- "updated_at": "2014-01-29T16:14:49.246Z",
13
- "st_commits": [
14
- {
15
- "id": "d0862adb2c46aecb3db4cb4a50867599e4015cf9",
16
- "message": "one",
17
- "parent_ids": [
18
- "f1f92a4ef47a4257973282718449154938c3684d"
19
- ],
20
- "authored_date": "2014-01-29T16:13:20+00:00",
21
- "author_name": "Dmitry Galinsky",
22
- "author_email": "dima.exe@gmail.com",
23
- "committed_date": "2014-01-29T16:13:20+00:00",
24
- "committer_name": "Dmitry Galinsky",
25
- "committer_email": "dima.exe@gmail.com"
26
- }
27
- ],
28
- "st_diffs": [
29
- {
30
- "diff": "--- a/README\n+++ b/README\n@@ -1 +1,2 @@\n 1\n+2",
31
- "new_path": "README",
32
- "old_path": "README",
33
- "a_mode": null,
34
- "b_mode": "100644",
35
- "new_file": false,
36
- "renamed_file": false,
37
- "deleted_file": false
38
- }
39
- ],
40
- "milestone_id": null,
41
- "state": "opened",
42
- "merge_status": "can_be_merged",
43
- "target_project_id": 1,
44
- "iid": 1,
45
- "description": "."
46
- }
47
- }
@@ -1,106 +0,0 @@
1
- {
2
- "before": "e9f2a24318cf0a08dc2d7b987b9d8484e8c89406",
3
- "after": "a1dfcca6369dcbd19607c4cc0f932194d8bdf57d",
4
- "ref": "refs/heads/master",
5
- "user_id": 228,
6
- "user_name": "User Name",
7
- "repository": {
8
- "name": "SQERP",
9
- "url": "git@gitlab.example.com:sqerp.git",
10
- "description": null,
11
- "homepage": "https://gitlab.example.com/sqerp"
12
- },
13
- "commits": [
14
- {
15
- "id": "4b65377d80364713293df276d7756ff6253eedcd",
16
- "message": "Merge branch '93537_hours_units_in_details' of gitlab.example.com:sqerp",
17
- "timestamp": "2014-01-21T08:51:56+04:00",
18
- "url": "https://gitlab.example.com/sqerp/commit/4b65377d80364713293df276d7756ff6253eedcd",
19
- "author": {
20
- "name": "User Name",
21
- "email": "me@example.com"
22
- }
23
- },
24
- {
25
- "id": "17574ef138f188e5b51a1f036448c92296b674e7",
26
- "message": "[97241] activities_controller specs",
27
- "timestamp": "2014-01-21T18:26:16+04:00",
28
- "url": "https://gitlab.example.com/sqerp/commit/17574ef138f188e5b51a1f036448c92296b674e7",
29
- "author": {
30
- "name": "User Name",
31
- "email": "me@example.com"
32
- }
33
- },
34
- {
35
- "id": "ca71c5938c9c796cddf2d5a32c2689669998bb0d",
36
- "message": "fixes #84078 Custom roles.",
37
- "timestamp": "2014-01-22T11:20:10+04:00",
38
- "url": "https://gitlab.example.com/sqerp/commit/ca71c5938c9c796cddf2d5a32c2689669998bb0d",
39
- "author": {
40
- "name": "Maxim Dorofienko",
41
- "email": "dorofienko@gmail.com"
42
- }
43
- },
44
- {
45
- "id": "f27d4dca4e7094fbb2206cd61ecbf933d77f0897",
46
- "message": "[96071] merge ad_campaing's table",
47
- "timestamp": "2014-01-22T12:20:55+04:00",
48
- "url": "https://gitlab.example.com/sqerp/commit/f27d4dca4e7094fbb2206cd61ecbf933d77f0897",
49
- "author": {
50
- "name": "Evgeny Li",
51
- "email": "exaspark@gmail.com"
52
- }
53
- },
54
- {
55
- "id": "432ead814f28ec1701584b7ffe130eeb8ecd3e1f",
56
- "message": "csv exporter fix",
57
- "timestamp": "2014-01-23T13:25:38+04:00",
58
- "url": "https://gitlab.example.com/sqerp/commit/432ead814f28ec1701584b7ffe130eeb8ecd3e1f",
59
- "author": {
60
- "name": "Dmitry Koprov",
61
- "email": "dmitry.koprov@gmail.com"
62
- }
63
- },
64
- {
65
- "id": "780c2e4a26ebf10691d157a64e3d7259f369d48f",
66
- "message": "Merge branch '97241_controller_tests' of gitlab.example.com:sqerp",
67
- "timestamp": "2014-01-23T14:58:27+04:00",
68
- "url": "https://gitlab.example.com/sqerp/commit/780c2e4a26ebf10691d157a64e3d7259f369d48f",
69
- "author": {
70
- "name": "User Name",
71
- "email": "me@example.com"
72
- }
73
- },
74
- {
75
- "id": "e63d231b1c3e6286bea9ffbceebd6c12d87e3dc7",
76
- "message": "[98386] env fix",
77
- "timestamp": "2014-01-28T11:52:48+04:00",
78
- "url": "https://gitlab.example.com/sqerp/commit/e63d231b1c3e6286bea9ffbceebd6c12d87e3dc7",
79
- "author": {
80
- "name": "User Name",
81
- "email": "me@example.com"
82
- }
83
- },
84
- {
85
- "id": "09d62be9db7e476b01c9773b5e06e5fc6a550d3c",
86
- "message": "Merge branch '98386_fix' of gitlab.example.com:sqerp",
87
- "timestamp": "2014-01-28T11:54:49+04:00",
88
- "url": "https://gitlab.example.com/sqerp/commit/09d62be9db7e476b01c9773b5e06e5fc6a550d3c",
89
- "author": {
90
- "name": "User Name",
91
- "email": "me@example.com"
92
- }
93
- },
94
- {
95
- "id": "a1dfcca6369dcbd19607c4cc0f932194d8bdf57d",
96
- "message": "Merge branch '96071_merge_ad_campaigns' of gitlab.example.com:sqerp",
97
- "timestamp": "2014-01-28T12:10:16+04:00",
98
- "url": "https://gitlab.example.com/sqerp/commit/a1dfcca6369dcbd19607c4cc0f932194d8bdf57d",
99
- "author": {
100
- "name": "User Name",
101
- "email": "me@example.com"
102
- }
103
- }
104
- ],
105
- "total_commits_count": 9
106
- }
@@ -1,101 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Vx::ServiceConnector::GitlabV4::Payload do
4
- let(:content) { read_json_fixture("gitlab_v4/payload/push") }
5
- let(:payload) { described_class.new content }
6
- subject { payload }
7
-
8
- context "push" do
9
- let(:url) { "https://gitlab.example.com/sqerp/commit/4b65377d80364713293df276d7756ff6253eedcd" }
10
-
11
- its(:pull_request?) { should be_false }
12
- its(:pull_request_number) { should be_nil }
13
- its(:head) { should eq 'a1dfcca6369dcbd19607c4cc0f932194d8bdf57d' }
14
- its(:base) { should eq 'e9f2a24318cf0a08dc2d7b987b9d8484e8c89406' }
15
- its(:branch) { should eq 'master' }
16
- its(:branch_label) { should eq 'master' }
17
- its(:url) { should eq url }
18
-
19
- its(:pull_request_head_repo_id){ should be_nil }
20
- its(:pull_request_base_repo_id){ should be_nil }
21
- end
22
-
23
- context "pull_request" do
24
- let(:content) { read_json_fixture("gitlab_v4/payload/merge_request1_unchecked") }
25
-
26
- its(:pull_request?) { should be_true }
27
- its(:pull_request_number) { should eq 1 }
28
- its(:ignore?) { should be_false }
29
- its(:head) { should eq 'd0862adb2c46aecb3db4cb4a50867599e4015cf9' }
30
- its(:base) { should eq 'f1f92a4ef47a4257973282718449154938c3684d' }
31
- its(:branch) { should eq 'one' }
32
- its(:url) { should be_nil }
33
- end
34
-
35
- context "tag?" do
36
- end
37
-
38
- context "closed_pull_request?" do
39
- end
40
-
41
- context "foreign_pull_request?" do
42
- end
43
-
44
- =begin
45
- context "ignore?" do
46
- subject { payload.ignore? }
47
-
48
- context "when pull request" do
49
- let(:content) { read_json_fixture("github/payload/foreign_pull_request") }
50
- it { should be_false}
51
-
52
- context "and is closed" do
53
- before do
54
- expect(payload).to receive(:closed_pull_request?) { true }
55
- end
56
- it { should be_true }
57
- end
58
-
59
- context "and same repo" do
60
- let(:content) { read_json_fixture("github/payload/pull_request") }
61
- it { should be_true }
62
- end
63
- end
64
-
65
- context "when regular commit" do
66
- it { should be_false }
67
-
68
- context "and deleted branch" do
69
- before do
70
- expect(payload).to receive(:head) { '0000000000000000000000000000000000000000' }
71
- end
72
- it { should be_true }
73
- end
74
-
75
- context "and tag created" do
76
- before do
77
- expect(payload).to receive(:tag?) { true }
78
- end
79
- it { should be_true }
80
- end
81
- end
82
- end
83
- =end
84
-
85
- context "to_model" do
86
- subject { payload.to_model }
87
- it { should be_instance_of(Vx::ServiceConnector::Model::Payload) }
88
-
89
- its(:values) { should eq(
90
- [false,
91
- nil,
92
- "a1dfcca6369dcbd19607c4cc0f932194d8bdf57d",
93
- "e9f2a24318cf0a08dc2d7b987b9d8484e8c89406",
94
- "master",
95
- "master",
96
- "https://gitlab.example.com/sqerp/commit/4b65377d80364713293df276d7756ff6253eedcd",
97
- false]
98
- ) }
99
- end
100
-
101
- end