fitting 2.8.1 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: edafbec6cdccc2ef4325f10095bcd6519ffc7e67
4
- data.tar.gz: 1eba55294c0d386d49bddbaae04426c7ab0d8dca
3
+ metadata.gz: 8234af5ba817adef5ce3ff1bf03d4e84c7747169
4
+ data.tar.gz: c8a247c8467765022ef0f5f2c7b58b669464cdaf
5
5
  SHA512:
6
- metadata.gz: f5b3446b91bec433494518e598a67941c3131738304c85414fa445909fad34de07cef39ed40b5a407609fadc6f812f380299cd8629701aca2d19b1931bbdba19
7
- data.tar.gz: 84eed7d30ef18e7261185dc4c4acbccc86151c0e019ff3e4565d546f11f8a8d8b17480e21d1cece16ba7049377a395a1ed330cccccfcdb25741cc49b53ac1bf5
6
+ metadata.gz: 00863f51cc9692a16ce6cb24aaf83309c4490daac1430081e45081e3c5d24dfe6dba0e17b1df659f3ee84a0b1e49ecaa8c76a1ef5bfc301a70752db6beeafe18
7
+ data.tar.gz: fda881919cf0c1bef0ed9228a8d450e866e234da599822f843bed76a146b02ebc143d85d87bda60c294603066a98c4179f9e7dc27162f7b91489eb9d9b90563f
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
  /tmp/
10
10
  .idea/
11
11
  .byebug_history
12
+ .tool-versions
data/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # Change log
2
2
 
3
+ ### 2.12.0 - 2019-09-10
4
+
5
+ * features
6
+ * Add l size (for cover oneOf in json-schema) in rake tasks fitting:documentation_responses, fitting:documentation_responses_error
7
+
8
+ ### 2.11.0 - 2019-09-09
9
+
10
+ * features
11
+ * crafter_apib_path
12
+ * drafter_4_apib_path
13
+ * drafter_4_yaml_path
14
+
15
+ * fixes
16
+ * crafter_yaml_path
17
+
18
+ ### 2.10.0 - 2019-09-05
19
+
20
+ * features
21
+ * add crafter_yaml_path
22
+
23
+ ### 2.9.1 - 2019-07-15
24
+
25
+ * fixes
26
+ * Improve gemspec
27
+ * Delete experimental code with haml
28
+
29
+ ### 2.9.0 - 2019-07-15
30
+
31
+ * features
32
+ * Delete old spec json
33
+ * fixes
34
+ * Improve gemspec
35
+
3
36
  ### 2.8.1 - 2018-12-18
4
37
 
5
38
  * features
data/README.md CHANGED
@@ -141,9 +141,9 @@ API responses with validation errors or untested: 9 (36.00% of 25).
141
141
  For details `rake fitting:documentation_responses_error[s]`
142
142
 
143
143
  ```
144
- request metohd: GET
144
+ request method: GET
145
145
  request path: /api/v1/book
146
- response staus: 200
146
+ response status: 200
147
147
  source json-schema: {"$schema"=>"http://json-schema.org/draft-04/schema#", "type"=>"object", ...}
148
148
  combination: ["required", "pages"]
149
149
  new json-schema: {"$schema"=>"http://json-schema.org/draft-04/schema#", "type"=>"object", ...}
@@ -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
@@ -167,11 +172,27 @@ If your project uses several prefixes, for each one you need to create a separat
167
172
 
168
173
  ### apib_path
169
174
 
170
- Path to API Blueprint documentation. There must be an installed [drafter](https://github.com/apiaryio/drafter) to parse it.
175
+ Path to API Blueprint v3 documentation. There must be an installed [drafter](https://github.com/apiaryio/drafter) to parse it.
171
176
 
172
177
  ### drafter_yaml_path
173
178
 
174
- Path to API Blueprint documentation pre-parsed with `drafter` and saved to a YAML file.
179
+ Path to API Blueprint v3 documentation pre-parsed with `drafter` and saved to a YAML file.
180
+
181
+ ### drafter_4_apib_path
182
+
183
+ Path to API Blueprint v4 documentation. There must be an installed [drafter](https://github.com/apiaryio/drafter) to parse it.
184
+
185
+ ### drafter_4_yaml_path
186
+
187
+ Path to API Blueprint v4 documentation pre-parsed with `drafter` and saved to a YAML file.
188
+
189
+ ### crafter_apib_path
190
+
191
+ Path to API Blueprint v4 documentation.
192
+
193
+ ### crafter_yaml_path
194
+
195
+ Path to API Blueprint v4 documentation pre-parsed with `crafter` and saved to a YAML file.
175
196
 
176
197
  ### tomogram_json_path
177
198
 
data/fitting.gemspec CHANGED
@@ -18,9 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_runtime_dependency 'haml'
22
21
  spec.add_runtime_dependency 'json-schema', '~> 2.6', '>= 2.6.2'
23
- spec.add_runtime_dependency 'multi_json'
22
+ spec.add_runtime_dependency 'multi_json', '~> 1.11'
24
23
  spec.add_runtime_dependency 'tomograph', '~> 2.0', '>= 2.2.0'
25
24
  spec.add_development_dependency 'bundler', '~> 1.12'
26
25
  spec.add_development_dependency 'byebug', '~> 8.2', '>= 8.2.1'
data/lib/fitting.rb CHANGED
@@ -32,6 +32,8 @@ module Fitting
32
32
  def save_test_data
33
33
  responses = Fitting::Storage::Responses.new
34
34
 
35
+ FileUtils.rm_r Dir.glob("fitting_tests/*"), :force => true
36
+
35
37
  RSpec.configure do |config|
36
38
  config.after(:each, type: :controller) do
37
39
  responses.add(response, inspect)
@@ -5,6 +5,10 @@ module Fitting
5
5
  class Legacy
6
6
  attr_accessor :apib_path,
7
7
  :drafter_yaml_path,
8
+ :crafter_apib_path,
9
+ :crafter_yaml_path,
10
+ :drafter_4_apib_path,
11
+ :drafter_4_yaml_path,
8
12
  :strict,
9
13
  :prefix,
10
14
  :white_list,
@@ -20,11 +24,24 @@ module Fitting
20
24
  end
21
25
 
22
26
  def tomogram
23
- @tomogram ||= Tomograph::Tomogram.new(
24
- prefix: @prefix,
25
- apib_path: @apib_path,
26
- drafter_yaml_path: @drafter_yaml_path
27
- )
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 Tomograph::Tomogram.new(
40
+ prefix: @prefix,
41
+ apib_path: @apib_path,
42
+ drafter_yaml_path: @drafter_yaml_path
43
+ )
44
+ end
28
45
  end
29
46
 
30
47
  def title
@@ -6,6 +6,10 @@ module Fitting
6
6
  attr_reader :title
7
7
  attr_accessor :apib_path,
8
8
  :drafter_yaml_path,
9
+ :crafter_apib_path,
10
+ :crafter_yaml_path,
11
+ :drafter_4_apib_path,
12
+ :drafter_4_yaml_path,
9
13
  :tomogram_json_path,
10
14
  :strict,
11
15
  :prefix,
@@ -18,6 +22,10 @@ module Fitting
18
22
  def initialize(yaml, title = 'fitting')
19
23
  @apib_path = yaml['apib_path']
20
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']
21
29
  @tomogram_json_path = yaml['tomogram_json_path']
22
30
  @strict = yaml['strict']
23
31
  @prefix = yaml['prefix']
@@ -31,12 +39,26 @@ module Fitting
31
39
  end
32
40
 
33
41
  def tomogram
34
- @tomogram ||= Tomograph::Tomogram.new(
35
- prefix: @prefix,
36
- apib_path: @apib_path,
37
- drafter_yaml_path: @drafter_yaml_path,
38
- tomogram_json_path: @tomogram_json_path
39
- )
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
40
62
  end
41
63
 
42
64
  def stats_path
@@ -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
@@ -13,8 +13,8 @@ module Fitting
13
13
  response.json_schemas.map do |json_schema|
14
14
  json_schema.combinations.map do |combination|
15
15
  next unless combination.valid_bodies == []
16
- res += "request metohd: #{request.method}\nrequest path: #{request.path}\n"\
17
- "response staus: #{response.status}\nsource json-schema: #{json_schema.json_schema}\n"\
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
18
  "combination: #{combination.description}\nnew json-schema: #{combination.json_schema}\n\n"
19
19
  end
20
20
  end
@@ -13,8 +13,8 @@ module Fitting
13
13
  response.json_schemas.map do |json_schema|
14
14
  json_schema.combinations_with_enum.map do |combination|
15
15
  next unless combination.valid_bodies == []
16
- res += "request metohd: #{request.method}\nrequest path: #{request.path}\n"\
17
- "response staus: #{response.status}\nsource json-schema: #{json_schema.json_schema}\n"\
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
18
  "combination: #{combination.description}\nnew json-schema: #{combination.json_schema}\n\n"
19
19
  end
20
20
  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
@@ -1,3 +1,3 @@
1
1
  module Fitting
2
- VERSION = '2.8.1'.freeze
2
+ VERSION = '2.12.0'.freeze
3
3
  end
@@ -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 m'
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 m'
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,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fitting
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
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: 2018-12-18 00:00:00.000000000 Z
11
+ date: 2019-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: haml
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: json-schema
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -48,16 +34,16 @@ dependencies:
48
34
  name: multi_json
49
35
  requirement: !ruby/object:Gem::Requirement
50
36
  requirements:
51
- - - ">="
37
+ - - "~>"
52
38
  - !ruby/object:Gem::Version
53
- version: '0'
39
+ version: '1.11'
54
40
  type: :runtime
55
41
  prerelease: false
56
42
  version_requirements: !ruby/object:Gem::Requirement
57
43
  requirements:
58
- - - ">="
44
+ - - "~>"
59
45
  - !ruby/object:Gem::Version
60
- version: '0'
46
+ version: '1.11'
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: tomograph
63
49
  requirement: !ruby/object:Gem::Requirement
@@ -210,9 +196,9 @@ files:
210
196
  - lib/fitting/configuration.rb
211
197
  - lib/fitting/configuration/legacy.rb
212
198
  - lib/fitting/configuration/yaml.rb
213
- - lib/fitting/cover.rb
214
199
  - lib/fitting/cover/json_schema.rb
215
200
  - lib/fitting/cover/json_schema_enum.rb
201
+ - lib/fitting/cover/json_schema_one_of.rb
216
202
  - lib/fitting/cover/response.rb
217
203
  - lib/fitting/documentation.rb
218
204
  - lib/fitting/matchers/response_matcher.rb
@@ -236,12 +222,14 @@ files:
236
222
  - lib/fitting/statistics/analysis.rb
237
223
  - lib/fitting/statistics/cover_error.rb
238
224
  - lib/fitting/statistics/cover_error_enum.rb
225
+ - lib/fitting/statistics/cover_error_one_of.rb
239
226
  - lib/fitting/statistics/great.rb
240
227
  - lib/fitting/statistics/list.rb
241
228
  - lib/fitting/statistics/lists.rb
242
229
  - lib/fitting/statistics/measurement.rb
243
230
  - lib/fitting/statistics/measurement_cover.rb
244
231
  - lib/fitting/statistics/measurement_cover_enum.rb
232
+ - lib/fitting/statistics/measurement_cover_one_of.rb
245
233
  - lib/fitting/statistics/not_covered_responses.rb
246
234
  - lib/fitting/statistics/percent.rb
247
235
  - lib/fitting/statistics/requests_stats.rb
@@ -249,6 +237,7 @@ files:
249
237
  - lib/fitting/statistics/template.rb
250
238
  - lib/fitting/statistics/template_cover_error.rb
251
239
  - lib/fitting/statistics/template_cover_error_enum.rb
240
+ - lib/fitting/statistics/template_cover_error_one_of.rb
252
241
  - lib/fitting/storage/responses.rb
253
242
  - lib/fitting/storage/white_list.rb
254
243
  - lib/fitting/templates/realized_template.rb
data/lib/fitting/cover.rb DELETED
@@ -1,66 +0,0 @@
1
- require 'fitting/cover/response'
2
- require 'haml'
3
- require 'json'
4
-
5
- module Fitting
6
- class Cover
7
- def initialize(all_responses, coverage)
8
- @all_responses = all_responses
9
- @coverage = coverage
10
- @list = {}
11
- end
12
-
13
- def to_hash
14
- return @list unless @list == {}
15
- @all_responses.each_with_object({}) do |response, res|
16
- next res unless response.documented?
17
- if res.key?(response.route)
18
- res[response.route].update(response)
19
- else
20
- res[response.route] = Fitting::Cover::Response.new(response)
21
- end
22
- end.map do |key, value|
23
- @list[key] = value.to_hash
24
- end
25
- @list
26
- end
27
-
28
- def template
29
- return @template if @template
30
- @template = {}
31
- to_hash.each do |key, value|
32
- @template[key] = value
33
- @template[key]['cover'] = 100.0
34
- if value['flags'] == []
35
- @template[key]['type'] = 'passed'
36
- else
37
- flag_true = value['flags'].find_all { |flag| flag == true }
38
- flag_false = value['flags'].find_all { |flag| flag == false }
39
- if flag_false.empty?
40
- @template[key]['type'] = 'passed'
41
- else
42
- @template[key]['cover'] = if flag_true.empty?
43
- 0.0
44
- else
45
- flag_false.size / flag_true.size
46
- end
47
- @template[key]['type'] = 'failed'
48
- end
49
- end
50
- @template[key]['json_schema'] = JSON.pretty_generate(value['json_schemas'].last)
51
- end
52
- @template
53
- end
54
-
55
- def save
56
- to_hash
57
- contents = File.read(File.expand_path('../view/report.html.haml', __FILE__))
58
- html = "<style>\n#{File.read(File.expand_path('../view/style.css', __FILE__))}\n</style>\n"
59
- html += Haml::Engine.new(contents).render(
60
- Object.new,
61
- :@to_hash => template
62
- )
63
- html
64
- end
65
- end
66
- end