fitting 2.8.1 → 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 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