ae_easy-qa 0.0.3 → 0.0.4

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: 172e1208f37869ecc60b0baf0ddcfa31af006223f7153e944231b905499b85a5
4
- data.tar.gz: 7c25f94aede5d289722740a37a23630c3b61c2864dfb56b32263c93333f7e172
3
+ metadata.gz: 363c9d9b41cd90e575c4f64e77c044f71ec0e9785e71a69659150ff215411e1f
4
+ data.tar.gz: 5e236351848333d7634534634d77b8f12068a972c20d1f9a592378570a302639
5
5
  SHA512:
6
- metadata.gz: f3b0dac40f664140bd9b0d6b7a628d70a55b3775edd31aa670bfb2f20797a0debe02b50ead75071c31a39d3ab010e021999fccf2f8b012e9af70a9284e663a3f
7
- data.tar.gz: 842ce7c6017d512e5334ac825fe5e98122b3ffecdccccb54f095e1f10fe9cd639bfcd441c3f96a64fc9fae6cccf10f8217bc6ea3707a530f153f59ce232ef9a9
6
+ metadata.gz: 3d1e88121ee00124767981264022b66271a5aaa3ccbaf74e0518d201e7c1bae5b1bf279c931cece1217f6550e369dc2fed3b57c5b3247b03f0876b2534805a16
7
+ data.tar.gz: 96a35e2965262a2fdbc8ea9b4412b1d3943a2f728774bd6bb6a9367148134e38953028e3ed0b6cfd7798675066b7957369d21a6686191024895c7b63e870a108
@@ -0,0 +1,24 @@
1
+ module AeEasy
2
+ module Qa
3
+ class ValidateExternal
4
+ attr_reader :data, :errors, :config
5
+
6
+ def initialize(data, errors, config)
7
+ @data = data
8
+ @errors = errors
9
+ @config = config
10
+ end
11
+
12
+ def run
13
+ begin
14
+ ValidateGroups.new(data, errors).run
15
+ ValidateRules.new(data, errors, config['individual_validations']).run if config
16
+ return errors
17
+ rescue StandardError => e
18
+ puts "An error has occurred: #{e}"
19
+ return nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,48 @@
1
+ module AeEasy
2
+ module Qa
3
+ class ValidateGroups
4
+ attr_reader :data, :errors
5
+
6
+ def initialize(data, errors)
7
+ @data = data
8
+ @errors = errors
9
+ end
10
+
11
+ def run
12
+ if group_validations_present?
13
+ load_module
14
+ include_module
15
+ call_validation_methods
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def fail_validation(name)
22
+ errors[name.to_sym] = 'fail'
23
+ end
24
+
25
+ def load_module
26
+ load group_validations_path
27
+ end
28
+
29
+ def include_module
30
+ self.class.send(:include, GroupValidations)
31
+ end
32
+
33
+ def call_validation_methods
34
+ GroupValidations.public_instance_methods.each do |method|
35
+ self.send(method)
36
+ end
37
+ end
38
+
39
+ def group_validations_present?
40
+ File.exists?(group_validations_path)
41
+ end
42
+
43
+ def group_validations_path
44
+ @group_validations_path ||= File.expand_path('group_validations.rb', Dir.pwd)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,92 @@
1
+ module AeEasy
2
+ module Qa
3
+ class ValidateInternal
4
+ attr_reader :scrapers, :rules
5
+
6
+ def initialize(config)
7
+ @scrapers = config['scrapers']
8
+ @rules = config['individual_validations']
9
+ end
10
+
11
+ def run
12
+ begin
13
+ scrapers.each do |scraper_name, collections|
14
+ ValidateScraper.new(scraper_name, collections, rules).run
15
+ end
16
+ rescue StandardError => e
17
+ puts "An error has occurred: #{e}"
18
+ return nil
19
+ end
20
+ end
21
+ end
22
+
23
+ class ValidateScraper
24
+ attr_reader :scraper_name, :collections, :rules
25
+
26
+ def initialize(scraper_name, collections, rules)
27
+ @scraper_name = scraper_name
28
+ @collections = collections
29
+ @rules = rules
30
+ end
31
+
32
+ def run
33
+ collections.each do |collection_name|
34
+ ValidateCollection.new(scraper_name, collection_name, total_records(collection_name), rules).run
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def total_records(collection_name)
41
+ collection_counts.find{|collection_hash| collection_hash['collection'] == collection_name }['count']
42
+ end
43
+
44
+ def collection_counts
45
+ @collection_counts ||= AnswersEngine::Client::ScraperJobOutput.new.collections(scraper_name)
46
+ end
47
+ end
48
+
49
+ class ValidateCollection
50
+ attr_reader :scraper_name, :collection_name, :total_records, :rules, :errors
51
+
52
+ def initialize(scraper_name, collection_name, total_records, rules)
53
+ @scraper_name = scraper_name
54
+ @collection_name = collection_name
55
+ @total_records = total_records
56
+ @rules = rules
57
+ @errors = { errored_items: [] }
58
+ end
59
+
60
+ def run
61
+ ValidateGroups.new(data, errors).run
62
+ #could create the errors hash inside ValidateRules?
63
+ #errors = ValidateRules.new(data, config).run
64
+ ValidateRules.new(data, errors, rules).run
65
+ #should have a class that saves the output and the summary output
66
+ #SaveOutput.new(errors, output_collection_name).run
67
+ end
68
+
69
+ private
70
+
71
+ def output_collection_name
72
+ @output_collection_name ||= "#{scraper_name}_#{collection_name}"
73
+ end
74
+
75
+ def data
76
+ @data ||= begin
77
+ data = []
78
+ page = 1
79
+ while data.count < total_records
80
+ records = AnswersEngine::Client::ScraperJobOutput.new(per_page:500, page: page).all(scraper_name, collection_name).parsed_response
81
+ records.each do |record|
82
+ data << record
83
+ end
84
+ page += 1
85
+ end
86
+ data
87
+ end
88
+ end
89
+
90
+ end
91
+ end
92
+ end
@@ -9,7 +9,7 @@ module AeEasy
9
9
  def initialize(data, errors, rules)
10
10
  @data = data
11
11
  @errors = errors
12
- @rules = rules['individual_validations']
12
+ @rules = rules
13
13
  end
14
14
 
15
15
  def run
@@ -22,31 +22,40 @@ module AeEasy
22
22
  data.each do |data_hash|
23
23
  reset_errored_item
24
24
  rules.each{|field_to_validate, options|
25
- options.each{|validation, value|
26
- case validation
27
- when 'required'
28
- required_check(data_hash, field_to_validate) if value == true
29
- when 'type'
30
- ValidateType.new(data_hash, field_to_validate, value, rules, errored_item).run if options['required']
31
- when 'value'
32
- ValidateValue.new(data_hash, field_to_validate, value, errored_item).run if options['required']
33
- when 'length'
34
- validate_length(data_hash, field_to_validate, value) if options['required']
35
- else
36
- unknown_validation_error(validation) if validation !~ /format/
37
- end
38
- }
25
+ if passes_required_check?(options, data_hash, field_to_validate)
26
+ options.each{|validation, value|
27
+ case validation
28
+ when 'type'
29
+ ValidateType.new(data_hash, field_to_validate, value, rules, errored_item).run if options['required']
30
+ when 'value'
31
+ ValidateValue.new(data_hash, field_to_validate, value, errored_item).run if options['required']
32
+ when 'length'
33
+ validate_length(data_hash, field_to_validate, value) if options['required']
34
+ when 'required'
35
+ nil
36
+ else
37
+ unknown_validation_error(validation) if validation !~ /format/
38
+ end
39
+ }
40
+ end
39
41
  }
40
42
  errors[:errored_items].push(errored_item) if errored_item && !errored_item[:failures].empty?
41
43
  end
42
44
  end
43
45
 
44
- def required_check(data_hash, field_to_validate)
45
- if data_hash[field_to_validate].nil? || (data_hash[field_to_validate].class == String && data_hash[field_to_validate].empty?)
46
+ def passes_required_check?(options, data_hash, field_to_validate)
47
+ if options['required'] == true && fails_required_check?(data_hash, field_to_validate)
46
48
  add_errored_item(data_hash, field_to_validate, 'required')
49
+ false
50
+ else
51
+ true
47
52
  end
48
53
  end
49
54
 
55
+ def fails_required_check?(data_hash, field_to_validate)
56
+ data_hash[field_to_validate].nil? || (data_hash[field_to_validate].class == String && data_hash[field_to_validate].empty?)
57
+ end
58
+
50
59
  def validate_length(data_hash, field_to_validate, length)
51
60
  add_errored_item(data_hash, field_to_validate, 'length') if data_hash[field_to_validate].to_s.length != length
52
61
  end
@@ -24,9 +24,9 @@ module AeEasy
24
24
  when 'String'
25
25
  add_errored_item(data_hash, field_to_validate, 'type') if data_hash[field_to_validate].class != String
26
26
  when 'Integer'
27
- add_errored_item(data_hash, field_to_validate, 'type') unless data_hash[field_to_validate].class == Fixnum || data_hash[field_to_validate].to_s.strip =~ /\A\d+(\.\d+)?\z/
27
+ add_errored_item(data_hash, field_to_validate, 'type') unless data_hash[field_to_validate].class == Fixnum || data_hash[field_to_validate].to_s.strip =~ /\A\d+(\,\d+)?(\.\d+)?\z/
28
28
  when 'Float'
29
- add_errored_item(data_hash, field_to_validate, 'type') unless data_hash[field_to_validate].class == Float || data_hash[field_to_validate].to_s.strip =~ /\A\d+(\.\d+)?\z/
29
+ add_errored_item(data_hash, field_to_validate, 'type') unless data_hash[field_to_validate].class == Float || data_hash[field_to_validate].to_s.strip =~ /\A\d+(\,\d+)?(\.\d+)?\z/
30
30
  when 'Date'
31
31
  validate_date_type
32
32
  when 'Url'
@@ -1,5 +1,5 @@
1
1
  module AeEasy
2
2
  module Qa
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
data/lib/ae_easy/qa.rb CHANGED
@@ -1,36 +1,38 @@
1
1
  require 'ae_easy/qa/helpers'
2
2
  require 'ae_easy/qa/version'
3
+ require 'ae_easy/qa/validate_internal'
4
+ require 'ae_easy/qa/validate_external'
3
5
  require 'ae_easy/qa/validate_rules'
4
6
  require 'ae_easy/qa/validate_type'
5
7
  require 'ae_easy/qa/validate_value'
8
+ require 'ae_easy/qa/validate_groups'
9
+ require 'answersengine'
6
10
  require 'time'
7
11
 
8
12
  module AeEasy
9
13
  module Qa
10
- class Validate
11
- attr_accessor :rules
14
+ class Validator
15
+ attr_accessor :config
12
16
  attr_reader :data, :errors
13
17
 
14
- def initialize(data, options={})
15
- load_rules
18
+ def initialize(data=nil, options={})
19
+ load_config
16
20
  @data = data
17
21
  @errors = { errored_items: [] }
18
22
  end
19
23
 
20
- def run
21
- begin
22
- ValidateRules.new(data, errors, rules).run if rules
23
- return errors
24
- rescue StandardError => e
25
- puts "An error has occurred: #{e}"
26
- return nil
27
- end
24
+ def validate_internal
25
+ ValidateInternal.new(config).run
26
+ end
27
+
28
+ def validate_external
29
+ ValidateExternal.new(data, errors, config).run
28
30
  end
29
31
 
30
32
  private
31
33
 
32
- def load_rules
33
- self.rules = YAML.load(File.open(config_path))['qa'] if File.exists?(config_path)
34
+ def load_config
35
+ self.config = YAML.load(File.open(config_path))['qa'] if File.exists?(config_path)
34
36
  end
35
37
 
36
38
  def config_path
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ae_easy-qa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
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-06-11 00:00:00.000000000 Z
11
+ date: 2019-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: answersengine
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -64,6 +78,9 @@ files:
64
78
  - bin/setup
65
79
  - lib/ae_easy/qa.rb
66
80
  - lib/ae_easy/qa/helpers.rb
81
+ - lib/ae_easy/qa/validate_external.rb
82
+ - lib/ae_easy/qa/validate_groups.rb
83
+ - lib/ae_easy/qa/validate_internal.rb
67
84
  - lib/ae_easy/qa/validate_rules.rb
68
85
  - lib/ae_easy/qa/validate_type.rb
69
86
  - lib/ae_easy/qa/validate_value.rb