fitting 2.18.3 → 3.0.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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -11
  3. data/CHANGELOG.md +6 -0
  4. data/README.md +46 -6
  5. data/fitting.gemspec +1 -1
  6. data/lib/fitting/configuration.rb +12 -6
  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/prefix.rb +20 -41
  17. data/lib/fitting/report/prefixes.rb +7 -8
  18. data/lib/fitting/report/response.rb +0 -3
  19. data/lib/fitting/report/tests.rb +23 -10
  20. data/lib/fitting/storage/responses.rb +5 -9
  21. data/lib/fitting/tests.rb +12 -4
  22. data/lib/fitting/version.rb +1 -1
  23. data/lib/fitting.rb +38 -43
  24. data/lib/tasks/fitting.rake +2 -186
  25. data/lib/tasks/fitting_outgoing.rake +91 -0
  26. metadata +5 -41
  27. data/lib/fitting/configuration/yaml.rb +0 -89
  28. data/lib/fitting/cover/response.rb +0 -37
  29. data/lib/fitting/documentation.rb +0 -56
  30. data/lib/fitting/matchers/response_matcher.rb +0 -88
  31. data/lib/fitting/records/realized_unit.rb +0 -52
  32. data/lib/fitting/records/test_unit/request.rb +0 -98
  33. data/lib/fitting/records/unit/combination.rb +0 -27
  34. data/lib/fitting/records/unit/json_schema.rb +0 -111
  35. data/lib/fitting/records/unit/request.rb +0 -37
  36. data/lib/fitting/records/unit/response.rb +0 -32
  37. data/lib/fitting/request.rb +0 -38
  38. data/lib/fitting/response/fully_validates.rb +0 -34
  39. data/lib/fitting/response.rb +0 -88
  40. data/lib/fitting/statistics/analysis.rb +0 -25
  41. data/lib/fitting/statistics/cover_error.rb +0 -29
  42. data/lib/fitting/statistics/cover_error_enum.rb +0 -29
  43. data/lib/fitting/statistics/cover_error_one_of.rb +0 -29
  44. data/lib/fitting/statistics/great.rb +0 -13
  45. data/lib/fitting/statistics/list.rb +0 -55
  46. data/lib/fitting/statistics/lists.rb +0 -53
  47. data/lib/fitting/statistics/measurement.rb +0 -92
  48. data/lib/fitting/statistics/measurement_cover.rb +0 -92
  49. data/lib/fitting/statistics/measurement_cover_enum.rb +0 -92
  50. data/lib/fitting/statistics/measurement_cover_one_of.rb +0 -92
  51. data/lib/fitting/statistics/not_covered_responses.rb +0 -13
  52. data/lib/fitting/statistics/percent.rb +0 -20
  53. data/lib/fitting/statistics/requests_stats.rb +0 -40
  54. data/lib/fitting/statistics/responses_stats.rb +0 -32
  55. data/lib/fitting/statistics/template.rb +0 -117
  56. data/lib/fitting/statistics/template_cover_error.rb +0 -50
  57. data/lib/fitting/statistics/template_cover_error_enum.rb +0 -50
  58. data/lib/fitting/statistics/template_cover_error_one_of.rb +0 -50
  59. data/lib/fitting/statistics.rb +0 -25
  60. data/lib/fitting/storage/white_list.rb +0 -158
  61. data/lib/fitting/templates/realized_template.rb +0 -49
  62. data/lib/fitting/view/report.html.haml +0 -16
  63. data/lib/fitting/view/style.css +0 -47
data/lib/fitting.rb CHANGED
@@ -1,73 +1,68 @@
1
1
  require 'fitting/version'
2
2
  require 'fitting/configuration'
3
- require 'fitting/matchers/response_matcher'
4
- require 'fitting/documentation'
3
+
5
4
  require 'fitting/storage/responses'
5
+ require 'fitting/tests'
6
+ require 'fitting/cover/json_schema_enum'
7
+ require 'fitting/cover/json_schema_one_of'
8
+ require 'fitting/records/documented/request'
6
9
  require 'fitting/railtie' if defined?(Rails)
7
10
 
8
11
  module Fitting
9
12
  class << self
10
- def configure
11
- yield configuration
12
- end
13
-
14
13
  def configuration
15
- @configuration ||= Configuration.craft
14
+ yaml = YAML.safe_load(File.read('.fitting.yml'))
15
+ @configuration ||= Configuration.new(yaml)
16
16
  end
17
17
 
18
- def statistics
19
- responses = Fitting::Storage::Responses.new
20
-
21
- RSpec.configure do |config|
22
- config.after(:each, type: :controller) do
23
- responses.add(response, inspect)
24
- end
25
-
26
- config.after(:suite) do
27
- responses.statistics.save
28
- end
29
- end
18
+ def configure
19
+ yield(configuration)
30
20
  end
31
21
 
32
- extend Gem::Deprecate
33
- deprecate :statistics, :save_test_data, 2022, 1
22
+ def clear_tests_directory
23
+ FileUtils.rm_r Dir.glob(configuration.rspec_json_path), force: true
24
+ FileUtils.rm_r Dir.glob(configuration.webmock_json_path), force: true
25
+ end
34
26
 
35
27
  def save_test_data
36
- responses = Fitting::Storage::Responses.new
28
+ clear_tests_directory
37
29
 
38
- FileUtils.rm_r Dir.glob('fitting_tests/*'), force: true
30
+ outgoing_responses = Fitting::Storage::Responses.new
31
+ responses = Fitting::Storage::Responses.new
39
32
 
40
33
  RSpec.configure do |config|
34
+ if defined?(WebMock)
35
+ config.before(:each) do |example|
36
+ WebMock.after_request do |request_signature, response|
37
+ env = Rack::MockRequest.env_for(request_signature.uri, { method: request_signature.method })
38
+ # Парсим в тот формат с которым работает fitting
39
+ mock_request = ActionDispatch::Request.new(env)
40
+ mock_response = ActionDispatch::Response.create(response.status.first || 200, response.headers || {},
41
+ response.body || {})
42
+ mock_response.instance_variable_set(:@request, mock_request)
43
+
44
+ outgoing_responses.add(mock_response, example)
45
+ end
46
+ end
47
+ end
48
+
41
49
  config.after(:each, type: :request) do |example|
42
- responses.add(response, example.metadata)
50
+ responses.add(response, example)
43
51
  end
44
52
 
45
53
  config.after(:each, type: :controller) do |example|
46
- responses.add(response, example.metadata)
54
+ responses.add(response, example)
55
+ end
56
+
57
+ config.after(:each) do
58
+ WebMock::CallbackRegistry.reset
47
59
  end
48
60
 
49
61
  config.after(:suite) do
50
62
  responses.tests.save
63
+ outgoing_responses.tests.outgoing_save
51
64
  end
52
65
  end
53
66
  end
54
67
  end
55
-
56
- def self.loaded_tasks=(val)
57
- @loaded_tasks = val
58
- end
59
-
60
- def self.loaded_tasks
61
- @loaded_tasks
62
- end
63
-
64
- def self.load_tasks
65
- return if loaded_tasks
66
-
67
- self.loaded_tasks = true
68
-
69
- Dir[File.join(File.dirname(__FILE__), 'tasks', '**/*.rake')].each do |rake|
70
- load rake
71
- end
72
- end
73
68
  end
@@ -1,10 +1,4 @@
1
1
  require 'fitting/records/spherical/requests'
2
- require 'fitting/configuration'
3
- require 'fitting/records/realized_unit'
4
- require 'fitting/templates/realized_template'
5
- require 'fitting/statistics/template_cover_error'
6
- require 'fitting/statistics/template_cover_error_enum'
7
- require 'fitting/statistics/template_cover_error_one_of'
8
2
  require 'fitting/cover/json_schema'
9
3
  require 'fitting/report/prefixes'
10
4
  require 'fitting/report/tests'
@@ -12,8 +6,8 @@ require 'fitting/report/console'
12
6
 
13
7
  namespace :fitting do
14
8
  task :report do
15
- tests = Fitting::Report::Tests.new_from_config('fitting_tests/*.json')
16
- prefixes = Fitting::Report::Prefixes.new('.fitting.yml')
9
+ tests = Fitting::Report::Tests.new_from_config
10
+ prefixes = Fitting::Report::Prefixes.new(Fitting.configuration.prefixes)
17
11
 
18
12
  prefixes.join(tests)
19
13
 
@@ -93,183 +87,5 @@ namespace :fitting do
93
87
  exit 1 unless console.good?
94
88
 
95
89
  exit 0
96
-
97
- actions.map do |action|
98
- action.to_hash['responses'].map do |response|
99
- response['combination'] ||= []
100
- combinations = Fitting::Cover::JSONSchema.new(response['body']).combi +
101
- Fitting::Cover::JSONSchemaEnum.new(response['body']).combi +
102
- Fitting::Cover::JSONSchemaOneOf.new(response['body']).combi
103
- next unless combinations != []
104
-
105
- combinations.map do |combination|
106
- response['combination'].push(
107
- {
108
- 'json_schema' => combination[0],
109
- 'type' => combination[1][0],
110
- 'combination' => combination[1][1],
111
- 'tests' => [],
112
- 'error' => []
113
- }
114
- )
115
- end
116
- end
117
- end
118
-
119
- actions.map do |action|
120
- action.to_hash['responses'].map do |response|
121
- response['tests'] ||= []
122
- response['tests'].map do |test|
123
- next unless response['combination'][0]
124
-
125
- response['combination'].map do |combination|
126
- res = JSON::Validator.fully_validate(combination['json_schema'], test['response']['body'])
127
- if res == []
128
- combination['tests'].push(test)
129
- response['tests'] = response['tests'] - [test]
130
- next
131
- else
132
- combination['error'].push({ test: test, error: res })
133
- end
134
- rescue JSON::Schema::SchemaError => e
135
- combination['error'].push({ test: test, error: e })
136
- end
137
- end
138
- end
139
- end
140
-
141
- actions_test = { actions: actions, tests: tests }
142
-
143
- makedirs('fitting')
144
- File.open('fitting/old_report.json', 'w') { |file| file.write(JSON.dump(actions_test)) }
145
- end
146
-
147
- # deprecated
148
- desc 'Fitting documentation'
149
- task :documentation do
150
- documented_unit = Fitting::Statistics::Template.new(
151
- Fitting::Records::Spherical::Requests.new,
152
- Fitting.configuration
153
- )
154
- puts documented_unit.stats
155
-
156
- unless documented_unit.not_covered == "\n"
157
- puts 'Not all responses from the whitelist are covered!'
158
- exit 1
159
- end
160
- end
161
-
162
- desc 'Fitting documentation responses cover'
163
- task :documentation_responses, [:size] => :environment do |_, args|
164
- case args.size
165
- when 'xs'
166
- documented_unit = Fitting::Statistics::Template.new(
167
- Fitting::Records::Spherical::Requests.new,
168
- Fitting.configuration
169
- )
170
- puts documented_unit.stats
171
-
172
- unless documented_unit.not_covered == "\n"
173
- puts 'Not all responses from the whitelist are covered!'
174
- exit 1
175
- end
176
- when 's'
177
- documented_unit = Fitting::Statistics::Template.new(
178
- Fitting::Records::Spherical::Requests.new,
179
- Fitting.configuration,
180
- 'cover'
181
- )
182
- puts documented_unit.stats
183
-
184
- unless documented_unit.not_covered == "\n"
185
- puts 'Not all responses from the whitelist are covered!'
186
- exit 1
187
- end
188
- when 'm'
189
- documented_unit = Fitting::Statistics::Template.new(
190
- Fitting::Records::Spherical::Requests.new,
191
- Fitting.configuration,
192
- 'cover_enum'
193
- )
194
- puts documented_unit.stats
195
-
196
- unless documented_unit.not_covered == "\n"
197
- puts 'Not all responses from the whitelist are covered!'
198
- exit 1
199
- end
200
- when 'l'
201
- documented_unit = Fitting::Statistics::Template.new(
202
- Fitting::Records::Spherical::Requests.new,
203
- Fitting.configuration,
204
- 'cover_one_of'
205
- )
206
- puts documented_unit.stats
207
-
208
- unless documented_unit.not_covered == "\n"
209
- puts 'Not all responses from the whitelist are covered!'
210
- exit 1
211
- end
212
- else
213
- puts 'need key xs, s, m or l'
214
- end
215
- end
216
-
217
- desc 'Fitting documentation responses cover error'
218
- task :documentation_responses_error, [:size] => :environment do |_, args|
219
- case args.size
220
- when 's'
221
- documented_unit = Fitting::Statistics::TemplateCoverError.new(
222
- Fitting::Records::Spherical::Requests.new,
223
- Fitting.configuration
224
- )
225
- puts documented_unit.stats
226
- when 'm'
227
- documented_unit = Fitting::Statistics::TemplateCoverErrorEnum.new(
228
- Fitting::Records::Spherical::Requests.new,
229
- Fitting.configuration
230
- )
231
- puts documented_unit.stats
232
- when 'l'
233
- documented_unit = Fitting::Statistics::TemplateCoverErrorOneOf.new(
234
- Fitting::Records::Spherical::Requests.new,
235
- Fitting.configuration
236
- )
237
- puts documented_unit.stats
238
- else
239
- puts 'need key s, m or l'
240
- end
241
- end
242
-
243
- # deprecated
244
- desc 'Fitting tests'
245
- task :tests do
246
- realized_unit = Fitting::Records::RealizedUnit.new(
247
- Fitting::Records::Spherical::Requests.new,
248
- Fitting.configuration.tomogram
249
- )
250
- puts Fitting::Templates::RealizedTemplate.new(realized_unit).to_s
251
-
252
- unless realized_unit.fully_covered?
253
- puts 'Not all responses from the whitelist are covered!'
254
- exit 1
255
- end
256
- end
257
-
258
- desc 'Fitting tests'
259
- task :tests_responses, [:size] => :environment do |_, args|
260
- if args.size == 'xs'
261
- realized_unit = Fitting::Records::RealizedUnit.new(
262
- Fitting::Records::Spherical::Requests.new,
263
- Fitting.configuration.tomogram
264
- )
265
- puts Fitting::Templates::RealizedTemplate.new(realized_unit).to_s
266
-
267
- unless realized_unit.fully_covered?
268
- puts 'Not all responses from the whitelist are covered!'
269
- exit 1
270
- end
271
- else
272
- puts 'need key xs'
273
- end
274
90
  end
275
91
  end
@@ -0,0 +1,91 @@
1
+ require 'fitting/records/spherical/requests'
2
+ require 'fitting/cover/json_schema'
3
+ require 'fitting/report/prefixes'
4
+ require 'fitting/report/tests'
5
+ require 'fitting/report/console'
6
+
7
+ namespace :fitting_out do
8
+ task :report do
9
+ tests = Fitting::Report::Tests.new_from_outgoing_config
10
+ prefixes = Fitting::Report::Prefixes.new(Fitting.configuration.prefixes)
11
+
12
+ prefixes.join(tests)
13
+
14
+ prefixes.to_a.map do |prefix|
15
+ prefix.actions.join(prefix.tests) unless prefix.skip?
16
+ end
17
+
18
+ prefixes.to_a.map do |prefix|
19
+ next if prefix.skip?
20
+
21
+ prefix.actions.to_a.map do |action|
22
+ action.responses.join(action.tests)
23
+ end
24
+ end
25
+
26
+ prefixes.to_a.map do |prefix|
27
+ next if prefix.skip?
28
+
29
+ prefix.actions.to_a.map do |action|
30
+ action.responses.to_a.map do |response|
31
+ response.combinations.join(response.tests)
32
+ end
33
+ end
34
+ end
35
+
36
+ report = JSON.pretty_generate(
37
+ {
38
+ tests_without_prefixes: tests.without_prefixes,
39
+ prefixes_details: prefixes.to_a.map(&:details)
40
+ }
41
+ )
42
+
43
+ destination = 'fitting'
44
+ FileUtils.mkdir_p(destination)
45
+ FileUtils.rm_r Dir.glob("#{destination}/*"), force: true
46
+ File.open('fitting/report.json', 'w') { |file| file.write(report) }
47
+
48
+ gem_path = $LOAD_PATH.find { |i| i.include?('fitting') }
49
+ source_path = "#{gem_path}/templates/bomboniere/dist"
50
+ FileUtils.copy_entry source_path, destination
51
+
52
+ json_schemas = {}
53
+ combinations = {}
54
+ prefixes.to_a.map do |prefix|
55
+ next if prefix.skip?
56
+
57
+ prefix.actions.to_a.map do |action|
58
+ action.responses.to_a.map do |response|
59
+ json_schemas[response.id] = response.body
60
+ response.combinations.to_a.map do |combination|
61
+ combinations.merge!(combination.id => combination.json_schema)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ File.open('fitting/json_schemas.json', 'w') { |file| file.write(JSON.pretty_generate(json_schemas)) }
67
+ File.open('fitting/combinations.json', 'w') { |file| file.write(JSON.pretty_generate(combinations)) }
68
+ File.open('fitting/tests.json', 'w') { |file| file.write(JSON.pretty_generate(tests.to_h)) }
69
+
70
+ js_path = Dir["#{destination}/js/*"].find { |f| f[0..14] == 'fitting/js/app.' and f[-3..] == '.js' }
71
+ js_file = File.read(js_path)
72
+ new_js_file = js_file.gsub('{stub:"prefixes report"}', report)
73
+ new_js_file = new_js_file.gsub('{stub:"for action page"}', report)
74
+ new_js_file = new_js_file.gsub('{stub:"json-schemas"}', JSON.pretty_generate(json_schemas))
75
+ new_js_file = new_js_file.gsub('{stub:"combinations"}', JSON.pretty_generate(combinations))
76
+ new_js_file = new_js_file.gsub('{stub:"tests"}', JSON.pretty_generate(tests.to_h))
77
+ File.open(js_path, 'w') { |file| file.write(new_js_file) }
78
+
79
+ console = Fitting::Report::Console.new(
80
+ tests.without_prefixes,
81
+ prefixes.to_a.map(&:details)
82
+ )
83
+
84
+ puts console.output
85
+ puts console.output_sum
86
+
87
+ exit 1 unless console.good?
88
+
89
+ exit 0
90
+ end
91
+ end
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.3
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - d.efimov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-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
@@ -142,14 +142,14 @@ dependencies:
142
142
  name: rubocop
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - "~>"
145
+ - - ">="
146
146
  - !ruby/object:Gem::Version
147
147
  version: 1.22.0
148
148
  type: :development
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - "~>"
152
+ - - ">="
153
153
  - !ruby/object:Gem::Version
154
154
  version: 1.22.0
155
155
  - !ruby/object:Gem::Dependency
@@ -193,26 +193,16 @@ files:
193
193
  - images/logo.png
194
194
  - lib/fitting.rb
195
195
  - lib/fitting/configuration.rb
196
- - lib/fitting/configuration/yaml.rb
197
196
  - lib/fitting/cover/json_schema.rb
198
197
  - lib/fitting/cover/json_schema_enum.rb
199
198
  - lib/fitting/cover/json_schema_one_of.rb
200
- - lib/fitting/cover/response.rb
201
- - lib/fitting/documentation.rb
202
- - lib/fitting/matchers/response_matcher.rb
203
199
  - lib/fitting/railtie.rb
204
200
  - lib/fitting/records/documented/request.rb
205
- - lib/fitting/records/realized_unit.rb
206
201
  - lib/fitting/records/spherical/request.rb
207
202
  - lib/fitting/records/spherical/requests.rb
208
203
  - lib/fitting/records/spherical/response.rb
209
- - lib/fitting/records/test_unit/request.rb
210
204
  - lib/fitting/records/tested/request.rb
211
205
  - lib/fitting/records/tested/response.rb
212
- - lib/fitting/records/unit/combination.rb
213
- - lib/fitting/records/unit/json_schema.rb
214
- - lib/fitting/records/unit/request.rb
215
- - lib/fitting/records/unit/response.rb
216
206
  - lib/fitting/report/action.rb
217
207
  - lib/fitting/report/actions.rb
218
208
  - lib/fitting/report/combination.rb
@@ -224,37 +214,11 @@ files:
224
214
  - lib/fitting/report/responses.rb
225
215
  - lib/fitting/report/test.rb
226
216
  - lib/fitting/report/tests.rb
227
- - lib/fitting/request.rb
228
- - lib/fitting/response.rb
229
- - lib/fitting/response/fully_validates.rb
230
- - lib/fitting/statistics.rb
231
- - lib/fitting/statistics/analysis.rb
232
- - lib/fitting/statistics/cover_error.rb
233
- - lib/fitting/statistics/cover_error_enum.rb
234
- - lib/fitting/statistics/cover_error_one_of.rb
235
- - lib/fitting/statistics/great.rb
236
- - lib/fitting/statistics/list.rb
237
- - lib/fitting/statistics/lists.rb
238
- - lib/fitting/statistics/measurement.rb
239
- - lib/fitting/statistics/measurement_cover.rb
240
- - lib/fitting/statistics/measurement_cover_enum.rb
241
- - lib/fitting/statistics/measurement_cover_one_of.rb
242
- - lib/fitting/statistics/not_covered_responses.rb
243
- - lib/fitting/statistics/percent.rb
244
- - lib/fitting/statistics/requests_stats.rb
245
- - lib/fitting/statistics/responses_stats.rb
246
- - lib/fitting/statistics/template.rb
247
- - lib/fitting/statistics/template_cover_error.rb
248
- - lib/fitting/statistics/template_cover_error_enum.rb
249
- - lib/fitting/statistics/template_cover_error_one_of.rb
250
217
  - lib/fitting/storage/responses.rb
251
- - lib/fitting/storage/white_list.rb
252
- - lib/fitting/templates/realized_template.rb
253
218
  - lib/fitting/tests.rb
254
219
  - lib/fitting/version.rb
255
- - lib/fitting/view/report.html.haml
256
- - lib/fitting/view/style.css
257
220
  - lib/tasks/fitting.rake
221
+ - lib/tasks/fitting_outgoing.rake
258
222
  - lib/templates/bomboniere/.gitignore
259
223
  - lib/templates/bomboniere/.tool-versions
260
224
  - lib/templates/bomboniere/README.md
@@ -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