ae_easy-qa 0.0.3 → 0.0.4

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: 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