fitting 2.7.2 → 2.10.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: 84283dbea86e6b51feff80746c42083581d41062
4
- data.tar.gz: 2e7bfe061b7da0572fec39b8dda02ce9cd0a1a64
3
+ metadata.gz: f8a58b7be52158cd26f8ae3fd7454cbc89512610
4
+ data.tar.gz: cb6bb15b054e2ec15e6262d16e3c697932d81640
5
5
  SHA512:
6
- metadata.gz: c507b40654e438c1123080328253b112803de9e407c3134eee4d321d25e43cca9e3966e96d7d48f6a51b17faec3be252b5468230fff8ffeaf7cea2af17050114
7
- data.tar.gz: 67e50590a29a8ece5903df6db5c263d787f19a647a7fba1631ec354e404c665036070ce7cf0aad76b0be3b7fc2fcfd0e141a84b97165b79a570ebf7336bf11ee
6
+ metadata.gz: ffb5323b7ab335ad9f2ad966c7bfd2249b9388dcc9d434f35eff2f7626ba97ce3a5ac5f6bf386041840f7db397fe8c596ae52c95406e584120558865340a8742
7
+ data.tar.gz: 8db3c993339889701401ec962e0576f31ea746cbec06e3c5f326fe07487527cec79d36a20a7de0c5949418ebf2e2aaee5b9c269e03446a740530a0006535d51e
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
  /tmp/
10
10
  .idea/
11
11
  .byebug_history
12
+ .tool-versions
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.0
data/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Change log
2
2
 
3
+ ### 2.10.0 - 2019-09-05
4
+
5
+ * features
6
+ * add crafter_yaml_path
7
+
8
+ ### 2.9.1 - 2019-07-15
9
+
10
+ * fixes
11
+ * Improve gemspec
12
+ * Delete experimental code with haml
13
+
14
+ ### 2.9.0 - 2019-07-15
15
+
16
+ * features
17
+ * Delete old spec json
18
+ * fixes
19
+ * Improve gemspec
20
+
21
+ ### 2.8.1 - 2018-12-18
22
+
23
+ * features
24
+ * Add support for [parallel_tests](https://github.com/grosser/parallel_tests)
25
+
26
+ ### 2.8.0 - 2018-10-13
27
+
28
+ * features
29
+ * Add m size (for cover enum in json-schema) in rake tasks fitting:documentation_responses, fitting:documentation_responses_error
30
+
3
31
  ### 2.7.2 - 2018-09-08
4
32
 
5
33
  * fixes
data/README.md CHANGED
@@ -42,7 +42,7 @@ require 'fitting'
42
42
  Fitting.save_test_data
43
43
  ```
44
44
 
45
- The tests.json file will be created
45
+ The files will be created in ./fitting_tests/ path
46
46
 
47
47
  Example:
48
48
 
@@ -112,7 +112,7 @@ API responses with validation errors or untested: 9 (36.00% of 25).
112
112
 
113
113
  ### s size
114
114
 
115
- In addition to the previous comand, you will learn the coverage json-schemas with task `rake fitting:documentation_responses[s]`
115
+ In addition to the previous comand, you will learn the coverage(required) json-schemas with task `rake fitting:documentation_responses[s]`
116
116
 
117
117
  ```
118
118
  Fully conforming requests:
@@ -141,14 +141,19 @@ 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", ...}
150
150
  ```
151
151
 
152
+ ### m size
153
+
154
+ In addition to the previous comand, you will learn the coverage(enum) json-schemas with task `rake fitting:documentation_responses[m]`
155
+ For details `rake fitting:documentation_responses_error[m]`
156
+
152
157
  ## Check tests cover
153
158
 
154
159
  ### xs size
@@ -168,6 +173,14 @@ Path to API Blueprint documentation. There must be an installed [drafter](https:
168
173
 
169
174
  Path to API Blueprint documentation pre-parsed with `drafter` and saved to a YAML file.
170
175
 
176
+ ### crafter_yaml_path
177
+
178
+ Path to API Blueprint documentation pre-parsed with `crafter` and saved to a YAML file.
179
+
180
+ ### tomogram_json_path
181
+
182
+ Path to Tomogram documentation pre-parsed with [tomograph](https://github.com/funbox/tomograph) and saved to a JSON file.
183
+
171
184
  ### strict
172
185
 
173
186
  Default `false`. If `true` then all properties are condisidered to have `"required": true` and all objects `"additionalProperties": false`.
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)
@@ -20,11 +20,18 @@ module Fitting
20
20
  end
21
21
 
22
22
  def tomogram
23
- @tomogram ||= Tomograph::Tomogram.new(
24
- prefix: @prefix,
25
- apib_path: @apib_path,
26
- drafter_yaml_path: @drafter_yaml_path
27
- )
23
+ @tomogram ||= if @crafter_yaml_path
24
+ Tomograph::Tomogram.new(
25
+ prefix: @prefix,
26
+ apib_path: @apib_path,
27
+ crafter_yaml_path: @crafter_yaml_path
28
+ )
29
+ else Tomograph::Tomogram.new(
30
+ prefix: @prefix,
31
+ apib_path: @apib_path,
32
+ drafter_yaml_path: @drafter_yaml_path
33
+ )
34
+ end
28
35
  end
29
36
 
30
37
  def title
@@ -6,6 +6,7 @@ module Fitting
6
6
  attr_reader :title
7
7
  attr_accessor :apib_path,
8
8
  :drafter_yaml_path,
9
+ :crafter_yaml_path,
9
10
  :tomogram_json_path,
10
11
  :strict,
11
12
  :prefix,
@@ -18,6 +19,7 @@ module Fitting
18
19
  def initialize(yaml, title = 'fitting')
19
20
  @apib_path = yaml['apib_path']
20
21
  @drafter_yaml_path = yaml['drafter_yaml_path']
22
+ @crafter_yaml_path = yaml['crafter_yaml_path']
21
23
  @tomogram_json_path = yaml['tomogram_json_path']
22
24
  @strict = yaml['strict']
23
25
  @prefix = yaml['prefix']
@@ -31,12 +33,21 @@ module Fitting
31
33
  end
32
34
 
33
35
  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
- )
36
+ @tomogram ||= if @crafter_yaml_path
37
+ Tomograph::Tomogram.new(
38
+ prefix: @prefix,
39
+ apib_path: @apib_path,
40
+ crafter_yaml_path: @crafter_yaml_path,
41
+ tomogram_json_path: @tomogram_json_path
42
+ )
43
+ else
44
+ Tomograph::Tomogram.new(
45
+ prefix: @prefix,
46
+ apib_path: @apib_path,
47
+ drafter_yaml_path: @drafter_yaml_path,
48
+ tomogram_json_path: @tomogram_json_path
49
+ )
50
+ end
40
51
  end
41
52
 
42
53
  def stats_path
@@ -0,0 +1,88 @@
1
+ module Fitting
2
+ class Cover
3
+ class JSONSchemaEnum
4
+ def initialize(json_schema)
5
+ @json_schema = json_schema
6
+ end
7
+
8
+ def combi
9
+ return @combinations if @combinations
10
+ @combinations = []
11
+
12
+ return @combinations unless @json_schema['properties']
13
+ @combinations = new_super_each(@json_schema['properties'], { 'properties' => nil }, @json_schema, @combinations, 'properties')
14
+
15
+ @combinations
16
+ end
17
+
18
+ def new_super_each(json_schema, old_keys_hash, lol_schema, combinations, old_key)
19
+ json_schema.each do |key, value|
20
+ next unless value.is_a?(Hash)
21
+
22
+ new_keys_hash = clone_hash(old_keys_hash)
23
+ add_super_key(new_keys_hash, key)
24
+
25
+ combinations = new_super_each(value, new_keys_hash, lol_schema, combinations, [old_key, key].compact.join('.'))
26
+
27
+ qwe = new_enum(value)
28
+ qwe.map do |asd|
29
+ new_json_shema = clone_hash(lol_schema)
30
+ super_merge(new_keys_hash, asd[0], new_json_shema)
31
+ combinations.push([new_json_shema, [asd[1][0], [old_key, key, asd[1][1]].compact.join('.')]])
32
+ end
33
+ end
34
+ combinations
35
+ end
36
+
37
+ def add_super_key(vbn, new_key)
38
+ vbn.each do |key, value|
39
+ if value
40
+ add_super_key(value, new_key)
41
+ else
42
+ vbn[key] = { new_key => nil }
43
+ end
44
+ end
45
+ end
46
+
47
+ def super_merge(vbn, asd, old_json_schema)
48
+ vbn.each do |key, value|
49
+ if value
50
+ super_merge(value, asd, old_json_schema[key])
51
+ else
52
+ old_json_schema[key].merge!(asd)
53
+ end
54
+ end
55
+ old_json_schema
56
+ end
57
+
58
+ def clone_hash(old_json_schema)
59
+ new_json_schema = {}
60
+ old_json_schema.each do |key, value|
61
+ if value.is_a?(Hash)
62
+ new_json_schema.merge!(key => clone_hash(value))
63
+ elsif value
64
+ new_json_schema.merge!(key => value.clone)
65
+ else
66
+ new_json_schema.merge!(key => nil)
67
+ end
68
+ end
69
+ new_json_schema
70
+ end
71
+
72
+ def new_enum(json_schema)
73
+ res = []
74
+ new_keys(json_schema).map do |new_key|
75
+ new_json_shema = json_schema.dup
76
+ new_json_shema['enum'] = [new_key]
77
+ res.push([new_json_shema, ['enum', new_key]])
78
+ end
79
+ res
80
+ end
81
+
82
+ def new_keys(json_schema)
83
+ return [] unless json_schema['enum']
84
+ json_schema['enum']
85
+ end
86
+ end
87
+ end
88
+ end
@@ -8,7 +8,10 @@ module Fitting
8
8
  def to_a
9
9
  return @to_a if @to_a
10
10
 
11
- array = JSON.load(File.read('tests.json'))
11
+ array = []
12
+ Dir['fitting_tests/*.json'].each do |file|
13
+ array += JSON.load(File.read(file))
14
+ end
12
15
  @to_a = array.inject([]) do |res, tested_request|
13
16
  res.push(Fitting::Records::Spherical::Request.load(tested_request))
14
17
  end
@@ -1,5 +1,6 @@
1
1
  require 'json-schema'
2
2
  require 'fitting/cover/json_schema'
3
+ require 'fitting/cover/json_schema_enum'
3
4
  require 'fitting/records/unit/combination'
4
5
 
5
6
  module Fitting
@@ -30,13 +31,26 @@ module Fitting
30
31
  cover_json_schema = Fitting::Cover::JSONSchema.new(@json_schema)
31
32
  cover_json_schema.combi.map do |comb|
32
33
  @combinations.push(Fitting::Records::Unit::Combination.new(
33
- comb,
34
- bodies
34
+ comb,
35
+ bodies
35
36
  ))
36
37
  end
37
38
  @combinations
38
39
  end
39
40
 
41
+ def combinations_with_enum
42
+ return @combinations_with_enum if @combinations_with_enum
43
+ @combinations_with_enum = []
44
+ qwe = Fitting::Cover::JSONSchema.new(@json_schema).combi + Fitting::Cover::JSONSchemaEnum.new(@json_schema).combi
45
+ qwe.map do |comb|
46
+ @combinations_with_enum.push(Fitting::Records::Unit::Combination.new(
47
+ comb,
48
+ bodies
49
+ ))
50
+ end
51
+ @combinations_with_enum
52
+ end
53
+
40
54
  def cover
41
55
  @cover ||= if bodies == []
42
56
  0
@@ -48,6 +62,18 @@ module Fitting
48
62
  (count + 1) * 100 / (combinations.size + 1)
49
63
  end
50
64
  end
65
+
66
+ def cover_enum
67
+ @cover_enum ||= if bodies == []
68
+ 0
69
+ else
70
+ count = 0
71
+ combinations_with_enum.map do |combination|
72
+ count += 1 unless combination.valid_bodies == []
73
+ end
74
+ (count + 1) * 100 / (combinations_with_enum.size + 1)
75
+ end
76
+ end
51
77
  end
52
78
  end
53
79
  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
@@ -0,0 +1,27 @@
1
+ module Fitting
2
+ class Statistics
3
+ class CoverErrorEnum
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_enum.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
@@ -41,8 +41,10 @@ module Fitting
41
41
  else
42
42
  res.push("✔ #{response.status}")
43
43
  end
44
- else
44
+ elsif @depth == 'cover'
45
45
  res.push("#{json_schema.cover}% #{response.status}")
46
+ elsif @depth == 'cover_enum'
47
+ res.push("#{json_schema.cover_enum}% #{response.status}")
46
48
  end
47
49
  end
48
50
  end
@@ -0,0 +1,92 @@
1
+ module Fitting
2
+ class Statistics
3
+ class MeasurementCoverEnum
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_enum != 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_enum != 100
85
+ @not_cover += 1
86
+ else
87
+ @cover += 1
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -2,6 +2,7 @@ require 'fitting/statistics/not_covered_responses'
2
2
  require 'fitting/statistics/analysis'
3
3
  require 'fitting/statistics/measurement'
4
4
  require 'fitting/statistics/measurement_cover'
5
+ require 'fitting/statistics/measurement_cover_enum'
5
6
  require 'fitting/records/unit/request'
6
7
  require 'fitting/storage/white_list'
7
8
  require 'fitting/records/documented/request'
@@ -48,8 +49,10 @@ module Fitting
48
49
  @white_measurement ||=
49
50
  if @depth == 'valid'
50
51
  Fitting::Statistics::Measurement.new(white_unit)
51
- else
52
+ elsif @depth == 'cover'
52
53
  Fitting::Statistics::MeasurementCover.new(white_unit)
54
+ elsif @depth == 'cover_enum'
55
+ Fitting::Statistics::MeasurementCoverEnum.new(white_unit)
53
56
  end
54
57
  end
55
58
 
@@ -57,8 +60,10 @@ module Fitting
57
60
  @black_measurement ||=
58
61
  if @depth == 'valid'
59
62
  Fitting::Statistics::Measurement.new(black_unit)
60
- else
63
+ elsif @depth == 'cover'
61
64
  Fitting::Statistics::MeasurementCover.new(black_unit)
65
+ elsif @depth == 'cover_enum'
66
+ Fitting::Statistics::MeasurementCoverEnum.new(black_unit)
62
67
  end
63
68
  end
64
69
 
@@ -0,0 +1,50 @@
1
+ require 'fitting/statistics/cover_error_enum'
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 TemplateCoverErrorEnum
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::CoverErrorEnum.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/tests.rb CHANGED
@@ -7,12 +7,14 @@ module Fitting
7
7
  end
8
8
 
9
9
  def save
10
+ make_dir('fitting_tests')
10
11
  array = @tested_requests.inject([]) do |res, request|
11
12
  next res unless request.path.to_s.start_with?(Fitting.configuration.prefix)
12
13
  res.push(request.to_spherical.to_hash)
13
14
  end
14
15
  json = JSON.dump(array)
15
- File.open('tests.json', 'w') { |file| file.write(json) }
16
+
17
+ File.open("fitting_tests/test#{ENV["TEST_ENV_NUMBER"]}.json", 'w') { |file| file.write(json) }
16
18
  end
17
19
 
18
20
  def make_dir(dir_name)
@@ -1,3 +1,3 @@
1
1
  module Fitting
2
- VERSION = '2.7.2'.freeze
2
+ VERSION = '2.10.0'.freeze
3
3
  end
@@ -3,6 +3,7 @@ require 'fitting/configuration'
3
3
  require 'fitting/records/realized_unit'
4
4
  require 'fitting/templates/realized_template'
5
5
  require 'fitting/statistics/template_cover_error'
6
+ require 'fitting/statistics/template_cover_error_enum'
6
7
 
7
8
  namespace :fitting do
8
9
  desc 'Fitting documentation'
@@ -40,12 +41,24 @@ namespace :fitting do
40
41
  )
41
42
  puts documented_unit.stats
42
43
 
44
+ unless documented_unit.not_covered == "\n"
45
+ puts 'Not all responses from the whitelist are covered!'
46
+ exit 1
47
+ end
48
+ elsif args.size == 'm'
49
+ documented_unit = Fitting::Statistics::Template.new(
50
+ Fitting::Records::Spherical::Requests.new,
51
+ Fitting.configuration,
52
+ 'cover_enum'
53
+ )
54
+ puts documented_unit.stats
55
+
43
56
  unless documented_unit.not_covered == "\n"
44
57
  puts 'Not all responses from the whitelist are covered!'
45
58
  exit 1
46
59
  end
47
60
  else
48
- puts 'need key xs or s'
61
+ puts 'need key xs, s or m'
49
62
  end
50
63
  end
51
64
 
@@ -57,8 +70,14 @@ namespace :fitting do
57
70
  Fitting.configuration
58
71
  )
59
72
  puts documented_unit.stats
73
+ elsif args.size == 'm'
74
+ documented_unit = Fitting::Statistics::TemplateCoverErrorEnum.new(
75
+ Fitting::Records::Spherical::Requests.new,
76
+ Fitting.configuration
77
+ )
78
+ puts documented_unit.stats
60
79
  else
61
- puts 'need key s'
80
+ puts 'need key s or m'
62
81
  end
63
82
  end
64
83
 
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.7.2
4
+ version: 2.10.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-09-07 00:00:00.000000000 Z
11
+ date: 2019-09-05 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
@@ -195,6 +181,7 @@ extra_rdoc_files: []
195
181
  files:
196
182
  - ".gitignore"
197
183
  - ".rubocop.yml"
184
+ - ".ruby-version"
198
185
  - ".travis.yml"
199
186
  - CHANGELOG.md
200
187
  - CODE_OF_CONDUCT.md
@@ -209,8 +196,8 @@ files:
209
196
  - lib/fitting/configuration.rb
210
197
  - lib/fitting/configuration/legacy.rb
211
198
  - lib/fitting/configuration/yaml.rb
212
- - lib/fitting/cover.rb
213
199
  - lib/fitting/cover/json_schema.rb
200
+ - lib/fitting/cover/json_schema_enum.rb
214
201
  - lib/fitting/cover/response.rb
215
202
  - lib/fitting/documentation.rb
216
203
  - lib/fitting/matchers/response_matcher.rb
@@ -233,17 +220,20 @@ files:
233
220
  - lib/fitting/statistics.rb
234
221
  - lib/fitting/statistics/analysis.rb
235
222
  - lib/fitting/statistics/cover_error.rb
223
+ - lib/fitting/statistics/cover_error_enum.rb
236
224
  - lib/fitting/statistics/great.rb
237
225
  - lib/fitting/statistics/list.rb
238
226
  - lib/fitting/statistics/lists.rb
239
227
  - lib/fitting/statistics/measurement.rb
240
228
  - lib/fitting/statistics/measurement_cover.rb
229
+ - lib/fitting/statistics/measurement_cover_enum.rb
241
230
  - lib/fitting/statistics/not_covered_responses.rb
242
231
  - lib/fitting/statistics/percent.rb
243
232
  - lib/fitting/statistics/requests_stats.rb
244
233
  - lib/fitting/statistics/responses_stats.rb
245
234
  - lib/fitting/statistics/template.rb
246
235
  - lib/fitting/statistics/template_cover_error.rb
236
+ - lib/fitting/statistics/template_cover_error_enum.rb
247
237
  - lib/fitting/storage/responses.rb
248
238
  - lib/fitting/storage/white_list.rb
249
239
  - 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