fitting 2.18.1 → 3.0.1

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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -11
  3. data/CHANGELOG.md +21 -0
  4. data/README.md +46 -6
  5. data/fitting.gemspec +3 -1
  6. data/lib/fitting/configuration.rb +11 -41
  7. data/lib/fitting/cover/json_schema.rb +4 -2
  8. data/lib/fitting/cover/json_schema_enum.rb +4 -2
  9. data/lib/fitting/cover/json_schema_one_of.rb +4 -2
  10. data/lib/fitting/railtie.rb +1 -0
  11. data/lib/fitting/records/documented/request.rb +1 -15
  12. data/lib/fitting/records/spherical/requests.rb +1 -1
  13. data/lib/fitting/records/tested/request.rb +11 -11
  14. data/lib/fitting/records/tested/response.rb +4 -4
  15. data/lib/fitting/report/actions.rb +4 -0
  16. data/lib/fitting/report/console.rb +32 -12
  17. data/lib/fitting/report/prefix.rb +20 -41
  18. data/lib/fitting/report/prefixes.rb +7 -8
  19. data/lib/fitting/report/response.rb +0 -3
  20. data/lib/fitting/report/tests.rb +23 -10
  21. data/lib/fitting/storage/responses.rb +5 -9
  22. data/lib/fitting/tests.rb +12 -4
  23. data/lib/fitting/version.rb +1 -1
  24. data/lib/fitting.rb +38 -43
  25. data/lib/tasks/fitting.rake +3 -186
  26. data/lib/tasks/fitting_outgoing.rake +91 -0
  27. metadata +28 -45
  28. data/lib/fitting/configuration/legacy.rb +0 -61
  29. data/lib/fitting/configuration/yaml.rb +0 -89
  30. data/lib/fitting/cover/response.rb +0 -37
  31. data/lib/fitting/documentation.rb +0 -56
  32. data/lib/fitting/matchers/response_matcher.rb +0 -96
  33. data/lib/fitting/records/realized_unit.rb +0 -52
  34. data/lib/fitting/records/test_unit/request.rb +0 -98
  35. data/lib/fitting/records/unit/combination.rb +0 -27
  36. data/lib/fitting/records/unit/json_schema.rb +0 -111
  37. data/lib/fitting/records/unit/request.rb +0 -37
  38. data/lib/fitting/records/unit/response.rb +0 -32
  39. data/lib/fitting/request.rb +0 -38
  40. data/lib/fitting/response/fully_validates.rb +0 -34
  41. data/lib/fitting/response.rb +0 -88
  42. data/lib/fitting/statistics/analysis.rb +0 -25
  43. data/lib/fitting/statistics/cover_error.rb +0 -29
  44. data/lib/fitting/statistics/cover_error_enum.rb +0 -29
  45. data/lib/fitting/statistics/cover_error_one_of.rb +0 -29
  46. data/lib/fitting/statistics/great.rb +0 -13
  47. data/lib/fitting/statistics/list.rb +0 -55
  48. data/lib/fitting/statistics/lists.rb +0 -53
  49. data/lib/fitting/statistics/measurement.rb +0 -92
  50. data/lib/fitting/statistics/measurement_cover.rb +0 -92
  51. data/lib/fitting/statistics/measurement_cover_enum.rb +0 -92
  52. data/lib/fitting/statistics/measurement_cover_one_of.rb +0 -92
  53. data/lib/fitting/statistics/not_covered_responses.rb +0 -13
  54. data/lib/fitting/statistics/percent.rb +0 -20
  55. data/lib/fitting/statistics/requests_stats.rb +0 -40
  56. data/lib/fitting/statistics/responses_stats.rb +0 -32
  57. data/lib/fitting/statistics/template.rb +0 -117
  58. data/lib/fitting/statistics/template_cover_error.rb +0 -50
  59. data/lib/fitting/statistics/template_cover_error_enum.rb +0 -50
  60. data/lib/fitting/statistics/template_cover_error_one_of.rb +0 -50
  61. data/lib/fitting/statistics.rb +0 -25
  62. data/lib/fitting/storage/white_list.rb +0 -158
  63. data/lib/fitting/templates/realized_template.rb +0 -49
  64. data/lib/fitting/view/report.html.haml +0 -16
  65. data/lib/fitting/view/style.css +0 -47
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fitting
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.18.1
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - d.efimov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-12 00:00:00.000000000 Z
11
+ date: 2021-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema
@@ -30,6 +30,26 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 2.6.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: terminal-table
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.0.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.0.2
33
53
  - !ruby/object:Gem::Dependency
34
54
  name: tomograph
35
55
  requirement: !ruby/object:Gem::Requirement
@@ -122,14 +142,14 @@ dependencies:
122
142
  name: rubocop
123
143
  requirement: !ruby/object:Gem::Requirement
124
144
  requirements:
125
- - - "~>"
145
+ - - ">="
126
146
  - !ruby/object:Gem::Version
127
147
  version: 1.22.0
128
148
  type: :development
129
149
  prerelease: false
130
150
  version_requirements: !ruby/object:Gem::Requirement
131
151
  requirements:
132
- - - "~>"
152
+ - - ">="
133
153
  - !ruby/object:Gem::Version
134
154
  version: 1.22.0
135
155
  - !ruby/object:Gem::Dependency
@@ -173,27 +193,16 @@ files:
173
193
  - images/logo.png
174
194
  - lib/fitting.rb
175
195
  - lib/fitting/configuration.rb
176
- - lib/fitting/configuration/legacy.rb
177
- - lib/fitting/configuration/yaml.rb
178
196
  - lib/fitting/cover/json_schema.rb
179
197
  - lib/fitting/cover/json_schema_enum.rb
180
198
  - lib/fitting/cover/json_schema_one_of.rb
181
- - lib/fitting/cover/response.rb
182
- - lib/fitting/documentation.rb
183
- - lib/fitting/matchers/response_matcher.rb
184
199
  - lib/fitting/railtie.rb
185
200
  - lib/fitting/records/documented/request.rb
186
- - lib/fitting/records/realized_unit.rb
187
201
  - lib/fitting/records/spherical/request.rb
188
202
  - lib/fitting/records/spherical/requests.rb
189
203
  - lib/fitting/records/spherical/response.rb
190
- - lib/fitting/records/test_unit/request.rb
191
204
  - lib/fitting/records/tested/request.rb
192
205
  - lib/fitting/records/tested/response.rb
193
- - lib/fitting/records/unit/combination.rb
194
- - lib/fitting/records/unit/json_schema.rb
195
- - lib/fitting/records/unit/request.rb
196
- - lib/fitting/records/unit/response.rb
197
206
  - lib/fitting/report/action.rb
198
207
  - lib/fitting/report/actions.rb
199
208
  - lib/fitting/report/combination.rb
@@ -205,37 +214,11 @@ files:
205
214
  - lib/fitting/report/responses.rb
206
215
  - lib/fitting/report/test.rb
207
216
  - lib/fitting/report/tests.rb
208
- - lib/fitting/request.rb
209
- - lib/fitting/response.rb
210
- - lib/fitting/response/fully_validates.rb
211
- - lib/fitting/statistics.rb
212
- - lib/fitting/statistics/analysis.rb
213
- - lib/fitting/statistics/cover_error.rb
214
- - lib/fitting/statistics/cover_error_enum.rb
215
- - lib/fitting/statistics/cover_error_one_of.rb
216
- - lib/fitting/statistics/great.rb
217
- - lib/fitting/statistics/list.rb
218
- - lib/fitting/statistics/lists.rb
219
- - lib/fitting/statistics/measurement.rb
220
- - lib/fitting/statistics/measurement_cover.rb
221
- - lib/fitting/statistics/measurement_cover_enum.rb
222
- - lib/fitting/statistics/measurement_cover_one_of.rb
223
- - lib/fitting/statistics/not_covered_responses.rb
224
- - lib/fitting/statistics/percent.rb
225
- - lib/fitting/statistics/requests_stats.rb
226
- - lib/fitting/statistics/responses_stats.rb
227
- - lib/fitting/statistics/template.rb
228
- - lib/fitting/statistics/template_cover_error.rb
229
- - lib/fitting/statistics/template_cover_error_enum.rb
230
- - lib/fitting/statistics/template_cover_error_one_of.rb
231
217
  - lib/fitting/storage/responses.rb
232
- - lib/fitting/storage/white_list.rb
233
- - lib/fitting/templates/realized_template.rb
234
218
  - lib/fitting/tests.rb
235
219
  - lib/fitting/version.rb
236
- - lib/fitting/view/report.html.haml
237
- - lib/fitting/view/style.css
238
220
  - lib/tasks/fitting.rake
221
+ - lib/tasks/fitting_outgoing.rake
239
222
  - lib/templates/bomboniere/.gitignore
240
223
  - lib/templates/bomboniere/.tool-versions
241
224
  - lib/templates/bomboniere/README.md
@@ -264,7 +247,7 @@ homepage: https://github.com/funbox/fitting
264
247
  licenses:
265
248
  - MIT
266
249
  metadata: {}
267
- post_install_message:
250
+ post_install_message:
268
251
  rdoc_options: []
269
252
  require_paths:
270
253
  - lib
@@ -280,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
263
  version: '0'
281
264
  requirements: []
282
265
  rubygems_version: 3.0.1
283
- signing_key:
266
+ signing_key:
284
267
  specification_version: 4
285
268
  summary: Coverage API Blueprint, Swagger and OpenAPI with RSpec
286
269
  test_files: []
@@ -1,61 +0,0 @@
1
- require 'tomograph'
2
-
3
- module Fitting
4
- class Configuration
5
- class Legacy
6
- attr_accessor :apib_path,
7
- :drafter_yaml_path,
8
- :crafter_apib_path,
9
- :crafter_yaml_path,
10
- :drafter_4_apib_path,
11
- :drafter_4_yaml_path,
12
- :strict,
13
- :prefix,
14
- :white_list,
15
- :resource_white_list,
16
- :ignore_list,
17
- :include_resources,
18
- :include_actions
19
-
20
- def initialize
21
- @strict = false
22
- @prefix = ''
23
- @ignore_list = []
24
- end
25
-
26
- def tomogram
27
- @tomogram ||= if @crafter_apib_path || @crafter_yaml_path
28
- Tomograph::Tomogram.new(
29
- prefix: @prefix,
30
- crafter_apib_path: @crafter_apib_path,
31
- crafter_yaml_path: @crafter_yaml_path
32
- )
33
- elsif @drafter_4_apib_path || @drafter_4_yaml_path
34
- Tomograph::Tomogram.new(
35
- prefix: @prefix,
36
- drafter_4_apib_path: @drafter_4_apib_path,
37
- drafter_4_yaml_path: @drafter_4_yaml_path
38
- )
39
- else
40
- Tomograph::Tomogram.new(
41
- prefix: @prefix,
42
- apib_path: @apib_path,
43
- drafter_yaml_path: @drafter_yaml_path
44
- )
45
- end
46
- end
47
-
48
- def title
49
- 'fitting'
50
- end
51
-
52
- def stats_path
53
- 'fitting/stats'
54
- end
55
-
56
- def not_covered_path
57
- 'fitting/not_covered'
58
- end
59
- end
60
- end
61
- end
@@ -1,89 +0,0 @@
1
- require 'tomograph'
2
-
3
- module Fitting
4
- class Configuration
5
- class Yaml
6
- attr_reader :title
7
- attr_accessor :apib_path,
8
- :drafter_yaml_path,
9
- :crafter_apib_path,
10
- :crafter_yaml_path,
11
- :drafter_4_apib_path,
12
- :drafter_4_yaml_path,
13
- :tomogram_json_path,
14
- :strict,
15
- :prefix,
16
- :white_list,
17
- :resource_white_list,
18
- :ignore_list,
19
- :include_resources,
20
- :include_actions
21
-
22
- def initialize(yaml, title = 'fitting')
23
- @apib_path = yaml['apib_path']
24
- @drafter_yaml_path = yaml['drafter_yaml_path']
25
- @crafter_apib_path = yaml['crafter_apib_path']
26
- @crafter_yaml_path = yaml['crafter_yaml_path']
27
- @drafter_4_apib_path = yaml['drafter_4_apib_path']
28
- @drafter_4_yaml_path = yaml['drafter_4_yaml_path']
29
- @tomogram_json_path = yaml['tomogram_json_path']
30
- @strict = yaml['strict']
31
- @prefix = yaml['prefix']
32
- @white_list = yaml['white_list']
33
- @resource_white_list = yaml['resource_white_list']
34
- @ignore_list = yaml['ignore_list']
35
- @include_resources = yaml['include_resources']
36
- @include_actions = yaml['include_actions']
37
- @title = title
38
- default
39
- end
40
-
41
- def tomogram
42
- @tomogram ||= if @crafter_yaml_path || @crafter_apib_path
43
- Tomograph::Tomogram.new(
44
- prefix: @prefix,
45
- crafter_apib_path: @crafter_apib_path,
46
- crafter_yaml_path: @crafter_yaml_path
47
- )
48
- elsif @drafter_4_apib_path || @drafter_4_yaml_path
49
- Tomograph::Tomogram.new(
50
- prefix: @prefix,
51
- drafter_4_apib_path: @drafter_4_apib_path,
52
- drafter_4_yaml_path: @drafter_4_yaml_path
53
- )
54
- else
55
- Tomograph::Tomogram.new(
56
- prefix: @prefix,
57
- apib_path: @apib_path,
58
- drafter_yaml_path: @drafter_yaml_path,
59
- tomogram_json_path: @tomogram_json_path
60
- )
61
- end
62
- end
63
-
64
- def stats_path
65
- if @title == 'fitting'
66
- 'fitting/stats'
67
- else
68
- "fitting/#{@title}/stats"
69
- end
70
- end
71
-
72
- def not_covered_path
73
- if @title == 'fitting'
74
- 'fitting/not_covered'
75
- else
76
- "fitting/#{@title}/not_covered"
77
- end
78
- end
79
-
80
- private
81
-
82
- def default
83
- @strict ||= false if @strict.nil?
84
- @prefix ||= ''
85
- @ignore_list ||= []
86
- end
87
- end
88
- end
89
- end
@@ -1,37 +0,0 @@
1
- require 'fitting/cover/json_schema'
2
- require 'json-schema'
3
-
4
- module Fitting
5
- class Cover
6
- class Response
7
- def initialize(response)
8
- @cover_json_schemas = Fitting::Cover::JSONSchema.new(response.json_schema)
9
- @json_schemas = @cover_json_schemas.json_schemas + [response.json_schema]
10
- @combinations = @cover_json_schemas.combinations
11
- @flags = @cover_json_schemas.json_schemas.map do |json_schema|
12
- JSON::Validator.validate(json_schema, response.body)
13
- end
14
- end
15
-
16
- attr_reader :json_schemas, :combinations, :flags
17
-
18
- def update(response)
19
- index = 0
20
- @cover_json_schemas.json_schemas.map do |json_schema|
21
- flag = JSON::Validator.validate(json_schema, response.body)
22
- @flags[index] = @flags[index] || flag
23
- index += 1
24
- end
25
- self
26
- end
27
-
28
- def to_hash
29
- {
30
- 'json_schemas' => json_schemas,
31
- 'combinations' => combinations,
32
- 'flags' => flags
33
- }
34
- end
35
- end
36
- end
37
- end
@@ -1,56 +0,0 @@
1
- module Fitting
2
- class Documentation
3
- def initialize(tomogram, white_list)
4
- @tomogram = tomogram
5
- @white_list = white_list
6
- end
7
-
8
- def black
9
- if @white_list
10
- all.select do |response|
11
- black?(response)
12
- end
13
- else
14
- []
15
- end
16
- end
17
-
18
- def white
19
- if @white_list
20
- all.select do |response|
21
- white?(response)
22
- end
23
- else
24
- all
25
- end
26
- end
27
-
28
- def all
29
- @all ||= @tomogram.to_hash.each_with_object([]) do |request, routes|
30
- responses(request).map do |status, indexes|
31
- indexes.times do |index|
32
- route = "#{request['method']}\t#{request['path']} #{status} #{index}"
33
- routes.push(route)
34
- end
35
- end
36
- end.uniq
37
- end
38
-
39
- def responses(request)
40
- request['responses'].each_with_object({}) do |response, responses|
41
- responses[response['status']] ||= 0
42
- responses[response['status']] += 1
43
- end
44
- end
45
-
46
- def black?(response)
47
- data = response.split(' ')
48
- data[1] && !@white_list[data[1]] || (@white_list[data[1]] != [] && !@white_list[data[1]].include?(data[0]))
49
- end
50
-
51
- def white?(response)
52
- data = response.split(' ')
53
- data[1] && @white_list[data[1]] && (@white_list[data[1]] == [] || @white_list[data[1]].include?(data[0]))
54
- end
55
- end
56
- end
@@ -1,96 +0,0 @@
1
- require 'fitting/response'
2
- require 'fitting/configuration'
3
-
4
- module Fitting
5
- module Matchers
6
- class Response
7
- def matches?(response)
8
- if Fitting.configuration.is_a?(Array)
9
- Fitting.configuration.all? do |config|
10
- one_match(response, config)
11
- end
12
- else
13
- one_match(response, Fitting.configuration)
14
- end
15
- end
16
-
17
- def ===(other)
18
- matches?(other)
19
- end
20
-
21
- def failure_message
22
- unless @response.documented?
23
- return "response not documented\n"\
24
- "got: #{@response.real_request_with_status}"
25
- end
26
-
27
- return nil if @response.fully_validates.valid?
28
-
29
- "response does not conform to json-schema\n"\
30
- "schemas: \n#{@response.expected}\n\n"\
31
- "got: #{@response.got}\n\n"\
32
- "errors: \n#{@response.fully_validates}\n"
33
- end
34
-
35
- private
36
-
37
- def one_match(response, config)
38
- response = Fitting::Response.new(response, config.tomogram)
39
- if response.within_prefix?(config.prefix)
40
- @response = response
41
- return true if @response.ignored?(config.ignore_list)
42
-
43
- @response.fully_validates.valid?
44
- else
45
- true
46
- end
47
- end
48
- end
49
-
50
- class StrictResponse
51
- def matches?(response)
52
- if Fitting.configuration.is_a?(Array)
53
- one_match(response, Fitting.configuration[0])
54
- else
55
- one_match(response, Fitting.configuration)
56
- end
57
- end
58
-
59
- def ===(other)
60
- matches?(other)
61
- end
62
-
63
- def failure_message
64
- unless @response.documented?
65
- return "response not documented\n"\
66
- "got: #{@response.real_request_with_status}"
67
- end
68
-
69
- return nil if @response.strict_fully_validates.valid?
70
-
71
- "response does not conform to json-schema\n"\
72
- "schemas: \n#{@response.expected}\n\n"\
73
- "got: #{@response.got}\n\n"\
74
- "errors: \n#{@response.strict_fully_validates}\n"
75
- end
76
-
77
- private
78
-
79
- def one_match(response, config)
80
- @response = Fitting::Response.new(
81
- response,
82
- config.tomogram
83
- )
84
- @response.strict_fully_validates.valid?
85
- end
86
- end
87
-
88
- def match_schema
89
- Response.new
90
- end
91
-
92
- def strictly_match_schema
93
- StrictResponse.new
94
- end
95
- end
96
- end
@@ -1,52 +0,0 @@
1
- require 'fitting/records/test_unit/request'
2
-
3
- module Fitting
4
- class Records
5
- class RealizedUnit
6
- def initialize(realized_requests, documented_requests)
7
- @realized_requests = realized_requests
8
- @documented_requests = documented_requests
9
- end
10
-
11
- def fully_covered?
12
- all_good_documented = false
13
- all_good_response_documented = false
14
- all_good_response_json_schemas = false
15
- all_good_valid_json_schemas = false
16
-
17
- test_file_paths.each do |_key, requests|
18
- all_good_documented = requests.all?(&:documented?)
19
- all_good_response_documented = requests.all?(&:response_documented?)
20
- all_good_response_json_schemas = requests.all?(&:response_json_schemas?)
21
- all_good_valid_json_schemas = requests.all?(&:valid_json_schemas?)
22
- end
23
-
24
- all_good_documented && all_good_response_documented &&
25
- all_good_response_json_schemas && all_good_valid_json_schemas
26
- end
27
-
28
- def test_file_paths
29
- return @test_file_paths if @test_file_paths
30
-
31
- @test_file_paths = {}
32
- white_unit.map do |request|
33
- @test_file_paths[request.test_file_path] ||= []
34
- @test_file_paths[request.test_file_path].push(request)
35
- end
36
- @test_file_paths
37
- end
38
-
39
- def all_documented_requests
40
- @all_documented_requests ||= @documented_requests.to_a.inject([]) do |res, tomogram_request|
41
- res.push(Fitting::Records::Documented::Request.new(tomogram_request, nil))
42
- end
43
- end
44
-
45
- def white_unit
46
- @white_unit_requests ||= @realized_requests.to_a.inject([]) do |res, tested_request|
47
- res.push(Fitting::Records::TestUnit::Request.new(tested_request, all_documented_requests))
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,98 +0,0 @@
1
- require 'json-schema'
2
-
3
- module Fitting
4
- class Records
5
- class TestUnit
6
- class Request
7
- def initialize(tested_request, all_documented_requests)
8
- @tested_request = tested_request
9
- @all_documented_requests = all_documented_requests
10
- end
11
-
12
- def method
13
- @method ||= @tested_request.method
14
- end
15
-
16
- def path
17
- @path ||= @tested_request.path
18
- end
19
-
20
- def body
21
- @body ||= @tested_request.body
22
- end
23
-
24
- def response
25
- @response ||= @tested_request.response
26
- end
27
-
28
- def test_path
29
- @test_path ||= @tested_request.title
30
- end
31
-
32
- def test_file_path
33
- @test_file_path ||= @tested_request.group
34
- end
35
-
36
- def documented_requests
37
- @documented_requests ||= @all_documented_requests.inject([]) do |res, documented_request|
38
- next res unless @tested_request.method == documented_request.method &&
39
- documented_request.path.match(@tested_request.path.to_s)
40
-
41
- res.push(documented_request)
42
- end
43
- end
44
-
45
- def documented?
46
- @documented ||= documented_requests.present?
47
- end
48
-
49
- def documented_responses
50
- @documented_responses ||= documented_requests.inject([]) do |res, documented_request|
51
- documented_request.responses.map do |documented_response|
52
- next unless documented_response['status'] == response.status.to_s
53
-
54
- res.push(documented_response)
55
- end
56
- end.flatten.compact
57
- end
58
-
59
- def response_documented?
60
- @response_documented ||= documented_responses.present?
61
- end
62
-
63
- def response_json_schemas
64
- @response_json_schemas ||= documented_responses.inject([]) do |res, documented_response|
65
- res.push(documented_response['json_schemas'])
66
- end.flatten
67
- end
68
-
69
- def response_json_schemas?
70
- @response_json_schemas_present ||= response_json_schemas.present?
71
- end
72
-
73
- def valid_json_schemas
74
- @valid_json_schemas ||= response_json_schemas.inject([]) do |res, json_schema|
75
- next res unless JSON::Validator.validate(json_schema, response.body)
76
-
77
- res.push(json_schema)
78
- end.flatten
79
- end
80
-
81
- def invalid_json_schemas
82
- @invalid_json_schemas ||= response_json_schemas.inject([]) do |res, json_schema|
83
- next res if JSON::Validator.validate(json_schema, response.body)
84
-
85
- res.push(
86
- json_schema: json_schema,
87
- fully_validate: JSON::Validator.fully_validate(json_schema, response.body)
88
- )
89
- end.flatten
90
- end
91
-
92
- def valid_json_schemas?
93
- @valid_json_schemas_present ||= valid_json_schemas.present?
94
- end
95
- end
96
- end
97
- end
98
- end
@@ -1,27 +0,0 @@
1
- require 'json-schema'
2
-
3
- module Fitting
4
- class Records
5
- class Unit
6
- class Combination
7
- attr_reader :description, :json_schema, :bodies
8
-
9
- def initialize(comb, bodies)
10
- @description = comb[1]
11
- @json_schema = comb[0]
12
- @bodies = bodies
13
- end
14
-
15
- def valid_bodies
16
- @valid_bodies ||= @bodies.inject([]) do |res, tested_body|
17
- next res unless JSON::Validator.validate(@json_schema, tested_body)
18
-
19
- res.push(tested_body)
20
- rescue JSON::Schema::UriError
21
- res.push(tested_body)
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end