ae_easy-qa 0.0.9 → 0.0.10
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 597f50e50e2fd8e79fc77a50126aa15dcf1ff7ece78e3991e789281b8f446ae2
|
4
|
+
data.tar.gz: eebfe4e91cc368fec3483e99b5c5f2c35f48b022397f63a3ba43e502f59c1ef2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41ec82cf6471504ead3385e7aa6d1d74c213cce2f0b3be741b8e16f015b1c40e9a6eae816e6a19a3519a7856dac13e0cb3afb8d12d3b9f52272a0804d5b4fa98
|
7
|
+
data.tar.gz: bc7dd542130a0bc709d29050b1e0757ad7f61bc482caa710edb76cc3c32d8096449e47b5bc6602701e01120b9b308dab66e15b3774b9ed3bc03d4b810cd55b33
|
@@ -1,16 +1,23 @@
|
|
1
1
|
module AeEasy
|
2
2
|
module Qa
|
3
3
|
class SaveOutput
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :total_items, :rules, :errors, :collection_name,
|
5
|
+
:outputs, :summary, :error_totals, :fields_to_ignore
|
5
6
|
|
6
|
-
def initialize(errors, collection_name, outputs)
|
7
|
+
def initialize(total_items, rules, errors, collection_name, outputs)
|
8
|
+
@total_items = total_items
|
9
|
+
@rules = rules
|
7
10
|
@errors = errors
|
8
11
|
@collection_name = collection_name
|
9
12
|
@outputs = outputs
|
10
13
|
@summary = Hash.new(0)
|
14
|
+
@error_totals = {}
|
15
|
+
@fields_to_ignore = []
|
11
16
|
end
|
12
17
|
|
13
18
|
def run
|
19
|
+
gather_threshold_totals
|
20
|
+
gather_fields_to_ignore
|
14
21
|
save_group_errors
|
15
22
|
save_errors
|
16
23
|
save_summary
|
@@ -18,6 +25,30 @@ module AeEasy
|
|
18
25
|
|
19
26
|
private
|
20
27
|
|
28
|
+
def gather_threshold_totals
|
29
|
+
rules.each{|field_to_validate, options|
|
30
|
+
if options['threshold']
|
31
|
+
error_total = errors[:errored_items].inject(0){|total, errored_item|
|
32
|
+
failed_fields = errored_item[:failures].collect{|failure|
|
33
|
+
extract_field(failure.keys.first)
|
34
|
+
}.uniq
|
35
|
+
total + 1 if failed_fields.include?(field_to_validate)
|
36
|
+
}
|
37
|
+
error_totals[field_to_validate] = error_total
|
38
|
+
end
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def gather_fields_to_ignore
|
43
|
+
rules.each{|field_to_validate, options|
|
44
|
+
if options['threshold']
|
45
|
+
total_errors = error_totals[field_to_validate]
|
46
|
+
success_ratio = (total_items - total_errors).to_f / total_items
|
47
|
+
fields_to_ignore.push(field_to_validate) if success_ratio > options['threshold']
|
48
|
+
end
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
21
52
|
def save_group_errors
|
22
53
|
errors.each{|error_name, output_hash|
|
23
54
|
if error_name != :errored_items
|
@@ -29,20 +60,37 @@ module AeEasy
|
|
29
60
|
|
30
61
|
def save_errors
|
31
62
|
errors[:errored_items].each do |errored_item|
|
63
|
+
remove_threshold_failures(errored_item) if fields_to_ignore.any?
|
32
64
|
errored_item[:failures].each do |failure|
|
33
65
|
key = "#{failure.keys.first.to_s}_#{failure.values.first.to_s}"
|
34
66
|
summary[key] += 1
|
35
67
|
end
|
36
68
|
errored_item['_collection'] = collection_name
|
37
|
-
outputs << errored_item
|
69
|
+
outputs << errored_item if errored_item[:failures].any?
|
38
70
|
end
|
39
71
|
end
|
40
72
|
|
73
|
+
def remove_threshold_failures(errored_item)
|
74
|
+
errored_item[:failures].delete_if{|failure_h|
|
75
|
+
field_name = extract_field(failure_h.keys.first)
|
76
|
+
fields_to_ignore.include?(field_name)
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
41
80
|
def save_summary
|
42
81
|
if summary.any?
|
43
|
-
summary['_collection'] = "#{collection_name}_summary"
|
44
82
|
outputs << summary
|
83
|
+
else
|
84
|
+
summary['pass'] = 'true'
|
45
85
|
end
|
86
|
+
summary['_collection'] = "#{collection_name}_summary"
|
87
|
+
summary['total_items'] = total_items
|
88
|
+
end
|
89
|
+
|
90
|
+
def extract_field(field_sym)
|
91
|
+
a = field_sym.to_s.split('_')
|
92
|
+
a.pop
|
93
|
+
a.join('_')
|
46
94
|
end
|
47
95
|
end
|
48
96
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module AeEasy
|
2
2
|
module Qa
|
3
3
|
class ValidateExternal
|
4
|
-
attr_reader :data, :errors, :
|
4
|
+
attr_reader :data, :errors, :rules, :outputs, :collection_name
|
5
5
|
|
6
6
|
def initialize(data, config, outputs, collection_name)
|
7
7
|
@data = data
|
8
|
-
@
|
8
|
+
@rules = config['individual_validations'] if config
|
9
9
|
@outputs = outputs
|
10
10
|
@collection_name = collection_name
|
11
11
|
@errors = { errored_items: [] }
|
@@ -14,8 +14,8 @@ module AeEasy
|
|
14
14
|
def run
|
15
15
|
begin
|
16
16
|
ValidateGroups.new(data, collection_name, errors).run
|
17
|
-
ValidateRules.new(data, errors,
|
18
|
-
SaveOutput.new(errors, collection_name, outputs).run
|
17
|
+
ValidateRules.new(data, errors, rules).run if rules
|
18
|
+
SaveOutput.new(data.count, rules, errors, collection_name, outputs).run
|
19
19
|
return errors
|
20
20
|
rescue StandardError => e
|
21
21
|
puts "An error has occurred: #{e}"
|
@@ -79,8 +79,8 @@ module AeEasy
|
|
79
79
|
|
80
80
|
def run
|
81
81
|
ValidateGroups.new(data, collection_name, errors).run
|
82
|
-
ValidateRules.new(data, errors, rules).run
|
83
|
-
SaveOutput.new(errors, outputs_collection_name, outputs).run
|
82
|
+
ValidateRules.new(data, errors, rules).run if rules
|
83
|
+
SaveOutput.new(data, rules, errors, outputs_collection_name, outputs).run
|
84
84
|
end
|
85
85
|
|
86
86
|
private
|
@@ -31,7 +31,7 @@ module AeEasy
|
|
31
31
|
ValidateValue.new(data_hash, field_to_validate, value, errored_item).run if options['required']
|
32
32
|
when 'length'
|
33
33
|
validate_length(data_hash, field_to_validate, value) if options['required']
|
34
|
-
when
|
34
|
+
when /required|threshold/
|
35
35
|
nil
|
36
36
|
else
|
37
37
|
unknown_validation_error(validation) if validation !~ /format/
|
data/lib/ae_easy/qa/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ae_easy-qa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Lynam
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: answersengine
|
@@ -107,7 +107,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
109
|
requirements: []
|
110
|
-
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 2.7.8
|
111
112
|
signing_key:
|
112
113
|
specification_version: 4
|
113
114
|
summary: AnswersEngine Easy Quality Assurance gem
|