fitting 2.11.0 → 2.12.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 +5 -0
- data/README.md +5 -0
- data/lib/fitting/cover/json_schema_one_of.rb +30 -0
- data/lib/fitting/records/unit/json_schema.rb +26 -0
- data/lib/fitting/statistics/cover_error_one_of.rb +27 -0
- data/lib/fitting/statistics/list.rb +2 -0
- data/lib/fitting/statistics/measurement_cover_one_of.rb +92 -0
- data/lib/fitting/statistics/template.rb +5 -0
- data/lib/fitting/statistics/template_cover_error_one_of.rb +50 -0
- data/lib/fitting/version.rb +1 -1
- data/lib/tasks/fitting.rake +23 -2
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8234af5ba817adef5ce3ff1bf03d4e84c7747169
|
4
|
+
data.tar.gz: c8a247c8467765022ef0f5f2c7b58b669464cdaf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00863f51cc9692a16ce6cb24aaf83309c4490daac1430081e45081e3c5d24dfe6dba0e17b1df659f3ee84a0b1e49ecaa8c76a1ef5bfc301a70752db6beeafe18
|
7
|
+
data.tar.gz: fda881919cf0c1bef0ed9228a8d450e866e234da599822f843bed76a146b02ebc143d85d87bda60c294603066a98c4179f9e7dc27162f7b91489eb9d9b90563f
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -154,6 +154,11 @@ new json-schema: {"$schema"=>"http://json-schema.org/draft-04/schema#", "type"=>
|
|
154
154
|
In addition to the previous comand, you will learn the coverage(enum) json-schemas with task `rake fitting:documentation_responses[m]`
|
155
155
|
For details `rake fitting:documentation_responses_error[m]`
|
156
156
|
|
157
|
+
### l size
|
158
|
+
|
159
|
+
In addition to the previous comand, you will learn the coverage(oneOf) json-schemas with task `rake fitting:documentation_responses[l]`
|
160
|
+
For details `rake fitting:documentation_responses_error[l]`
|
161
|
+
|
157
162
|
## Check tests cover
|
158
163
|
|
159
164
|
### xs size
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Fitting
|
2
|
+
class Cover
|
3
|
+
class JSONSchemaOneOf
|
4
|
+
def initialize(json_schema)
|
5
|
+
@json_schema = json_schema
|
6
|
+
end
|
7
|
+
|
8
|
+
def combi
|
9
|
+
@combinations = []
|
10
|
+
|
11
|
+
return @combinations unless @json_schema['oneOf'] || @json_schema['allOf']
|
12
|
+
|
13
|
+
if @json_schema['oneOf']
|
14
|
+
one_of = @json_schema.delete("oneOf")
|
15
|
+
one_of.each_index do |index|
|
16
|
+
@combinations.push([@json_schema.merge(one_of[index]), ['one_of', "properties.#{index}"]])
|
17
|
+
end
|
18
|
+
elsif @json_schema['allOf']
|
19
|
+
all_of = @json_schema.delete("allOf")
|
20
|
+
one_of = all_of[0].delete("oneOf")
|
21
|
+
one_of.each_index do |index|
|
22
|
+
@combinations.push([@json_schema.merge(one_of[index]), ['one_of', "properties.#{index}"]])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
@combinations
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'json-schema'
|
2
2
|
require 'fitting/cover/json_schema'
|
3
3
|
require 'fitting/cover/json_schema_enum'
|
4
|
+
require 'fitting/cover/json_schema_one_of'
|
4
5
|
require 'fitting/records/unit/combination'
|
5
6
|
|
6
7
|
module Fitting
|
@@ -51,6 +52,19 @@ module Fitting
|
|
51
52
|
@combinations_with_enum
|
52
53
|
end
|
53
54
|
|
55
|
+
def combinations_with_one_of
|
56
|
+
return @combinations_with_one_of if @combinations_with_one_of
|
57
|
+
@combinations_with_one_of = []
|
58
|
+
qwe = Fitting::Cover::JSONSchema.new(@json_schema).combi + Fitting::Cover::JSONSchemaEnum.new(@json_schema).combi + Fitting::Cover::JSONSchemaOneOf.new(@json_schema).combi
|
59
|
+
qwe.map do |comb|
|
60
|
+
@combinations_with_one_of.push(Fitting::Records::Unit::Combination.new(
|
61
|
+
comb,
|
62
|
+
bodies
|
63
|
+
))
|
64
|
+
end
|
65
|
+
@combinations_with_one_of
|
66
|
+
end
|
67
|
+
|
54
68
|
def cover
|
55
69
|
@cover ||= if bodies == []
|
56
70
|
0
|
@@ -74,6 +88,18 @@ module Fitting
|
|
74
88
|
(count + 1) * 100 / (combinations_with_enum.size + 1)
|
75
89
|
end
|
76
90
|
end
|
91
|
+
|
92
|
+
def cover_one_of
|
93
|
+
@cover_one_of ||= if bodies == []
|
94
|
+
0
|
95
|
+
else
|
96
|
+
count = 0
|
97
|
+
combinations_with_one_of.map do |combination|
|
98
|
+
count += 1 unless combination.valid_bodies == []
|
99
|
+
end
|
100
|
+
(count + 1) * 100 / (combinations_with_one_of.size + 1)
|
101
|
+
end
|
102
|
+
end
|
77
103
|
end
|
78
104
|
end
|
79
105
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Fitting
|
2
|
+
class Statistics
|
3
|
+
class CoverErrorOneOf
|
4
|
+
def initialize(request_unit)
|
5
|
+
@request_unit = request_unit
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_s
|
9
|
+
res = ''
|
10
|
+
@request_unit.map do |request|
|
11
|
+
request.responses.map do |response|
|
12
|
+
next unless response.tested_bodies != []
|
13
|
+
response.json_schemas.map do |json_schema|
|
14
|
+
json_schema.combinations_with_one_of.map do |combination|
|
15
|
+
next unless combination.valid_bodies == []
|
16
|
+
res += "request method: #{request.method}\nrequest path: #{request.path}\n"\
|
17
|
+
"response status: #{response.status}\nsource json-schema: #{json_schema.json_schema}\n"\
|
18
|
+
"combination: #{combination.description}\nnew json-schema: #{combination.json_schema}\n\n"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
res
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -45,6 +45,8 @@ module Fitting
|
|
45
45
|
res.push("#{json_schema.cover}% #{response.status}")
|
46
46
|
elsif @depth == 'cover_enum'
|
47
47
|
res.push("#{json_schema.cover_enum}% #{response.status}")
|
48
|
+
elsif @depth == 'cover_one_of'
|
49
|
+
res.push("#{json_schema.cover_one_of}% #{response.status}")
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module Fitting
|
2
|
+
class Statistics
|
3
|
+
class MeasurementCoverOneOf
|
4
|
+
attr_reader :requests, :all_responses, :cover_responses, :not_cover_responses, :max_response_path,
|
5
|
+
:coverage_fully, :coverage_non, :coverage_partially, :not_covered_responses
|
6
|
+
|
7
|
+
def initialize(requests)
|
8
|
+
@requests = requests
|
9
|
+
@all_responses = 0
|
10
|
+
@cover_responses = 0
|
11
|
+
@not_cover_responses = 0
|
12
|
+
@max_response_path = 0
|
13
|
+
@coverage_fully = []
|
14
|
+
@coverage_non = []
|
15
|
+
@coverage_partially = []
|
16
|
+
@not_covered_responses = []
|
17
|
+
check_responses
|
18
|
+
end
|
19
|
+
|
20
|
+
def check_responses
|
21
|
+
return if @ready
|
22
|
+
|
23
|
+
@requests.map do |request|
|
24
|
+
chech_request(request)
|
25
|
+
end
|
26
|
+
|
27
|
+
@ready = true
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def chech_request(request)
|
33
|
+
check_cover(request)
|
34
|
+
coverage_push(request)
|
35
|
+
|
36
|
+
@max_response_path = request.path.to_s.size / 8 if request.path.to_s.size / 8 > @max_response_path
|
37
|
+
request.responses.map do |response|
|
38
|
+
check_response(response, request)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def check_response(response, request)
|
43
|
+
json_schema_index = 0
|
44
|
+
response.json_schemas.map do |json_schema|
|
45
|
+
json_schema_index = check_json_schema(json_schema, request, response, json_schema_index)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def check_json_schema(json_schema, request, response, json_schema_index)
|
50
|
+
if json_schema.cover_one_of != 100
|
51
|
+
@not_cover_responses += 1
|
52
|
+
@not_covered_responses.push("#{request.method}\t#{request.path} #{response.status} #{json_schema_index}")
|
53
|
+
else
|
54
|
+
@cover_responses += 1
|
55
|
+
end
|
56
|
+
@all_responses += 1
|
57
|
+
json_schema_index + 1
|
58
|
+
end
|
59
|
+
|
60
|
+
def coverage_push(request)
|
61
|
+
if @all == @cover
|
62
|
+
@coverage_fully.push(request)
|
63
|
+
elsif @all == @not_cover
|
64
|
+
@coverage_non.push(request)
|
65
|
+
else
|
66
|
+
@coverage_partially.push(request)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def check_cover(request)
|
71
|
+
@all = 0
|
72
|
+
@cover = 0
|
73
|
+
@not_cover = 0
|
74
|
+
|
75
|
+
request.responses.map do |response|
|
76
|
+
response.json_schemas.map do |json_schema|
|
77
|
+
count_cover(json_schema)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def count_cover(json_schema)
|
83
|
+
@all += 1
|
84
|
+
if json_schema.cover_one_of != 100
|
85
|
+
@not_cover += 1
|
86
|
+
else
|
87
|
+
@cover += 1
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -3,6 +3,7 @@ require 'fitting/statistics/analysis'
|
|
3
3
|
require 'fitting/statistics/measurement'
|
4
4
|
require 'fitting/statistics/measurement_cover'
|
5
5
|
require 'fitting/statistics/measurement_cover_enum'
|
6
|
+
require 'fitting/statistics/measurement_cover_one_of'
|
6
7
|
require 'fitting/records/unit/request'
|
7
8
|
require 'fitting/storage/white_list'
|
8
9
|
require 'fitting/records/documented/request'
|
@@ -53,6 +54,8 @@ module Fitting
|
|
53
54
|
Fitting::Statistics::MeasurementCover.new(white_unit)
|
54
55
|
elsif @depth == 'cover_enum'
|
55
56
|
Fitting::Statistics::MeasurementCoverEnum.new(white_unit)
|
57
|
+
elsif @depth == 'cover_one_of'
|
58
|
+
Fitting::Statistics::MeasurementCoverOneOf.new(white_unit)
|
56
59
|
end
|
57
60
|
end
|
58
61
|
|
@@ -64,6 +67,8 @@ module Fitting
|
|
64
67
|
Fitting::Statistics::MeasurementCover.new(black_unit)
|
65
68
|
elsif @depth == 'cover_enum'
|
66
69
|
Fitting::Statistics::MeasurementCoverEnum.new(black_unit)
|
70
|
+
elsif @depth == 'cover_one_of'
|
71
|
+
Fitting::Statistics::MeasurementCoverOneOf.new(black_unit)
|
67
72
|
end
|
68
73
|
end
|
69
74
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'fitting/statistics/cover_error_one_of'
|
2
|
+
require 'fitting/records/unit/request'
|
3
|
+
require 'fitting/storage/white_list'
|
4
|
+
require 'fitting/records/documented/request'
|
5
|
+
|
6
|
+
module Fitting
|
7
|
+
class Statistics
|
8
|
+
class TemplateCoverErrorOneOf
|
9
|
+
def initialize(tested_requests, config)
|
10
|
+
@tested_requests = tested_requests
|
11
|
+
@config = config
|
12
|
+
end
|
13
|
+
|
14
|
+
def stats
|
15
|
+
"#{white_statistics}\n\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
def white_statistics
|
19
|
+
@white_statistics ||= Fitting::Statistics::CoverErrorOneOf.new(white_unit)
|
20
|
+
end
|
21
|
+
|
22
|
+
def white_unit
|
23
|
+
@white_unit_requests ||= documented_requests_white.inject([]) do |res, documented_request|
|
24
|
+
res.push(Fitting::Records::Unit::Request.new(documented_request, @tested_requests))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def documented_requests_white
|
29
|
+
@documented_requests_white ||= documented.find_all(&:white)
|
30
|
+
end
|
31
|
+
|
32
|
+
def documented
|
33
|
+
@documented_requests ||= @config.tomogram.to_a.inject([]) do |res, tomogram_request|
|
34
|
+
res.push(Fitting::Records::Documented::Request.new(tomogram_request, white_list.to_a))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def white_list
|
39
|
+
@white_list ||= Fitting::Storage::WhiteList.new(
|
40
|
+
@config.prefix,
|
41
|
+
@config.white_list,
|
42
|
+
@config.resource_white_list,
|
43
|
+
@config.include_resources,
|
44
|
+
@config.include_actions,
|
45
|
+
@config.tomogram.to_resources
|
46
|
+
)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/fitting/version.rb
CHANGED
data/lib/tasks/fitting.rake
CHANGED
@@ -4,8 +4,10 @@ require 'fitting/records/realized_unit'
|
|
4
4
|
require 'fitting/templates/realized_template'
|
5
5
|
require 'fitting/statistics/template_cover_error'
|
6
6
|
require 'fitting/statistics/template_cover_error_enum'
|
7
|
+
require 'fitting/statistics/template_cover_error_one_of'
|
7
8
|
|
8
9
|
namespace :fitting do
|
10
|
+
# deprecated
|
9
11
|
desc 'Fitting documentation'
|
10
12
|
task :documentation do
|
11
13
|
documented_unit = Fitting::Statistics::Template.new(
|
@@ -53,12 +55,24 @@ namespace :fitting do
|
|
53
55
|
)
|
54
56
|
puts documented_unit.stats
|
55
57
|
|
58
|
+
unless documented_unit.not_covered == "\n"
|
59
|
+
puts 'Not all responses from the whitelist are covered!'
|
60
|
+
exit 1
|
61
|
+
end
|
62
|
+
elsif args.size == 'l'
|
63
|
+
documented_unit = Fitting::Statistics::Template.new(
|
64
|
+
Fitting::Records::Spherical::Requests.new,
|
65
|
+
Fitting.configuration,
|
66
|
+
'cover_one_of'
|
67
|
+
)
|
68
|
+
puts documented_unit.stats
|
69
|
+
|
56
70
|
unless documented_unit.not_covered == "\n"
|
57
71
|
puts 'Not all responses from the whitelist are covered!'
|
58
72
|
exit 1
|
59
73
|
end
|
60
74
|
else
|
61
|
-
puts 'need key xs, s or
|
75
|
+
puts 'need key xs, s, m or l'
|
62
76
|
end
|
63
77
|
end
|
64
78
|
|
@@ -76,11 +90,18 @@ namespace :fitting do
|
|
76
90
|
Fitting.configuration
|
77
91
|
)
|
78
92
|
puts documented_unit.stats
|
93
|
+
elsif args.size == 'l'
|
94
|
+
documented_unit = Fitting::Statistics::TemplateCoverErrorOneOf.new(
|
95
|
+
Fitting::Records::Spherical::Requests.new,
|
96
|
+
Fitting.configuration
|
97
|
+
)
|
98
|
+
puts documented_unit.stats
|
79
99
|
else
|
80
|
-
puts 'need key s or
|
100
|
+
puts 'need key s, m or l'
|
81
101
|
end
|
82
102
|
end
|
83
103
|
|
104
|
+
# deprecated
|
84
105
|
desc 'Fitting tests'
|
85
106
|
task :tests do
|
86
107
|
realized_unit = Fitting::Records::RealizedUnit.new(
|
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.
|
4
|
+
version: 2.12.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: 2019-09-
|
11
|
+
date: 2019-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- lib/fitting/configuration/yaml.rb
|
199
199
|
- lib/fitting/cover/json_schema.rb
|
200
200
|
- lib/fitting/cover/json_schema_enum.rb
|
201
|
+
- lib/fitting/cover/json_schema_one_of.rb
|
201
202
|
- lib/fitting/cover/response.rb
|
202
203
|
- lib/fitting/documentation.rb
|
203
204
|
- lib/fitting/matchers/response_matcher.rb
|
@@ -221,12 +222,14 @@ files:
|
|
221
222
|
- lib/fitting/statistics/analysis.rb
|
222
223
|
- lib/fitting/statistics/cover_error.rb
|
223
224
|
- lib/fitting/statistics/cover_error_enum.rb
|
225
|
+
- lib/fitting/statistics/cover_error_one_of.rb
|
224
226
|
- lib/fitting/statistics/great.rb
|
225
227
|
- lib/fitting/statistics/list.rb
|
226
228
|
- lib/fitting/statistics/lists.rb
|
227
229
|
- lib/fitting/statistics/measurement.rb
|
228
230
|
- lib/fitting/statistics/measurement_cover.rb
|
229
231
|
- lib/fitting/statistics/measurement_cover_enum.rb
|
232
|
+
- lib/fitting/statistics/measurement_cover_one_of.rb
|
230
233
|
- lib/fitting/statistics/not_covered_responses.rb
|
231
234
|
- lib/fitting/statistics/percent.rb
|
232
235
|
- lib/fitting/statistics/requests_stats.rb
|
@@ -234,6 +237,7 @@ files:
|
|
234
237
|
- lib/fitting/statistics/template.rb
|
235
238
|
- lib/fitting/statistics/template_cover_error.rb
|
236
239
|
- lib/fitting/statistics/template_cover_error_enum.rb
|
240
|
+
- lib/fitting/statistics/template_cover_error_one_of.rb
|
237
241
|
- lib/fitting/storage/responses.rb
|
238
242
|
- lib/fitting/storage/white_list.rb
|
239
243
|
- lib/fitting/templates/realized_template.rb
|