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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 506631ac3d925645c77d80c04a25f9a0ee56b870
4
- data.tar.gz: 45f29455185ae52784716d02936edad184355a60
3
+ metadata.gz: 728d36964c4a9f513d0ca3ae5897c4beee46f8de
4
+ data.tar.gz: 909bc1aa8d6b30e85c0eb652e57e3991d16b5c1b
5
5
  SHA512:
6
- metadata.gz: df26dd771eaa60bec62f5849bbb8e09ece06e69e79223b5cdcb34153ef78ffc43c4b7e90e0704eddfeeb161173841d1aad2f602a668795c55caa44d0177d0782
7
- data.tar.gz: 9103c4e08c2293b9274ed3c1c4860958f173e4b1181a0716d6cda0387ee83b6743092134e90ce8c10c5ea73d532d37021cc9a177e3cfbbc3e4fa96e1ff4dfa90
6
+ metadata.gz: 915f71759d79a0306ca011f0acd66389c60d4b9925ae9bc2655149d25466c5a3b4e441371c49f55ff8941dabcf7cb60d29d245a396b0062de4fd9b81127555ed
7
+ data.tar.gz: 27bc9295f4ca3d4f9f0192cd4ebbb0ddf7e821e3254c09193c0ba9367a3fbca0d5b07b37b56ee0ad40ea6038f24e26f672930f80413ba08f68bc4429f5a48d86
@@ -22,11 +22,10 @@ module Vx
22
22
  raise ArgumentError, 'not implemented'
23
23
  end
24
24
 
25
- private
25
+ def session
26
+ @session ||= create_session
27
+ end
26
28
 
27
- def session
28
- @session ||= create_session
29
- end
30
29
  end
31
30
  end
32
31
  end
@@ -1,12 +1,27 @@
1
+ require 'ostruct'
2
+
1
3
  module Vx
2
4
  module ServiceConnector
3
5
  class Github
4
- class Payload
6
+ Payload = Struct.new(:session, :params) do
5
7
 
6
- def initialize(params)
7
- @params = params || {}
8
+ def build
9
+ ServiceConnector::Model::Payload.new(
10
+ !!ignore?,
11
+ !!pull_request,
12
+ pull_request_number,
13
+ branch,
14
+ branch_label,
15
+ sha,
16
+ message,
17
+ author,
18
+ author_email,
19
+ web_url
20
+ )
8
21
  end
9
22
 
23
+ private
24
+
10
25
  def pull_request?
11
26
  key? "pull_request"
12
27
  end
@@ -21,7 +36,7 @@ module Vx
21
36
  end
22
37
  end
23
38
 
24
- def head
39
+ def sha
25
40
  if pull_request?
26
41
  pull_request["head"]["sha"]
27
42
  else
@@ -29,14 +44,6 @@ module Vx
29
44
  end
30
45
  end
31
46
 
32
- def base
33
- if pull_request?
34
- pull_request["base"]["sha"]
35
- else
36
- self["before"]
37
- end
38
- end
39
-
40
47
  def branch
41
48
  if pull_request?
42
49
  pull_request["head"]["ref"]
@@ -53,11 +60,35 @@ module Vx
53
60
  end
54
61
  end
55
62
 
56
- def url
63
+ def web_url
64
+ if pull_request?
65
+ pull_request["html_url"]
66
+ else
67
+ head_commit["url"]
68
+ end
69
+ end
70
+
71
+ def message
72
+ if pull_request?
73
+ commit_for_pull_request.message
74
+ else
75
+ head_commit["message"]
76
+ end
77
+ end
78
+
79
+ def author
80
+ if pull_request?
81
+ commit_for_pull_request.author.name
82
+ else
83
+ head_commit? && head_commit["author"]["name"]
84
+ end
85
+ end
86
+
87
+ def author_email
57
88
  if pull_request?
58
- pull_request["url"]
89
+ commit_for_pull_request.author.email
59
90
  else
60
- self["compare"]
91
+ head_commit? && head_commit["author"]["email"]
61
92
  end
62
93
  end
63
94
 
@@ -85,37 +116,41 @@ module Vx
85
116
  if pull_request?
86
117
  closed_pull_request? || !foreign_pull_request?
87
118
  else
88
- head == '0000000000000000000000000000000000000000' ||
89
- tag?
119
+ sha == '0000000000000000000000000000000000000000' || tag?
90
120
  end
91
121
  end
92
122
 
93
- def to_model
94
- ServiceConnector::Model::Payload.new(
95
- !!pull_request,
96
- pull_request_number,
97
- head,
98
- base,
99
- branch,
100
- branch_label,
101
- url,
102
- !!ignore?
103
- )
123
+
124
+ def commit_for_pull_request
125
+ @commit_for_pull_request ||=
126
+ begin
127
+ data = session.commit pull_request["base"]["repo"]["full_name"], sha
128
+ data.commit
129
+ rescue ::Octokit::NotFound => e
130
+ $stderr.puts "ERROR: #{e.inspect}"
131
+ OpenStruct.new
132
+ end
104
133
  end
105
134
 
106
- private
135
+ def head_commit?
136
+ self["head_commit"]
137
+ end
107
138
 
108
- def pull_request
109
- self["pull_request"]
110
- end
139
+ def head_commit
140
+ self["head_commit"] || {}
141
+ end
111
142
 
112
- def key?(name)
113
- @params.key? name
114
- end
143
+ def pull_request
144
+ self["pull_request"]
145
+ end
115
146
 
116
- def [](val)
117
- @params[val]
118
- end
147
+ def key?(name)
148
+ params.key? name
149
+ end
150
+
151
+ def [](val)
152
+ params[val]
153
+ end
119
154
 
120
155
  end
121
156
 
@@ -11,11 +11,11 @@ module Vx
11
11
  include ServiceConnector::Base
12
12
 
13
13
  def repos
14
- @repos ||= Github::Repos.new(session).to_a
14
+ Github::Repos.new(session).to_a
15
15
  end
16
16
 
17
17
  def organizations
18
- @organizations ||= Github::Repos.new(session).organizations
18
+ Github::Repos.new(session).organizations
19
19
  end
20
20
 
21
21
  def hooks(repo)
@@ -34,8 +34,8 @@ module Vx
34
34
  Github::Files.new(session, repo)
35
35
  end
36
36
 
37
- def commits(repo)
38
- Github::Commits.new(session, repo)
37
+ def payload(repo, params)
38
+ Github::Payload.new(session, params).build
39
39
  end
40
40
 
41
41
  private
@@ -48,6 +48,6 @@ module Vx
48
48
  end
49
49
  end
50
50
 
51
- %w{ hooks deploy_keys notices repos payload files commits }.each do |f|
52
- require File.expand_path("../github/#{f}", __FILE__)
51
+ Dir[File.expand_path("../github/*.rb", __FILE__)].each do |f|
52
+ require f
53
53
  end
@@ -2,7 +2,7 @@ require 'base64'
2
2
 
3
3
  module Vx
4
4
  module ServiceConnector
5
- class GitlabV4
5
+ class GitlabV5
6
6
  Files = Struct.new(:session, :repo) do
7
7
 
8
8
  def get(sha, path)
@@ -1,6 +1,6 @@
1
1
  module Vx
2
2
  module ServiceConnector
3
- class GitlabV4
3
+ class GitlabV5
4
4
  Hooks = Struct.new(:session, :repo) do
5
5
 
6
6
  def all
@@ -1,6 +1,6 @@
1
1
  module Vx
2
2
  module ServiceConnector
3
- class GitlabV4
3
+ class GitlabV5
4
4
  Notices = Struct.new(:session, :repo) do
5
5
 
6
6
  def create(build_sha, build_status, build_url, description)
@@ -0,0 +1,112 @@
1
+ module Vx
2
+ module ServiceConnector
3
+ class GitlabV5
4
+ Payload = Struct.new(:session, :repo, :params) do
5
+
6
+ def build
7
+ ServiceConnector::Model::Payload.new(
8
+ !!ignore?,
9
+ !!pull_request?,
10
+ pull_request_number,
11
+ branch,
12
+ branch_label,
13
+ sha,
14
+ message,
15
+ author,
16
+ author_email,
17
+ web_url
18
+ )
19
+ end
20
+
21
+ private
22
+
23
+ def message
24
+ commit_for_payload["title"]
25
+ end
26
+
27
+ def author
28
+ commit_for_payload["author_name"]
29
+ end
30
+
31
+ def author_email
32
+ commit_for_payload["author_email"]
33
+ end
34
+
35
+ def pull_request?
36
+ false
37
+ end
38
+
39
+ def tag?
40
+ false
41
+ end
42
+
43
+ def pull_request_number
44
+ nil
45
+ end
46
+
47
+ def sha
48
+ self["after"]
49
+ end
50
+
51
+ def branch
52
+ self["ref"].to_s.split("refs/heads/").last
53
+ end
54
+
55
+ def branch_label
56
+ branch
57
+ end
58
+
59
+ def web_url
60
+ if u = self["repository"] && self["repository"]["homepage"]
61
+ "#{u}/commit/#{sha}"
62
+ end
63
+ end
64
+
65
+ def pull_request_head_repo_id
66
+ nil
67
+ end
68
+
69
+ def pull_request_base_repo_id
70
+ nil
71
+ end
72
+
73
+ def closed_pull_request?
74
+ false
75
+ end
76
+
77
+ def foreign_pull_request?
78
+ pull_request_base_repo_id != pull_request_head_repo_id
79
+ end
80
+
81
+ def ignore?
82
+ sha == '0000000000000000000000000000000000000000'
83
+ end
84
+
85
+ def pull_request
86
+ {}
87
+ end
88
+
89
+ def key?(name)
90
+ params.key? name
91
+ end
92
+
93
+ def [](val)
94
+ params[val]
95
+ end
96
+
97
+ def commit_for_payload
98
+ @commit_for_payload ||=
99
+ begin
100
+ commits = session.get("/projects/#{repo.id}/repository/commits", ref_name: sha)
101
+ commits.first || {}
102
+ rescue RequestError => e
103
+ $stderr.puts "ERROR: #{e.inspect}"
104
+ {}
105
+ end
106
+ end
107
+
108
+ end
109
+
110
+ end
111
+ end
112
+ end
@@ -1,6 +1,6 @@
1
1
  module Vx
2
2
  module ServiceConnector
3
- class GitlabV4
3
+ class GitlabV5
4
4
  Repos = Struct.new(:session) do
5
5
 
6
6
  def to_a
@@ -3,7 +3,7 @@ require 'uri'
3
3
 
4
4
  module Vx
5
5
  module ServiceConnector
6
- class GitlabV4
6
+ class GitlabV5
7
7
 
8
8
  Session = Struct.new(:endpoint, :private_token) do
9
9
 
@@ -2,16 +2,44 @@ require 'gitlab'
2
2
 
3
3
  module Vx
4
4
  module ServiceConnector
5
- class GitlabV5 < GitlabV4
5
+ GitlabV5 = Struct.new(:endpoint, :private_token) do
6
+
7
+ include ServiceConnector::Base
6
8
 
7
9
  def repos
8
- @repos ||= GitlabV4::Repos.new(session).to_a
10
+ @repos ||= GitlabV5::Repos.new(session).to_a
11
+ end
12
+
13
+ def organizations
14
+ []
15
+ end
16
+
17
+ def hooks(repo)
18
+ GitlabV5::Hooks.new(session, repo)
9
19
  end
10
20
 
11
21
  def deploy_keys(repo)
12
22
  GitlabV5::DeployKeys.new(session, repo)
13
23
  end
14
24
 
25
+ def notices(repo)
26
+ GitlabV5::Notices.new(session, repo)
27
+ end
28
+
29
+ def files(repo)
30
+ GitlabV5::Files.new(session, repo)
31
+ end
32
+
33
+ def payload(repo, params)
34
+ GitlabV5::Payload.new(session, repo, params).build
35
+ end
36
+
37
+ private
38
+
39
+ def create_session
40
+ GitlabV5::Session.new(endpoint, private_token)
41
+ end
42
+
15
43
  end
16
44
  end
17
45
  end
@@ -12,14 +12,16 @@ module Vx
12
12
  )
13
13
 
14
14
  Payload = Struct.new(
15
+ :ignore?,
15
16
  :pull_request?,
16
17
  :pull_request_number,
17
- :head,
18
- :base,
19
18
  :branch,
20
19
  :branch_label,
21
- :url,
22
- :ignore?
20
+ :sha,
21
+ :message,
22
+ :author,
23
+ :author_email,
24
+ :web_url
23
25
  ) do
24
26
  def to_hash ; to_h end
25
27
 
@@ -34,26 +36,20 @@ module Vx
34
36
  end
35
37
  end
36
38
 
37
- Commit = Struct.new(
38
- :sha,
39
- :message,
40
- :author,
41
- :author_email,
42
- :http_url
43
- )
44
-
45
39
  extend self
46
40
 
47
41
  def test_payload_attributes(params = {})
48
42
  {
43
+ ignore?: false,
49
44
  pull_request?: false,
50
45
  pull_request_number: nil,
51
- head: "HEAD",
52
- base: '0000',
53
46
  branch: 'master',
54
47
  branch_label: 'master:label',
55
- url: 'http://example.com',
56
- ignore?: false
48
+ sha: "HEAD",
49
+ message: 'test commit',
50
+ author: 'User Name',
51
+ author_email: 'me@example.com',
52
+ web_url: 'http://example.com',
57
53
  }.merge(params)
58
54
  end
59
55
 
@@ -61,10 +57,6 @@ module Vx
61
57
  Payload.from_hash(test_payload_attributes params)
62
58
  end
63
59
 
64
- def test_commit
65
- Commit.new('sha', 'message', 'author', 'author_email', 'http_url')
66
- end
67
-
68
60
  def test_repo
69
61
  Repo.new(
70
62
  1,
@@ -1,5 +1,5 @@
1
1
  module Vx
2
2
  module ServiceConnector
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
  end
5
5
  end
@@ -6,21 +6,15 @@ module Vx
6
6
 
7
7
  autoload :Base, File.expand_path("../service_connector/base", __FILE__)
8
8
  autoload :Github, File.expand_path("../service_connector/github", __FILE__)
9
- autoload :GitlabV4, File.expand_path("../service_connector/gitlab_v4", __FILE__)
10
9
  autoload :GitlabV5, File.expand_path("../service_connector/gitlab_v5", __FILE__)
11
10
  autoload :Model, File.expand_path("../service_connector/model", __FILE__)
12
11
 
13
12
  extend self
14
13
 
15
- def github ; Github end
16
- def gitlab_v3 ; GitlabV3 end
17
-
18
14
  def to(name)
19
15
  case name.to_sym
20
16
  when :github
21
17
  Github
22
- when :gitlab_v4
23
- GitlabV4
24
18
  when :gitlab_v5
25
19
  GitlabV5
26
20
  else
@@ -28,18 +22,5 @@ module Vx
28
22
  end
29
23
  end
30
24
 
31
- def payload(name, params)
32
- klass =
33
- case name.to_sym
34
- when :github
35
- Github::Payload
36
- when :gitlab_v4, :gitlab_v5
37
- GitlabV4::Payload
38
- else
39
- raise ArgumentError, "Payload for #{name.inspect} is not defined"
40
- end
41
- klass.new(params).to_model
42
- end
43
-
44
25
  end
45
26
  end