pact_broker 1.1.0 → 1.2.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/CHANGELOG.md +18 -0
- data/README.md +8 -11
- data/lib/pact_broker/api.rb +2 -0
- data/lib/pact_broker/api/decorators/decorator_context.rb +8 -1
- data/lib/pact_broker/api/decorators/pact_decorator.rb +18 -3
- data/lib/pact_broker/api/decorators/pact_version_decorator.rb +39 -0
- data/lib/pact_broker/api/decorators/pact_versions_decorator.rb +48 -0
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +3 -3
- data/lib/pact_broker/api/decorators/webhook_decorator.rb +1 -1
- data/lib/pact_broker/api/decorators/webhook_execution_result_decorator.rb +1 -1
- data/lib/pact_broker/api/decorators/webhooks_decorator.rb +1 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +16 -6
- data/lib/pact_broker/api/renderers/html_pact_renderer.rb +35 -6
- data/lib/pact_broker/api/resources/base_resource.rb +80 -33
- data/lib/pact_broker/api/resources/group.rb +26 -24
- data/lib/pact_broker/api/resources/index.rb +52 -51
- data/lib/pact_broker/api/resources/latest_pact.rb +22 -22
- data/lib/pact_broker/api/resources/latest_pacts.rb +18 -17
- data/lib/pact_broker/api/resources/pact.rb +34 -39
- data/lib/pact_broker/api/resources/pact_versions.rb +35 -0
- data/lib/pact_broker/api/resources/pact_webhooks.rb +54 -61
- data/lib/pact_broker/api/resources/pacticipant.rb +40 -39
- data/lib/pact_broker/api/resources/pacticipant_resource_methods.rb +19 -0
- data/lib/pact_broker/api/resources/pacticipants.rb +52 -17
- data/lib/pact_broker/api/resources/relationships.rb +18 -17
- data/lib/pact_broker/api/resources/tag.rb +30 -29
- data/lib/pact_broker/api/resources/webhook.rb +29 -28
- data/lib/pact_broker/api/resources/webhook_execution.rb +0 -1
- data/lib/pact_broker/api/resources/webhook_resource_methods.rb +24 -0
- data/lib/pact_broker/api/resources/webhooks.rb +18 -17
- data/lib/pact_broker/app.rb +1 -0
- data/lib/pact_broker/configuration.rb +2 -2
- data/lib/pact_broker/doc/views/webhooks.markdown +1 -1
- data/lib/pact_broker/functions/find_potential_duplicate_pacticipant_names.rb +43 -0
- data/lib/pact_broker/locale/en.yml +7 -0
- data/lib/pact_broker/messages.rb +20 -1
- data/lib/pact_broker/models/pact.rb +8 -0
- data/lib/pact_broker/models/pacticipant.rb +9 -0
- data/lib/pact_broker/models/version.rb +1 -0
- data/lib/pact_broker/repositories/pact_repository.rb +6 -0
- data/lib/pact_broker/repositories/pacticipant_repository.rb +4 -0
- data/lib/pact_broker/repositories/webhook_repository.rb +2 -3
- data/lib/pact_broker/services/pact_service.rb +20 -0
- data/lib/pact_broker/services/pacticipant_service.rb +28 -0
- data/lib/pact_broker/services/webhook_service.rb +7 -2
- data/lib/pact_broker/version.rb +1 -1
- data/pact_broker.gemspec +1 -1
- data/public/stylesheets/github.css +1 -1
- data/public/stylesheets/pact.css +12 -0
- data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +10 -0
- data/spec/lib/pact_broker/api/decorators/pact_version_decorator_spec.rb +49 -0
- data/spec/lib/pact_broker/api/renderers/html_pact_renderer_spec.rb +9 -1
- data/spec/lib/pact_broker/api/resources/group_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/latest_pact_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/pact_spec.rb +35 -6
- data/spec/lib/pact_broker/api/resources/pact_webhooks_spec.rb +6 -4
- data/spec/lib/pact_broker/api/resources/pacticipants_spec.rb +91 -0
- data/spec/lib/pact_broker/configuration_spec.rb +3 -3
- data/spec/lib/pact_broker/functions/find_potential_duplicate_pacticipant_names_spec.rb +82 -0
- data/spec/lib/pact_broker/messages_spec.rb +31 -0
- data/spec/lib/pact_broker/models/pacticipant_spec.rb +32 -0
- data/spec/lib/pact_broker/repositories/pact_repository_spec.rb +29 -0
- data/spec/lib/pact_broker/repositories/pacticipant_repository_spec.rb +29 -0
- data/spec/lib/pact_broker/repositories/webhook_repository_spec.rb +7 -18
- data/spec/lib/pact_broker/services/pact_service_spec.rb +20 -0
- data/spec/lib/pact_broker/services/pacticipant_service_spec.rb +87 -2
- data/spec/support/provider_state_builder.rb +7 -7
- data/tasks/rspec.rake +1 -1
- metadata +27 -2
@@ -8,57 +8,58 @@ module Webmachine
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
module PactBroker
|
11
|
+
module PactBroker
|
12
|
+
module Api
|
13
|
+
module Resources
|
12
14
|
|
13
|
-
|
15
|
+
class Pacticipant < BaseResource
|
14
16
|
|
15
|
-
|
17
|
+
def content_types_provided
|
18
|
+
[["application/hal+json", :to_json]]
|
19
|
+
end
|
16
20
|
|
17
|
-
|
18
|
-
|
19
|
-
|
21
|
+
def content_types_accepted
|
22
|
+
[["application/json", :from_json]]
|
23
|
+
end
|
20
24
|
|
21
|
-
|
22
|
-
|
23
|
-
|
25
|
+
def allowed_methods
|
26
|
+
["GET", "PATCH", "DELETE"]
|
27
|
+
end
|
24
28
|
|
25
|
-
|
26
|
-
|
27
|
-
|
29
|
+
def known_methods
|
30
|
+
super + ['PATCH']
|
31
|
+
end
|
28
32
|
|
29
|
-
|
30
|
-
|
31
|
-
|
33
|
+
def from_json
|
34
|
+
if @pacticipant
|
35
|
+
@pacticipant = pacticipant_service.update params.merge(name: pacticipant_name)
|
36
|
+
else
|
37
|
+
@pacticipant = pacticipant_service.create params.merge(name: pacticipant_name)
|
38
|
+
response.headers["Location"] = pacticipant_url(base_url, @pacticipant)
|
39
|
+
end
|
40
|
+
response.body = to_json
|
41
|
+
end
|
32
42
|
|
33
|
-
|
34
|
-
|
35
|
-
@pacticipant
|
36
|
-
else
|
37
|
-
@pacticipant = pacticipant_service.create params.merge(name: pacticipant_name)
|
38
|
-
response.headers["Location"] = pacticipant_url(base_url, @pacticipant)
|
43
|
+
def resource_exists?
|
44
|
+
@pacticipant = pacticipant_service.find_pacticipant_by_name(pacticipant_name)
|
45
|
+
@pacticipant != nil
|
39
46
|
end
|
40
|
-
response.body = to_json
|
41
|
-
end
|
42
47
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
48
|
+
def delete_resource
|
49
|
+
pacticipant_service.delete pacticipant_name
|
50
|
+
true
|
51
|
+
end
|
47
52
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
53
|
+
def to_json
|
54
|
+
PactBroker::Api::Decorators::PacticipantRepresenter.new(@pacticipant).to_json(base_url: base_url)
|
55
|
+
end
|
52
56
|
|
53
|
-
|
54
|
-
|
55
|
-
|
57
|
+
def pacticipant_name
|
58
|
+
identifier_from_path[:name]
|
59
|
+
end
|
56
60
|
|
57
|
-
def pacticipant_name
|
58
|
-
identifier_from_path[:name]
|
59
61
|
end
|
60
|
-
|
61
62
|
end
|
62
|
-
end
|
63
63
|
|
64
|
-
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PactBroker
|
2
|
+
module Api
|
3
|
+
module Resources
|
4
|
+
|
5
|
+
module PacticipantResourceMethods
|
6
|
+
|
7
|
+
def potential_duplicate_pacticipants? pacticipant_names
|
8
|
+
messages = pacticipant_service.messages_for_potential_duplicate_pacticipants pacticipant_names, base_url
|
9
|
+
if messages.any?
|
10
|
+
response.body = messages.join("\n")
|
11
|
+
response.headers['Content-Type'] = 'text/plain'
|
12
|
+
end
|
13
|
+
messages.any?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,28 +1,63 @@
|
|
1
1
|
require 'pact_broker/api/resources/base_resource'
|
2
|
+
require 'pact_broker/api/decorators/pacticipant_decorator'
|
3
|
+
require 'pact_broker/models/pacticipant'
|
2
4
|
|
3
|
-
module PactBroker
|
5
|
+
module PactBroker
|
6
|
+
module Api
|
7
|
+
module Resources
|
4
8
|
|
5
|
-
|
9
|
+
class Pacticipants < BaseResource
|
6
10
|
|
7
|
-
|
11
|
+
def content_types_provided
|
12
|
+
[["application/hal+json", :to_json]]
|
13
|
+
end
|
8
14
|
|
9
|
-
|
10
|
-
|
11
|
-
|
15
|
+
def content_types_accepted
|
16
|
+
[["application/json", :from_json]]
|
17
|
+
end
|
12
18
|
|
13
|
-
|
14
|
-
|
15
|
-
|
19
|
+
def allowed_methods
|
20
|
+
["GET", "POST"]
|
21
|
+
end
|
16
22
|
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
def malformed_request?
|
24
|
+
if request.post?
|
25
|
+
return invalid_json? || validation_errors?(new_model)
|
26
|
+
end
|
27
|
+
false
|
28
|
+
end
|
20
29
|
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
def post_is_create?
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
def from_json
|
35
|
+
created_model = pacticipant_service.create params
|
36
|
+
response.body = decorator_for(created_model).to_json(decorator_context)
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_path
|
40
|
+
"/pacticpants/#{url_encode(params[:name])}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_json
|
44
|
+
generate_json(pacticipant_service.find_all_pacticipants)
|
45
|
+
end
|
24
46
|
|
47
|
+
def generate_json pacticipants
|
48
|
+
PactBroker::Api::Decorators::PacticipantCollectionRepresenter.new(pacticipants).to_json(base_url: base_url)
|
49
|
+
end
|
50
|
+
|
51
|
+
def decorator_for model
|
52
|
+
PactBroker::Api::Decorators::PacticipantRepresenter.new(model)
|
53
|
+
end
|
54
|
+
|
55
|
+
def new_model
|
56
|
+
@new_model ||= decorator_for(PactBroker::Models::Pacticipant.new).from_json(request.body.to_s)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
25
60
|
end
|
26
|
-
end
|
27
61
|
|
28
|
-
end
|
62
|
+
end
|
63
|
+
end
|
@@ -1,29 +1,30 @@
|
|
1
1
|
require 'pact_broker/api/resources/base_resource'
|
2
2
|
require 'pact_broker/api/decorators/relationships_csv_decorator'
|
3
3
|
|
4
|
-
module PactBroker
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Resources
|
5
7
|
|
6
|
-
|
8
|
+
class Relationships < BaseResource
|
7
9
|
|
8
|
-
|
10
|
+
def content_types_provided
|
11
|
+
[["text/csv", :to_csv]]
|
12
|
+
end
|
9
13
|
|
10
|
-
|
11
|
-
|
12
|
-
|
14
|
+
def allowed_methods
|
15
|
+
["GET"]
|
16
|
+
end
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
def to_csv
|
19
|
+
generate_csv(pact_service.find_latest_pacts)
|
20
|
+
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
def generate_csv pacts
|
23
|
+
PactBroker::Api::Decorators::RelationshipsCsvDecorator.new(pacts).to_csv
|
24
|
+
end
|
21
25
|
|
22
|
-
def generate_csv pacts
|
23
|
-
PactBroker::Api::Decorators::RelationshipsCsvDecorator.new(pacts).to_csv
|
24
26
|
end
|
25
|
-
|
26
27
|
end
|
27
|
-
end
|
28
28
|
|
29
|
-
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,44 +1,45 @@
|
|
1
1
|
require 'pact_broker/api/resources/base_resource'
|
2
2
|
|
3
|
-
module PactBroker
|
3
|
+
module PactBroker
|
4
|
+
module Api
|
5
|
+
module Resources
|
4
6
|
|
5
|
-
|
7
|
+
class Tag < BaseResource
|
6
8
|
|
7
|
-
|
9
|
+
def content_types_provided
|
10
|
+
[["application/hal+json", :to_json]]
|
11
|
+
end
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
|
13
|
+
def content_types_accepted
|
14
|
+
[["application/json", :from_json]]
|
15
|
+
end
|
12
16
|
|
13
|
-
|
14
|
-
|
15
|
-
|
17
|
+
def allowed_methods
|
18
|
+
["GET","PUT"]
|
19
|
+
end
|
16
20
|
|
17
|
-
|
18
|
-
|
19
|
-
|
21
|
+
def from_json
|
22
|
+
unless @tag
|
23
|
+
@tag = tag_service.create identifier_from_path
|
24
|
+
response.headers["Location"] = tag_url(base_url, @tag)
|
25
|
+
end
|
26
|
+
response.body = generate_json @tag
|
27
|
+
end
|
20
28
|
|
21
|
-
|
22
|
-
|
23
|
-
@tag = tag_service.create identifier_from_path
|
24
|
-
response.headers["Location"] = tag_url(base_url, @tag)
|
29
|
+
def resource_exists?
|
30
|
+
@tag = tag_service.find identifier_from_path
|
25
31
|
end
|
26
|
-
response.body = generate_json @tag
|
27
|
-
end
|
28
32
|
|
29
|
-
|
30
|
-
|
31
|
-
|
33
|
+
def to_json
|
34
|
+
generate_json(@tag)
|
35
|
+
end
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
|
37
|
+
def generate_json tag
|
38
|
+
PactBroker::Api::Decorators::TagDecorator.new(tag).to_json(base_url: base_url)
|
39
|
+
end
|
36
40
|
|
37
|
-
def generate_json tag
|
38
|
-
PactBroker::Api::Decorators::TagDecorator.new(tag).to_json(base_url: base_url)
|
39
41
|
end
|
40
|
-
|
41
42
|
end
|
42
|
-
end
|
43
43
|
|
44
|
-
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,44 +1,45 @@
|
|
1
1
|
require 'pact_broker/services'
|
2
2
|
require 'pact_broker/api/decorators/webhook_decorator'
|
3
3
|
|
4
|
-
module PactBroker
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Resources
|
5
7
|
|
6
|
-
|
8
|
+
class Webhook < BaseResource
|
7
9
|
|
8
|
-
|
10
|
+
def content_types_provided
|
11
|
+
[["application/hal+json", :to_json]]
|
12
|
+
end
|
9
13
|
|
10
|
-
|
11
|
-
|
12
|
-
|
14
|
+
def allowed_methods
|
15
|
+
["GET", "DELETE"]
|
16
|
+
end
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
def resource_exists?
|
19
|
+
!webhook.nil?
|
20
|
+
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
def to_json
|
23
|
+
Decorators::WebhookDecorator.new(webhook).to_json(base_url: base_url)
|
24
|
+
end
|
21
25
|
|
22
|
-
|
23
|
-
|
24
|
-
|
26
|
+
def delete_resource
|
27
|
+
webhook_service.delete_by_uuid uuid
|
28
|
+
true
|
29
|
+
end
|
25
30
|
|
26
|
-
|
27
|
-
webhook_service.delete_by_uuid uuid
|
28
|
-
true
|
29
|
-
end
|
31
|
+
private
|
30
32
|
|
31
|
-
|
33
|
+
def webhook
|
34
|
+
@webhook ||= webhook_service.find_by_uuid uuid
|
35
|
+
end
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
|
37
|
+
def uuid
|
38
|
+
identifier_from_path[:uuid]
|
39
|
+
end
|
36
40
|
|
37
|
-
def uuid
|
38
|
-
identifier_from_path[:uuid]
|
39
41
|
end
|
40
|
-
|
41
42
|
end
|
42
|
-
end
|
43
43
|
|
44
|
-
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module PactBroker
|
2
|
+
module Api
|
3
|
+
|
4
|
+
module Resources
|
5
|
+
|
6
|
+
module WebhookResourceMethods
|
7
|
+
|
8
|
+
def malformed_webhook_request? webhook
|
9
|
+
begin
|
10
|
+
if (errors = webhook.validate).any?
|
11
|
+
set_json_validation_error_messages errors
|
12
|
+
return true
|
13
|
+
end
|
14
|
+
rescue
|
15
|
+
set_json_error_message 'Invalid JSON'
|
16
|
+
return true
|
17
|
+
end
|
18
|
+
false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,29 +1,30 @@
|
|
1
1
|
require 'pact_broker/services'
|
2
2
|
require 'pact_broker/api/decorators/webhooks_decorator'
|
3
3
|
|
4
|
-
module PactBroker
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Resources
|
5
7
|
|
6
|
-
|
8
|
+
class Webhooks < BaseResource
|
7
9
|
|
8
|
-
|
10
|
+
def content_types_provided
|
11
|
+
[["application/hal+json", :to_json]]
|
12
|
+
end
|
9
13
|
|
10
|
-
|
11
|
-
|
12
|
-
|
14
|
+
def allowed_methods
|
15
|
+
["GET"]
|
16
|
+
end
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
def to_json
|
19
|
+
Decorators::WebhooksDecorator.new(webhooks).to_json(decorator_context(resource_title: "Webhooks"))
|
20
|
+
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
def webhooks
|
23
|
+
webhook_service.find_all
|
24
|
+
end
|
21
25
|
|
22
|
-
def webhooks
|
23
|
-
webhook_service.find_all
|
24
26
|
end
|
25
|
-
|
26
27
|
end
|
27
|
-
end
|
28
28
|
|
29
|
-
end
|
29
|
+
end
|
30
|
+
end
|