ae_easy-qa 0.0.20 → 0.0.21

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
  SHA256:
3
- metadata.gz: c72d5444ae19255110461dc0c1ec0ce4651511f82310098b7824aff7e59b2ead
4
- data.tar.gz: 7bec17a2a260cae2aadf815fa6ecb36bed838aa2170899848fea1b23096ab671
3
+ metadata.gz: b37b9eefd295fd1816c02b906a56eeb0ed2d0a8108c3e93992e4953f36786387
4
+ data.tar.gz: f8e58457cf18340e6879d088e94031cdc869c05866324474a68465b9aa9318f7
5
5
  SHA512:
6
- metadata.gz: 81a5b662767655e43daa1d20f7d3f9734b2015ff2e88eb1ce04b7e075ed46300f31d6f1c3ead94461ce276c126d3259b271d01217c312158dfa6814804b171a0
7
- data.tar.gz: 0c33dd4a14929970df2d5d7c40121dc3877eddf781c93e1406c66625d6ae4c2df2b3dedfbaec1d7cff7dcb0954473ad413c0e10d4cd1a2304f14993437756164
6
+ metadata.gz: e2ed8e4b43bef024e4543255123a3df6423ffd6a3c3a72d4bb0b440bcc6eb92c86591ddcf9dbccf0ebcc53b42756c0cf6b191ac4ffa9c2f130a3964d47dbda4d
7
+ data.tar.gz: 284d9e40adb10130d153a6758714af314e228352e805d6882dbf5acb695cd59ea41692db999305d3c294b93ee3e39f41832b63a9f2c7a05ee1567fb83747d398
@@ -14,10 +14,11 @@ module AeEasy
14
14
  module Qa
15
15
  class Validator
16
16
  attr_accessor :config
17
- attr_reader :data, :errors
17
+ attr_reader :data, :options, :errors
18
18
 
19
19
  def initialize(data=nil, options={})
20
20
  load_config
21
+ @options = options
21
22
  @data = data
22
23
  end
23
24
 
@@ -26,7 +27,7 @@ module AeEasy
26
27
  end
27
28
 
28
29
  def validate_external(outputs, collection_name)
29
- ValidateExternal.new(data, config, outputs, collection_name).run
30
+ ValidateExternal.new(data, config, outputs, collection_name, options).run
30
31
  end
31
32
 
32
33
  private
@@ -2,17 +2,20 @@ module AeEasy
2
2
  module Qa
3
3
  class SaveOutput
4
4
  attr_reader :total_items, :rules, :errors, :collection_name,
5
- :outputs, :summary, :error_totals, :fields_to_ignore
5
+ :outputs, :summary, :error_totals, :fields_to_ignore,
6
+ :specific_validations_to_ignore, :options
6
7
 
7
- def initialize(total_items, rules, errors, collection_name, outputs)
8
+ def initialize(total_items, rules, errors, collection_name, outputs, options)
8
9
  @total_items = total_items
9
10
  @rules = rules
10
11
  @errors = errors
11
12
  @collection_name = collection_name
12
13
  @outputs = outputs
14
+ @options = options
13
15
  @summary = Hash.new(0)
14
16
  @error_totals = {}
15
17
  @fields_to_ignore = []
18
+ @specific_validations_to_ignore = []
16
19
  end
17
20
 
18
21
  def run
@@ -26,29 +29,66 @@ module AeEasy
26
29
  private
27
30
 
28
31
  def gather_threshold_totals
29
- rules.each{|field_to_validate, options|
30
- if options['threshold']
32
+ rules.each{|field_to_validate, field_options|
33
+ field_threshold = return_threshold(field_to_validate, field_options)
34
+ if field_threshold
31
35
  error_total = errors[:errored_items].inject(0){|total, errored_item|
32
36
  failed_fields = errored_item[:failures].keys.collect{|failure_key|
33
37
  extract_field(failure_key)
34
38
  }.uniq
35
- total + 1 if failed_fields.include?(field_to_validate)
39
+ total += 1 if failed_fields.include?(field_to_validate)
40
+ total
36
41
  }
37
42
  error_totals[field_to_validate] = error_total
43
+ else
44
+ field_options.each do |validation|
45
+ potential_failure_name = "#{field_to_validate}_#{validation[0]}_fail"
46
+ if options['thresholds'][potential_failure_name]
47
+ error_total = errors[:errored_items].inject(0){|total, errored_item|
48
+ failed_validations = errored_item[:failures].keys.collect{|failure_key|
49
+ "#{failure_key}_fail"
50
+ }
51
+ total += 1 if failed_validations.include?(potential_failure_name)
52
+ total
53
+ }
54
+ error_totals[potential_failure_name] = error_total
55
+ end
56
+ end
38
57
  end
39
58
  }
40
59
  end
41
60
 
42
61
  def gather_fields_to_ignore
43
- rules.each{|field_to_validate, options|
44
- if options['threshold']
62
+ rules.each{|field_to_validate, field_options|
63
+ field_threshold = return_threshold(field_to_validate, field_options)
64
+ if field_threshold
45
65
  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']
66
+ if total_errors
67
+ success_ratio = (total_items - total_errors).to_f / total_items
68
+ fields_to_ignore.push(field_to_validate) if success_ratio > field_threshold
69
+ end
70
+ else
71
+ field_options.each do |validation|
72
+ potential_failure_name = "#{field_to_validate}_#{validation[0]}_fail"
73
+ total_errors = error_totals[potential_failure_name]
74
+ if total_errors
75
+ specific_validation_threshold = options['thresholds'][potential_failure_name].to_f
76
+ success_ratio = (total_items - total_errors).to_f / total_items
77
+ specific_validations_to_ignore.push(potential_failure_name) if success_ratio > specific_validation_threshold
78
+ end
79
+ end
48
80
  end
49
81
  }
50
82
  end
51
83
 
84
+ def return_threshold(field_to_validate, field_options)
85
+ if options['thresholds']
86
+ options['thresholds'][field_to_validate]
87
+ else
88
+ field_options['threshold'] || options['threshold']
89
+ end
90
+ end
91
+
52
92
  def save_group_errors
53
93
  errors.each{|error_name, output_hash|
54
94
  if error_name != :errored_items
@@ -60,7 +100,7 @@ module AeEasy
60
100
 
61
101
  def save_errors
62
102
  errors[:errored_items].each do |errored_item|
63
- remove_threshold_failures(errored_item) if fields_to_ignore.any?
103
+ remove_threshold_failures(errored_item) if fields_to_ignore.any? || specific_validations_to_ignore.any?
64
104
  errored_item[:failures].each do |error_key, value|
65
105
  key = "#{error_key.to_s}_#{value.to_s}"
66
106
  summary[key] += 1
@@ -72,8 +112,9 @@ module AeEasy
72
112
 
73
113
  def remove_threshold_failures(errored_item)
74
114
  errored_item[:failures].delete_if{|error_name, fail|
115
+ specific_validation_name = "#{error_name}_fail"
75
116
  field_name = extract_field(error_name)
76
- fields_to_ignore.include?(field_name)
117
+ fields_to_ignore.include?(field_name) || specific_validations_to_ignore.include?(specific_validation_name)
77
118
  }
78
119
  end
79
120
 
@@ -1,13 +1,14 @@
1
1
  module AeEasy
2
2
  module Qa
3
3
  class ValidateExternal
4
- attr_reader :data, :errors, :rules, :outputs, :collection_name
4
+ attr_reader :data, :errors, :rules, :outputs, :collection_name, :options
5
5
 
6
- def initialize(data, config, outputs, collection_name)
6
+ def initialize(data, config, outputs, collection_name, options)
7
7
  @data = data
8
8
  @rules = config['individual_validations'] if config
9
9
  @outputs = outputs
10
10
  @collection_name = collection_name
11
+ @options = options
11
12
  @errors = { errored_items: [] }
12
13
  end
13
14
 
@@ -17,7 +18,7 @@ module AeEasy
17
18
  ValidateGroups.new(data, nil, collection_name, errors).run
18
19
  ValidateRules.new(data, errors, rules).run if rules
19
20
  end
20
- SaveOutput.new(data.count, rules, errors, collection_name, outputs).run
21
+ SaveOutput.new(data.count, rules, errors, collection_name, outputs, options).run
21
22
  return errors
22
23
  rescue StandardError => e
23
24
  puts "An error has occurred: #{e}"
@@ -88,7 +88,7 @@ module AeEasy
88
88
  ValidateGroups.new(data, scraper_name, collection_name, errors).run
89
89
  ValidateRules.new(data, errors, rules).run if rules
90
90
  end
91
- SaveOutput.new(data.count, rules, errors, outputs_collection_name, outputs).run
91
+ SaveOutput.new(data.count, rules, errors, outputs_collection_name, outputs, {}).run
92
92
  end
93
93
 
94
94
  private
@@ -1,5 +1,5 @@
1
1
  module AeEasy
2
2
  module Qa
3
- VERSION = "0.0.20"
3
+ VERSION = "0.0.21"
4
4
  end
5
5
  end
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.20
4
+ version: 0.0.21
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-07-25 00:00:00.000000000 Z
11
+ date: 2019-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: answersengine