pacto 0.3.0.pre → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.rubocop-todo.yml +0 -27
  4. data/.rubocop.yml +9 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +4 -5
  8. data/CONTRIBUTING.md +112 -0
  9. data/Gemfile +5 -0
  10. data/Guardfile +18 -13
  11. data/README.md +157 -101
  12. data/Rakefile +3 -3
  13. data/features/configuration/strict_matchers.feature +97 -0
  14. data/features/evolve/README.md +11 -0
  15. data/features/evolve/existing_services.feature +82 -0
  16. data/features/generate/README.md +5 -0
  17. data/features/generate/generation.feature +28 -0
  18. data/features/steps/pacto_steps.rb +75 -0
  19. data/features/stub/README.md +2 -0
  20. data/features/stub/templates.feature +46 -0
  21. data/features/support/env.rb +11 -5
  22. data/features/validate/README.md +1 -0
  23. data/features/validate/body_only.feature +85 -0
  24. data/features/{journeys/validation.feature → validate/meta_validation.feature} +41 -24
  25. data/features/validate/validation.feature +36 -0
  26. data/lib/pacto.rb +61 -33
  27. data/lib/pacto/contract.rb +18 -15
  28. data/lib/pacto/contract_factory.rb +14 -11
  29. data/lib/pacto/contract_files.rb +17 -0
  30. data/lib/pacto/contract_list.rb +17 -0
  31. data/lib/pacto/contract_validator.rb +29 -0
  32. data/lib/pacto/core/configuration.rb +19 -17
  33. data/lib/pacto/core/contract_registry.rb +43 -0
  34. data/lib/pacto/core/{callback.rb → hook.rb} +3 -3
  35. data/lib/pacto/core/modes.rb +33 -0
  36. data/lib/pacto/core/validation_registry.rb +45 -0
  37. data/lib/pacto/erb_processor.rb +0 -1
  38. data/lib/pacto/extensions.rb +18 -4
  39. data/lib/pacto/generator.rb +34 -49
  40. data/lib/pacto/generator/filters.rb +41 -0
  41. data/lib/pacto/hooks/erb_hook.rb +4 -3
  42. data/lib/pacto/logger.rb +4 -2
  43. data/lib/pacto/meta_schema.rb +4 -2
  44. data/lib/pacto/rake_task.rb +28 -25
  45. data/lib/pacto/request_clause.rb +43 -0
  46. data/lib/pacto/request_pattern.rb +8 -0
  47. data/lib/pacto/response_clause.rb +15 -0
  48. data/lib/pacto/rspec.rb +102 -0
  49. data/lib/pacto/stubs/uri_pattern.rb +23 -0
  50. data/lib/pacto/stubs/webmock_adapter.rb +69 -0
  51. data/lib/pacto/stubs/webmock_helper.rb +71 -0
  52. data/lib/pacto/ui.rb +7 -0
  53. data/lib/pacto/uri.rb +9 -0
  54. data/lib/pacto/validation.rb +57 -0
  55. data/lib/pacto/validators/body_validator.rb +41 -0
  56. data/lib/pacto/validators/request_body_validator.rb +23 -0
  57. data/lib/pacto/validators/response_body_validator.rb +23 -0
  58. data/lib/pacto/validators/response_header_validator.rb +49 -0
  59. data/lib/pacto/validators/response_status_validator.rb +24 -0
  60. data/lib/pacto/version.rb +1 -1
  61. data/pacto.gemspec +33 -29
  62. data/resources/contract_schema.json +8 -176
  63. data/resources/draft-03.json +174 -0
  64. data/spec/integration/data/strict_contract.json +2 -2
  65. data/spec/integration/e2e_spec.rb +22 -31
  66. data/spec/integration/rspec_spec.rb +94 -0
  67. data/spec/integration/templating_spec.rb +9 -12
  68. data/{lib → spec}/pacto/server.rb +0 -0
  69. data/{lib → spec}/pacto/server/dummy.rb +11 -8
  70. data/{lib → spec}/pacto/server/playback_servlet.rb +1 -1
  71. data/spec/spec_helper.rb +2 -0
  72. data/spec/unit/hooks/erb_hook_spec.rb +15 -15
  73. data/spec/unit/pacto/configuration_spec.rb +2 -10
  74. data/spec/unit/pacto/contract_factory_spec.rb +16 -13
  75. data/spec/unit/pacto/contract_files_spec.rb +42 -0
  76. data/spec/unit/pacto/contract_list_spec.rb +35 -0
  77. data/spec/unit/pacto/contract_spec.rb +43 -44
  78. data/spec/unit/pacto/contract_validator_spec.rb +85 -0
  79. data/spec/unit/pacto/core/configuration_spec.rb +4 -11
  80. data/spec/unit/pacto/core/contract_registry_spec.rb +119 -0
  81. data/spec/unit/pacto/core/modes_spec.rb +18 -0
  82. data/spec/unit/pacto/core/validation_registry_spec.rb +76 -0
  83. data/spec/unit/pacto/core/validation_spec.rb +60 -0
  84. data/spec/unit/pacto/extensions_spec.rb +14 -23
  85. data/spec/unit/pacto/generator/filters_spec.rb +99 -0
  86. data/spec/unit/pacto/generator_spec.rb +34 -73
  87. data/spec/unit/pacto/meta_schema_spec.rb +46 -6
  88. data/spec/unit/pacto/pacto_spec.rb +17 -15
  89. data/spec/unit/pacto/{request_spec.rb → request_clause_spec.rb} +32 -44
  90. data/spec/unit/pacto/request_pattern_spec.rb +22 -0
  91. data/spec/unit/pacto/response_clause_spec.rb +54 -0
  92. data/spec/unit/pacto/stubs/uri_pattern_spec.rb +28 -0
  93. data/spec/unit/pacto/stubs/webmock_adapter_spec.rb +205 -0
  94. data/spec/unit/pacto/stubs/webmock_helper_spec.rb +20 -0
  95. data/spec/unit/pacto/uri_spec.rb +20 -0
  96. data/spec/unit/pacto/validators/body_validator_spec.rb +105 -0
  97. data/spec/unit/pacto/validators/response_header_validator_spec.rb +94 -0
  98. data/spec/unit/pacto/validators/response_status_validator_spec.rb +20 -0
  99. metadata +230 -146
  100. data/features/generation/generation.feature +0 -25
  101. data/lib/pacto/core/contract_repository.rb +0 -44
  102. data/lib/pacto/hash_merge_processor.rb +0 -14
  103. data/lib/pacto/request.rb +0 -57
  104. data/lib/pacto/response.rb +0 -63
  105. data/lib/pacto/response_adapter.rb +0 -24
  106. data/lib/pacto/stubs/built_in.rb +0 -57
  107. data/spec/unit/pacto/core/contract_repository_spec.rb +0 -133
  108. data/spec/unit/pacto/hash_merge_processor_spec.rb +0 -20
  109. data/spec/unit/pacto/response_adapter_spec.rb +0 -25
  110. data/spec/unit/pacto/response_spec.rb +0 -201
  111. data/spec/unit/pacto/stubs/built_in_spec.rb +0 -168
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ module Pacto
4
+ describe URI do
5
+ it 'returns the path appended to the host' do
6
+ uri = URI.for('https://localtest.me', '/bla')
7
+ expect(uri.to_s).to eq 'https://localtest.me/bla'
8
+ end
9
+
10
+ it 'uses http as the default scheme for hosts' do
11
+ uri = URI.for('localtest.me', '/bla')
12
+ expect(uri.to_s).to eq 'http://localtest.me/bla'
13
+ end
14
+
15
+ it 'shows query parameters if initialized with params' do
16
+ uri = URI.for('localtest.me', '/bla', 'param1' => 'ble')
17
+ expect(uri.to_s).to eq 'http://localtest.me/bla?param1=ble'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,105 @@
1
+ module Pacto
2
+ module Validators
3
+ describe BodyValidator do
4
+ class MyBodyValidator < BodyValidator
5
+ def self.section_name
6
+ 'my_section'
7
+ end
8
+ end
9
+
10
+ subject(:validator) { MyBodyValidator }
11
+ let(:string_required) { true }
12
+ let(:body) { 'a simple string' }
13
+ let(:fake_interaction) { double(:fake_interaction, body: body) }
14
+
15
+ describe '#validate' do
16
+ context 'when schema is not specified' do
17
+ let(:schema) { nil }
18
+
19
+ it 'gives no errors without validating body' do
20
+ JSON::Validator.should_not_receive(:fully_validate)
21
+ expect(validator.validate(schema, fake_interaction)).to be_empty
22
+ end
23
+ end
24
+
25
+ context 'when the body is a string' do
26
+ # TODO: Apparently a schema has string as keys. Probably we could
27
+ # make convert it into a symbol based key.
28
+ let(:schema) { { 'type' => 'string', 'required' => string_required } }
29
+
30
+ it 'does not validate using JSON Schema' do
31
+ # FIXME: This seems like a design flaw. We're partially reproducing json-schema behavior
32
+ # instead of finding a way to use it.
33
+ JSON::Validator.should_not_receive(:fully_validate)
34
+ validator.validate(schema, fake_interaction)
35
+ end
36
+
37
+ context 'if required' do
38
+ it 'does not return an error when body is a string' do
39
+ expect(validator.validate(schema, fake_interaction)).to be_empty
40
+ end
41
+
42
+ it 'returns an error when body is nil' do
43
+ expect(fake_interaction).to receive(:body).and_return nil
44
+ expect(validator.validate(schema, fake_interaction).size).to eq 1
45
+ end
46
+ end
47
+
48
+ context 'if not required' do
49
+ let(:string_required) { false }
50
+
51
+ it 'does not return an error when body is a string' do
52
+ expect(validator.validate(schema, fake_interaction)).to be_empty
53
+ end
54
+
55
+ it 'does not return an error when body is nil' do
56
+ expect(fake_interaction).to receive(:body).and_return nil
57
+ expect(validator.validate(schema, fake_interaction)).to be_empty
58
+ end
59
+ end
60
+
61
+ context 'if contains pattern' do
62
+ let(:schema) do
63
+ { type: 'string', required: string_required, pattern: 'a.c' }
64
+ end
65
+
66
+ context 'body matches pattern' do
67
+ let(:body) { 'abc' } # This matches the pattern /a.c/
68
+
69
+ it 'does not return an error' do
70
+ expect(validator.validate(schema, fake_interaction)).to be_empty
71
+ end
72
+ end
73
+
74
+ context 'body does not match pattern' do
75
+ let(:body) { 'acb' } # This does not matches the pattern /a.c/
76
+
77
+ it 'returns an error' do
78
+ expect(validator.validate(schema, fake_interaction).size).to eq 1
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ context 'when the body is json' do
85
+ let(:schema) { { type: 'object' } }
86
+
87
+ context 'when body matches' do
88
+ it 'does not return any errors' do
89
+ expect(JSON::Validator).to receive(:fully_validate).and_return([])
90
+ expect(validator.validate(schema, fake_interaction)).to be_empty
91
+ end
92
+ end
93
+
94
+ context 'when body does not match' do
95
+ it 'returns a list of errors' do
96
+ errors = double 'some errors'
97
+ expect(JSON::Validator).to receive(:fully_validate).and_return(errors)
98
+ expect(validator.validate(schema, fake_interaction)).to eq(errors)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,94 @@
1
+ module Pacto
2
+ module Validators
3
+ describe ResponseHeaderValidator do
4
+ subject(:validator) { described_class }
5
+ let(:expected_headers) do
6
+ {
7
+ 'Content-Type' => 'application/json'
8
+ }
9
+ end
10
+ describe '#validate' do
11
+ context 'when headers do not match' do
12
+ let(:actual_headers) { {'Content-Type' => 'text/html'} }
13
+
14
+ it 'indicates the exact mismatches' do
15
+ expect(validator.validate(expected_headers, actual_headers)).
16
+ to eq ['Invalid response header Content-Type: expected "application/json" but received "text/html"']
17
+ end
18
+ end
19
+
20
+ context 'when headers are missing' do
21
+ let(:actual_headers) { {} }
22
+ let(:expected_headers) do
23
+ {
24
+ 'Content-Type' => 'application/json',
25
+ 'My-Cool-Header' => 'Whiskey Pie'
26
+ }
27
+ end
28
+ it 'lists the missing headers' do
29
+ expect(validator.validate(expected_headers, actual_headers)).
30
+ to eq [
31
+ 'Missing expected response header: Content-Type',
32
+ 'Missing expected response header: My-Cool-Header'
33
+ ]
34
+ end
35
+ end
36
+
37
+ context 'when Location Header is expected' do
38
+ before(:each) do
39
+ expected_headers.merge!('Location' => 'http://www.example.com/{foo}/bar')
40
+ end
41
+
42
+ context 'and no Location header is sent' do
43
+ let(:actual_headers) { {'Content-Type' => 'application/json'} }
44
+ it 'returns a header error when no Location header is sent' do
45
+ expect(validator.validate(expected_headers, actual_headers)).to eq ['Missing expected response header: Location']
46
+ end
47
+ end
48
+
49
+ context 'but the Location header does not matches the pattern' do
50
+ let(:actual_headers) do
51
+ {
52
+ 'Content-Type' => 'application/json',
53
+ 'Location' => 'http://www.example.com/foo/bar/baz'
54
+ }
55
+ end
56
+
57
+ it 'returns a validation error' do
58
+ expect(validator.validate(expected_headers, actual_headers)).to eq ["Invalid response header Location: expected URI #{actual_headers['Location']} to match URI Template #{expected_headers['Location']}"]
59
+ end
60
+ end
61
+
62
+ context 'and the Location header matches pattern' do
63
+ let(:actual_headers) do
64
+ {
65
+ 'Content-Type' => 'application/json',
66
+ 'Location' => 'http://www.example.com/foo/bar'
67
+ }
68
+ end
69
+
70
+ it 'validates successfully' do
71
+ expect(validator.validate(expected_headers, actual_headers)).to be_empty
72
+ end
73
+ end
74
+ end
75
+
76
+ context 'when headers are a subset of expected headers' do
77
+ let(:actual_headers) { {'Content-Type' => 'application/json'} }
78
+
79
+ it 'does not return any errors' do
80
+ expect(validator.validate(expected_headers, actual_headers)).to be_empty
81
+ end
82
+ end
83
+
84
+ context 'when headers values match but keys have different case' do
85
+ let(:actual_headers) { {'content-type' => 'application/json'} }
86
+
87
+ it 'does not return any errors' do
88
+ expect(validator.validate(expected_headers, actual_headers)).to be_empty
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,20 @@
1
+ module Pacto
2
+ module Validators
3
+ describe ResponseStatusValidator do
4
+ subject(:validator) { described_class }
5
+ describe '#validate' do
6
+ context 'when status does not match' do
7
+ it 'returns a status error' do
8
+ expect(validator.validate(200, 500)).to eq ['Invalid status: expected 200 but got 500']
9
+ end
10
+ end
11
+
12
+ context 'when the status matches' do
13
+ it 'returns nil' do
14
+ expect(validator.validate(200, 200)).to be_empty
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
metadata CHANGED
@@ -1,450 +1,534 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pacto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.pre
5
- prerelease: 6
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - ThoughtWorks & Abril
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-26 00:00:00.000000000 Z
11
+ date: 2014-02-12 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: webmock
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: '1.17'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: multi_json
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
- - - ! '>='
45
+ - - "~>"
36
46
  - !ruby/object:Gem::Version
37
- version: '0'
47
+ version: '1.8'
38
48
  type: :runtime
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
- - - ! '>='
52
+ - - "~>"
44
53
  - !ruby/object:Gem::Version
45
- version: '0'
54
+ version: '1.8'
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: json-schema
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ~>
59
+ - - "~>"
52
60
  - !ruby/object:Gem::Version
53
61
  version: '2.0'
54
62
  type: :runtime
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ~>
66
+ - - "~>"
60
67
  - !ruby/object:Gem::Version
61
68
  version: '2.0'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: json-generator
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - ">="
68
74
  - !ruby/object:Gem::Version
69
- version: '0'
75
+ version: 0.0.5
70
76
  type: :runtime
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - ">="
76
81
  - !ruby/object:Gem::Version
77
- version: '0'
82
+ version: 0.0.5
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: hash-deep-merge
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - "~>"
84
88
  - !ruby/object:Gem::Version
85
- version: '0'
89
+ version: '0.1'
86
90
  type: :runtime
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ! '>='
94
+ - - "~>"
92
95
  - !ruby/object:Gem::Version
93
- version: '0'
96
+ version: '0.1'
94
97
  - !ruby/object:Gem::Dependency
95
- name: httparty
98
+ name: faraday
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ! '>='
101
+ - - "~>"
100
102
  - !ruby/object:Gem::Version
101
- version: '0'
103
+ version: '0.9'
102
104
  type: :runtime
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - "~>"
108
109
  - !ruby/object:Gem::Version
109
- version: '0'
110
+ version: '0.9'
110
111
  - !ruby/object:Gem::Dependency
111
112
  name: addressable
112
113
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
114
  requirements:
115
- - - ! '>='
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '2.3'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
121
  requirements:
123
- - - ! '>='
122
+ - - "~>"
124
123
  - !ruby/object:Gem::Version
125
- version: '0'
124
+ version: '2.3'
126
125
  - !ruby/object:Gem::Dependency
127
- name: coveralls
126
+ name: json-schema-generator
128
127
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
128
  requirements:
131
- - - ! '>='
129
+ - - ">="
132
130
  - !ruby/object:Gem::Version
133
- version: '0'
131
+ version: 0.0.7
134
132
  type: :runtime
135
133
  prerelease: false
136
134
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
135
  requirements:
139
- - - ! '>='
136
+ - - ">="
140
137
  - !ruby/object:Gem::Version
141
- version: '0'
138
+ version: 0.0.7
142
139
  - !ruby/object:Gem::Dependency
143
- name: json-schema-generator
140
+ name: term-ansicolor
144
141
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
142
  requirements:
147
- - - ! '>='
143
+ - - "~>"
148
144
  - !ruby/object:Gem::Version
149
- version: '0'
145
+ version: '1.3'
150
146
  type: :runtime
151
147
  prerelease: false
152
148
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
149
  requirements:
155
- - - ! '>='
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: coveralls
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
156
165
  - !ruby/object:Gem::Version
157
166
  version: '0'
158
167
  - !ruby/object:Gem::Dependency
159
168
  name: rake
160
169
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
170
  requirements:
163
- - - ! '>='
171
+ - - ">="
164
172
  - !ruby/object:Gem::Version
165
173
  version: '0'
166
174
  type: :development
167
175
  prerelease: false
168
176
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
177
  requirements:
171
- - - ! '>='
178
+ - - ">="
172
179
  - !ruby/object:Gem::Version
173
180
  version: '0'
174
181
  - !ruby/object:Gem::Dependency
175
- name: rspec
182
+ name: rake-notes
176
183
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
184
  requirements:
179
- - - ! '>='
185
+ - - ">="
180
186
  - !ruby/object:Gem::Version
181
187
  version: '0'
182
188
  type: :development
183
189
  prerelease: false
184
190
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
191
  requirements:
187
- - - ! '>='
192
+ - - ">="
188
193
  - !ruby/object:Gem::Version
189
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rspec
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '2.14'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '2.14'
190
209
  - !ruby/object:Gem::Dependency
191
210
  name: should_not
192
211
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
212
  requirements:
195
- - - ! '>='
213
+ - - ">="
196
214
  - !ruby/object:Gem::Version
197
215
  version: '0'
198
216
  type: :development
199
217
  prerelease: false
200
218
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
219
  requirements:
203
- - - ! '>='
220
+ - - ">="
204
221
  - !ruby/object:Gem::Version
205
222
  version: '0'
206
223
  - !ruby/object:Gem::Dependency
207
224
  name: aruba
208
225
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
226
  requirements:
211
- - - ! '>='
227
+ - - ">="
212
228
  - !ruby/object:Gem::Version
213
229
  version: '0'
214
230
  type: :development
215
231
  prerelease: false
216
232
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
233
  requirements:
219
- - - ! '>='
234
+ - - ">="
220
235
  - !ruby/object:Gem::Version
221
236
  version: '0'
222
237
  - !ruby/object:Gem::Dependency
223
- name: guard-rspec
238
+ name: relish
224
239
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
240
  requirements:
227
- - - ! '>='
241
+ - - ">="
228
242
  - !ruby/object:Gem::Version
229
243
  version: '0'
230
244
  type: :development
231
245
  prerelease: false
232
246
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
247
  requirements:
235
- - - ! '>='
248
+ - - ">="
236
249
  - !ruby/object:Gem::Version
237
250
  version: '0'
238
251
  - !ruby/object:Gem::Dependency
239
- name: rubocop
252
+ name: guard-rspec
240
253
  requirement: !ruby/object:Gem::Requirement
241
- none: false
242
254
  requirements:
243
- - - ! '>='
255
+ - - ">="
244
256
  - !ruby/object:Gem::Version
245
257
  version: '0'
246
258
  type: :development
247
259
  prerelease: false
248
260
  version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
261
  requirements:
251
- - - ! '>='
262
+ - - ">="
252
263
  - !ruby/object:Gem::Version
253
264
  version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: rubocop
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: 0.16.0
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: 0.16.0
254
279
  - !ruby/object:Gem::Dependency
255
280
  name: guard-rubocop
256
281
  requirement: !ruby/object:Gem::Requirement
257
- none: false
258
282
  requirements:
259
- - - ! '>='
283
+ - - ">="
260
284
  - !ruby/object:Gem::Version
261
285
  version: '0'
262
286
  type: :development
263
287
  prerelease: false
264
288
  version_requirements: !ruby/object:Gem::Requirement
265
- none: false
266
289
  requirements:
267
- - - ! '>='
290
+ - - ">="
268
291
  - !ruby/object:Gem::Version
269
292
  version: '0'
270
293
  - !ruby/object:Gem::Dependency
271
294
  name: guard-cucumber
272
295
  requirement: !ruby/object:Gem::Requirement
273
- none: false
274
296
  requirements:
275
- - - ! '>='
297
+ - - ">="
276
298
  - !ruby/object:Gem::Version
277
299
  version: '0'
278
300
  type: :development
279
301
  prerelease: false
280
302
  version_requirements: !ruby/object:Gem::Requirement
281
- none: false
282
303
  requirements:
283
- - - ! '>='
304
+ - - ">="
284
305
  - !ruby/object:Gem::Version
285
306
  version: '0'
286
307
  - !ruby/object:Gem::Dependency
287
308
  name: rb-fsevent
288
309
  requirement: !ruby/object:Gem::Requirement
289
- none: false
290
310
  requirements:
291
- - - ! '>='
311
+ - - ">="
292
312
  - !ruby/object:Gem::Version
293
313
  version: '0'
294
314
  type: :development
295
315
  prerelease: false
296
316
  version_requirements: !ruby/object:Gem::Requirement
297
- none: false
298
317
  requirements:
299
- - - ! '>='
318
+ - - ">="
300
319
  - !ruby/object:Gem::Version
301
320
  version: '0'
302
321
  - !ruby/object:Gem::Dependency
303
322
  name: terminal-notifier-guard
304
323
  requirement: !ruby/object:Gem::Requirement
305
- none: false
306
324
  requirements:
307
- - - ! '>='
325
+ - - ">="
308
326
  - !ruby/object:Gem::Version
309
327
  version: '0'
310
328
  type: :development
311
329
  prerelease: false
312
330
  version_requirements: !ruby/object:Gem::Requirement
313
- none: false
314
331
  requirements:
315
- - - ! '>='
332
+ - - ">="
316
333
  - !ruby/object:Gem::Version
317
334
  version: '0'
318
- description: Pacto is a Ruby implementation of the [Consumer-Driven Contracts](http://martinfowler.com/articles/consumerDrivenContracts.html)
319
- pattern for evolving services
335
+ description: Pacto is a judge that arbitrates contract disputes between a service
336
+ provider and one or more consumers. In other words, it is a framework for Integration
337
+ Contract Testing, and helps guide service evolution patterns like Consumer-Driven
338
+ Contracts or Documentation-Driven Contracts.
320
339
  email:
321
- - abril_vejasp_dev@thoughtworks.com
340
+ - pacto-gem@googlegroups.com
322
341
  executables: []
323
342
  extensions: []
324
343
  extra_rdoc_files: []
325
344
  files:
326
- - .gitignore
327
- - .rspec
328
- - .rubocop-todo.yml
329
- - .rubocop.yml
330
- - .travis.yml
345
+ - ".gitignore"
346
+ - ".rspec"
347
+ - ".rubocop-todo.yml"
348
+ - ".rubocop.yml"
349
+ - ".ruby-gemset"
350
+ - ".ruby-version"
351
+ - ".travis.yml"
352
+ - CONTRIBUTING.md
331
353
  - Gemfile
332
354
  - Guardfile
333
355
  - LICENSE.txt
334
356
  - README.md
335
357
  - Rakefile
336
358
  - TODO.md
337
- - features/generation/generation.feature
338
- - features/journeys/validation.feature
359
+ - features/configuration/strict_matchers.feature
360
+ - features/evolve/README.md
361
+ - features/evolve/existing_services.feature
362
+ - features/generate/README.md
363
+ - features/generate/generation.feature
364
+ - features/steps/pacto_steps.rb
365
+ - features/stub/README.md
366
+ - features/stub/templates.feature
339
367
  - features/support/env.rb
368
+ - features/validate/README.md
369
+ - features/validate/body_only.feature
370
+ - features/validate/meta_validation.feature
371
+ - features/validate/validation.feature
340
372
  - lib/pacto.rb
341
373
  - lib/pacto/contract.rb
342
374
  - lib/pacto/contract_factory.rb
343
- - lib/pacto/core/callback.rb
375
+ - lib/pacto/contract_files.rb
376
+ - lib/pacto/contract_list.rb
377
+ - lib/pacto/contract_validator.rb
344
378
  - lib/pacto/core/configuration.rb
345
- - lib/pacto/core/contract_repository.rb
379
+ - lib/pacto/core/contract_registry.rb
380
+ - lib/pacto/core/hook.rb
381
+ - lib/pacto/core/modes.rb
382
+ - lib/pacto/core/validation_registry.rb
346
383
  - lib/pacto/erb_processor.rb
347
384
  - lib/pacto/exceptions/invalid_contract.rb
348
385
  - lib/pacto/extensions.rb
349
386
  - lib/pacto/generator.rb
350
- - lib/pacto/hash_merge_processor.rb
387
+ - lib/pacto/generator/filters.rb
351
388
  - lib/pacto/hooks/erb_hook.rb
352
389
  - lib/pacto/logger.rb
353
390
  - lib/pacto/meta_schema.rb
354
391
  - lib/pacto/rake_task.rb
355
- - lib/pacto/request.rb
356
- - lib/pacto/response.rb
357
- - lib/pacto/response_adapter.rb
358
- - lib/pacto/server.rb
359
- - lib/pacto/server/dummy.rb
360
- - lib/pacto/server/playback_servlet.rb
361
- - lib/pacto/stubs/built_in.rb
392
+ - lib/pacto/request_clause.rb
393
+ - lib/pacto/request_pattern.rb
394
+ - lib/pacto/response_clause.rb
395
+ - lib/pacto/rspec.rb
396
+ - lib/pacto/stubs/uri_pattern.rb
397
+ - lib/pacto/stubs/webmock_adapter.rb
398
+ - lib/pacto/stubs/webmock_helper.rb
399
+ - lib/pacto/ui.rb
400
+ - lib/pacto/uri.rb
401
+ - lib/pacto/validation.rb
402
+ - lib/pacto/validators/body_validator.rb
403
+ - lib/pacto/validators/request_body_validator.rb
404
+ - lib/pacto/validators/response_body_validator.rb
405
+ - lib/pacto/validators/response_header_validator.rb
406
+ - lib/pacto/validators/response_status_validator.rb
362
407
  - lib/pacto/version.rb
363
408
  - pacto.gemspec
364
409
  - resources/contract_schema.json
410
+ - resources/draft-03.json
365
411
  - spec/coveralls_helper.rb
366
412
  - spec/integration/data/simple_contract.json
367
413
  - spec/integration/data/strict_contract.json
368
414
  - spec/integration/data/templating_contract.json
369
415
  - spec/integration/e2e_spec.rb
416
+ - spec/integration/rspec_spec.rb
370
417
  - spec/integration/templating_spec.rb
418
+ - spec/pacto/server.rb
419
+ - spec/pacto/server/dummy.rb
420
+ - spec/pacto/server/playback_servlet.rb
371
421
  - spec/spec_helper.rb
372
422
  - spec/unit/data/contract.json
373
423
  - spec/unit/data/simple_contract.json
374
424
  - spec/unit/hooks/erb_hook_spec.rb
375
425
  - spec/unit/pacto/configuration_spec.rb
376
426
  - spec/unit/pacto/contract_factory_spec.rb
427
+ - spec/unit/pacto/contract_files_spec.rb
428
+ - spec/unit/pacto/contract_list_spec.rb
377
429
  - spec/unit/pacto/contract_spec.rb
430
+ - spec/unit/pacto/contract_validator_spec.rb
378
431
  - spec/unit/pacto/core/configuration_spec.rb
379
- - spec/unit/pacto/core/contract_repository_spec.rb
432
+ - spec/unit/pacto/core/contract_registry_spec.rb
433
+ - spec/unit/pacto/core/modes_spec.rb
434
+ - spec/unit/pacto/core/validation_registry_spec.rb
435
+ - spec/unit/pacto/core/validation_spec.rb
380
436
  - spec/unit/pacto/erb_processor_spec.rb
381
437
  - spec/unit/pacto/extensions_spec.rb
438
+ - spec/unit/pacto/generator/filters_spec.rb
382
439
  - spec/unit/pacto/generator_spec.rb
383
- - spec/unit/pacto/hash_merge_processor_spec.rb
384
440
  - spec/unit/pacto/logger_spec.rb
385
441
  - spec/unit/pacto/meta_schema_spec.rb
386
442
  - spec/unit/pacto/pacto_spec.rb
387
- - spec/unit/pacto/request_spec.rb
388
- - spec/unit/pacto/response_adapter_spec.rb
389
- - spec/unit/pacto/response_spec.rb
443
+ - spec/unit/pacto/request_clause_spec.rb
444
+ - spec/unit/pacto/request_pattern_spec.rb
445
+ - spec/unit/pacto/response_clause_spec.rb
390
446
  - spec/unit/pacto/server/playback_servlet_spec.rb
391
- - spec/unit/pacto/stubs/built_in_spec.rb
392
- homepage: https://github.com/thoughtworks/pacto
447
+ - spec/unit/pacto/stubs/uri_pattern_spec.rb
448
+ - spec/unit/pacto/stubs/webmock_adapter_spec.rb
449
+ - spec/unit/pacto/stubs/webmock_helper_spec.rb
450
+ - spec/unit/pacto/uri_spec.rb
451
+ - spec/unit/pacto/validators/body_validator_spec.rb
452
+ - spec/unit/pacto/validators/response_header_validator_spec.rb
453
+ - spec/unit/pacto/validators/response_status_validator_spec.rb
454
+ homepage: http://thoughtworks.github.io/pacto/
393
455
  licenses:
394
456
  - MIT
457
+ metadata: {}
395
458
  post_install_message:
396
459
  rdoc_options: []
397
460
  require_paths:
398
461
  - lib
399
462
  required_ruby_version: !ruby/object:Gem::Requirement
400
- none: false
401
463
  requirements:
402
- - - ! '>='
464
+ - - ">="
403
465
  - !ruby/object:Gem::Version
404
466
  version: '0'
405
- segments:
406
- - 0
407
- hash: -1773890357225402507
408
467
  required_rubygems_version: !ruby/object:Gem::Requirement
409
- none: false
410
468
  requirements:
411
- - - ! '>'
469
+ - - ">="
412
470
  - !ruby/object:Gem::Version
413
- version: 1.3.1
471
+ version: '0'
414
472
  requirements: []
415
473
  rubyforge_project:
416
- rubygems_version: 1.8.25
474
+ rubygems_version: 2.2.0
417
475
  signing_key:
418
- specification_version: 3
419
- summary: Consumer-Driven Contracts implementation
476
+ specification_version: 4
477
+ summary: Integration Contract Testing framework
420
478
  test_files:
421
- - features/generation/generation.feature
422
- - features/journeys/validation.feature
479
+ - features/configuration/strict_matchers.feature
480
+ - features/evolve/README.md
481
+ - features/evolve/existing_services.feature
482
+ - features/generate/README.md
483
+ - features/generate/generation.feature
484
+ - features/steps/pacto_steps.rb
485
+ - features/stub/README.md
486
+ - features/stub/templates.feature
423
487
  - features/support/env.rb
488
+ - features/validate/README.md
489
+ - features/validate/body_only.feature
490
+ - features/validate/meta_validation.feature
491
+ - features/validate/validation.feature
424
492
  - spec/coveralls_helper.rb
425
493
  - spec/integration/data/simple_contract.json
426
494
  - spec/integration/data/strict_contract.json
427
495
  - spec/integration/data/templating_contract.json
428
496
  - spec/integration/e2e_spec.rb
497
+ - spec/integration/rspec_spec.rb
429
498
  - spec/integration/templating_spec.rb
499
+ - spec/pacto/server.rb
500
+ - spec/pacto/server/dummy.rb
501
+ - spec/pacto/server/playback_servlet.rb
430
502
  - spec/spec_helper.rb
431
503
  - spec/unit/data/contract.json
432
504
  - spec/unit/data/simple_contract.json
433
505
  - spec/unit/hooks/erb_hook_spec.rb
434
506
  - spec/unit/pacto/configuration_spec.rb
435
507
  - spec/unit/pacto/contract_factory_spec.rb
508
+ - spec/unit/pacto/contract_files_spec.rb
509
+ - spec/unit/pacto/contract_list_spec.rb
436
510
  - spec/unit/pacto/contract_spec.rb
511
+ - spec/unit/pacto/contract_validator_spec.rb
437
512
  - spec/unit/pacto/core/configuration_spec.rb
438
- - spec/unit/pacto/core/contract_repository_spec.rb
513
+ - spec/unit/pacto/core/contract_registry_spec.rb
514
+ - spec/unit/pacto/core/modes_spec.rb
515
+ - spec/unit/pacto/core/validation_registry_spec.rb
516
+ - spec/unit/pacto/core/validation_spec.rb
439
517
  - spec/unit/pacto/erb_processor_spec.rb
440
518
  - spec/unit/pacto/extensions_spec.rb
519
+ - spec/unit/pacto/generator/filters_spec.rb
441
520
  - spec/unit/pacto/generator_spec.rb
442
- - spec/unit/pacto/hash_merge_processor_spec.rb
443
521
  - spec/unit/pacto/logger_spec.rb
444
522
  - spec/unit/pacto/meta_schema_spec.rb
445
523
  - spec/unit/pacto/pacto_spec.rb
446
- - spec/unit/pacto/request_spec.rb
447
- - spec/unit/pacto/response_adapter_spec.rb
448
- - spec/unit/pacto/response_spec.rb
524
+ - spec/unit/pacto/request_clause_spec.rb
525
+ - spec/unit/pacto/request_pattern_spec.rb
526
+ - spec/unit/pacto/response_clause_spec.rb
449
527
  - spec/unit/pacto/server/playback_servlet_spec.rb
450
- - spec/unit/pacto/stubs/built_in_spec.rb
528
+ - spec/unit/pacto/stubs/uri_pattern_spec.rb
529
+ - spec/unit/pacto/stubs/webmock_adapter_spec.rb
530
+ - spec/unit/pacto/stubs/webmock_helper_spec.rb
531
+ - spec/unit/pacto/uri_spec.rb
532
+ - spec/unit/pacto/validators/body_validator_spec.rb
533
+ - spec/unit/pacto/validators/response_header_validator_spec.rb
534
+ - spec/unit/pacto/validators/response_status_validator_spec.rb