ae_easy-qa 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 162ba4d965200f38a598f82b2f0fcece1271661aed432dcb144192e298e36f0e
4
+ data.tar.gz: 3617c675139bff6c03aef23d84aec977f36ba38f5cefad71b0cbd55a93ef6cd5
5
+ SHA512:
6
+ metadata.gz: 499f8a663a16a0916cbeca8b8e0ceb0faef97847281debd19ec4f931e3a9deda204f00fa2d18c06f1dede3576c990cfb685428a6943d7e7207e5b6cf94406453
7
+ data.tar.gz: 02e39006630eaabb1b7543d73659de897ffec688deaf4721a0631e405d131ccf2de816febbfc85d748e65d40de9bba799e5ccf32ca7e253c48ba0c6b749bde40
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "ae_easy/qa"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,11 @@
1
+ module AnswersEngine
2
+ class CLI < Thor
3
+ class Qa < Thor
4
+
5
+ def test
6
+ puts "test"
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,66 @@
1
+ module AeEasy
2
+ module Qa
3
+ class ValidateRules
4
+ attr_reader :data, :errors, :rules
5
+ attr_accessor :errored_item
6
+
7
+ def initialize(data, errors, rules)
8
+ @data = data
9
+ @errors = errors
10
+ @rules = rules['individual_validations']
11
+ end
12
+
13
+ def run
14
+ handle_rules
15
+ end
16
+
17
+ private
18
+
19
+ def handle_rules
20
+ data.each do |data_hash|
21
+ reset_errored_item
22
+ rules.each{|field_to_validate, options|
23
+ options.each{|validation, value|
24
+ case validation
25
+ when 'required'
26
+ required_check(data_hash, field_to_validate) if value == true
27
+ when 'type'
28
+ ValidateType.new(data_hash, field_to_validate, value, rules, errored_item).run if options['required']
29
+ when 'value'
30
+ ValidateValue.new(data_hash, field_to_validate, value, errored_item).run if options['required']
31
+ when 'length'
32
+ validate_length(data_hash, field_to_validate, value) if options['required']
33
+ else
34
+ unknown_validation_error(validation) if validation !~ /format/
35
+ end
36
+ }
37
+ }
38
+ errors[:errored_items].push(errored_item) if errored_item && !errored_item[:failures].empty?
39
+ end
40
+ end
41
+
42
+ def required_check(data_hash, field_to_validate)
43
+ if data_hash[field_to_validate].nil? || (data_hash[field_to_validate].class == String && data_hash[field_to_validate].empty?)
44
+ add_errored_item(data_hash, field_to_validate, 'required')
45
+ end
46
+ end
47
+
48
+ def validate_length(data_hash, field_to_validate, length)
49
+ add_errored_item(data_hash, field_to_validate, 'length') if data_hash[field_to_validate].to_s.length != length
50
+ end
51
+
52
+ def add_errored_item(data_hash, field_to_validate, validation)
53
+ errored_item[:data] = data_hash if errored_item[:data].nil?
54
+ errored_item[:failures].push({ field_to_validate.to_sym => validation })
55
+ end
56
+
57
+ def reset_errored_item
58
+ self.errored_item = { failures: [] }
59
+ end
60
+
61
+ def unknown_validation_error(validation)
62
+ raise StandardError.new("The validation '#{validation}' is unknown.")
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,62 @@
1
+ module AeEasy
2
+ module Qa
3
+ class ValidateType < ValidateRules
4
+ attr_reader :data_hash, :field_to_validate, :desired_type, :rules
5
+
6
+ def initialize(data_hash, field_to_validate, desired_type, rules, errored_item)
7
+ @data_hash = data_hash
8
+ @field_to_validate = field_to_validate
9
+ @desired_type = desired_type
10
+ @rules = rules
11
+ @errored_item = errored_item
12
+ end
13
+
14
+ def run
15
+ handle_types
16
+ end
17
+
18
+ private
19
+
20
+ def handle_types
21
+ case desired_type
22
+ when 'String'
23
+ add_errored_item(data_hash, field_to_validate, 'type') if data_hash[field_to_validate].class != String
24
+ when 'Integer'
25
+ add_errored_item(data_hash, field_to_validate, 'type') unless data_hash[field_to_validate].class == Fixnum || data_hash[field_to_validate].to_s =~ /\A\d+(\.\d+)?\z/
26
+ when 'Float'
27
+ add_errored_item(data_hash, field_to_validate, 'type') unless data_hash[field_to_validate].class == Float || data_hash[field_to_validate].to_s =~ /\A\d+(\.\d+)?\z/
28
+ when 'Date'
29
+ validate_date_type
30
+ when 'Url'
31
+ add_errored_item(data_hash, field_to_validate, 'type') if data_hash[field_to_validate] !~ /^(http|https):\/\//
32
+ else
33
+ unknown_type_error(desired_type)
34
+ end
35
+ end
36
+
37
+ def validate_date_type
38
+ format = rules[field_to_validate]['format']
39
+ missing_date_format_error if format.nil?
40
+ date_str = data_hash[field_to_validate]
41
+ begin
42
+ date = Time.strptime(date_str, format.gsub('%-m', '%m').gsub('%-d', '%d'))
43
+ add_errored_item(data_hash, field_to_validate, 'type') if date.strftime(format) != date_str
44
+ rescue ArgumentError => e
45
+ if e.to_s =~ /^invalid strptime format/
46
+ add_errored_item(data_hash, field_to_validate, 'type')
47
+ else
48
+ raise StandardError.new(e.to_s)
49
+ end
50
+ end
51
+ end
52
+
53
+ def unknown_type_error(desired_type)
54
+ raise StandardError.new("The validation type '#{desired_type}' is unknown.")
55
+ end
56
+
57
+ def missing_date_format_error
58
+ raise StandardError.new("Date validation is missing a format.")
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,78 @@
1
+ module AeEasy
2
+ module Qa
3
+ class ValidateValue < ValidateRules
4
+ attr_reader :data_hash, :field_to_validate, :params
5
+
6
+ def initialize(data_hash, field_to_validate, params, errored_item)
7
+ @data_hash = data_hash
8
+ @field_to_validate = field_to_validate
9
+ @params = params
10
+ @errored_item = errored_item
11
+ end
12
+
13
+ def run
14
+ condition_exists? ? handle_conditions : main_value_check
15
+ end
16
+
17
+ private
18
+
19
+ def condition_exists?
20
+ !params['if'].nil?
21
+ end
22
+
23
+ def handle_conditions
24
+ field_name = params['if'].keys.first
25
+ condition_hash = params['if'][field_name]
26
+ case condition_hash.keys.first
27
+ when 'value'
28
+ if(data_hash[field_name] == condition_hash.values.first)
29
+ main_value_check
30
+ end
31
+ end
32
+ end
33
+
34
+ def main_value_check
35
+ if params['equal']
36
+ if equal_with_operators?
37
+ equal_with_operators
38
+ else
39
+ add_errored_item(data_hash, field_to_validate, 'value') if(data_hash[field_to_validate] != params['equal'])
40
+ end
41
+ elsif params['less_than']
42
+ add_errored_item(data_hash, field_to_validate, 'value') if !(data_hash[field_to_validate] < params['less_than'])
43
+ elsif params['greater_than']
44
+ add_errored_item(data_hash, field_to_validate, 'value') if !(data_hash[field_to_validate] > params['greater_than'])
45
+ else
46
+ unknown_value_error
47
+ end
48
+ end
49
+
50
+ def equal_with_operators
51
+ case equal_operator
52
+ when 'or'
53
+ add_errored_item(data_hash, field_to_validate, 'value') if !or_statment
54
+ end
55
+ end
56
+
57
+ def or_statment
58
+ eval or_vals.map{|val| "data_hash[field_to_validate] == #{val}" }.join(' || ')
59
+ end
60
+
61
+ def equal_with_operators?
62
+ params['equal'].class == Hash
63
+ end
64
+
65
+ def equal_operator
66
+ params['equal'].keys.first
67
+ end
68
+
69
+ def or_vals
70
+ params['equal']['or']
71
+ end
72
+
73
+ def unknown_value_error
74
+ raise StandardError.new("The value rule '#{params}' is unknown.")
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,5 @@
1
+ module AeEasy
2
+ module Qa
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
data/lib/ae_easy/qa.rb ADDED
@@ -0,0 +1,48 @@
1
+ require 'ae_easy/qa/version'
2
+ require 'ae_easy/qa/validate_rules'
3
+ require 'ae_easy/qa/validate_type'
4
+ require 'ae_easy/qa/validate_value'
5
+ require 'answersengine'
6
+
7
+ module AeEasy
8
+ module Qa
9
+ class Validate
10
+ attr_accessor :rules
11
+ attr_reader :data, :errors
12
+
13
+ def initialize(data, options={})
14
+ load_rules
15
+ @data = data
16
+ @errors = { errored_items: [] }
17
+ end
18
+
19
+ def run
20
+ begin
21
+ ValidateRules.new(data, errors, rules).run if rules
22
+ return errors
23
+ rescue StandardError => e
24
+ puts "An error has occurred: #{e}"
25
+ return nil
26
+ end
27
+ end
28
+
29
+ def add_validation(method)
30
+ instance_eval(&method)
31
+ end
32
+
33
+ def fail_validation
34
+ self.errors[@name.to_sym] = 'fail'
35
+ end
36
+
37
+ private
38
+
39
+ def load_rules
40
+ self.rules = YAML.load(File.open(config_path))['qa'] if File.exists?(config_path)
41
+ end
42
+
43
+ def config_path
44
+ @config_path ||= File.expand_path('ae_easy.yaml', Dir.pwd)
45
+ end
46
+ end
47
+ end
48
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ae_easy-qa
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - David Lynam
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-05-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ae_easy-core
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
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.16'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.16'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ description: AnswersEngine Easy QA gem allows you to ensure the quality of output
70
+ on Fetch
71
+ email:
72
+ - dlynam@gmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - bin/console
78
+ - bin/setup
79
+ - lib/ae_easy/cli/qa.rb
80
+ - lib/ae_easy/qa.rb
81
+ - lib/ae_easy/qa/validate_rules.rb
82
+ - lib/ae_easy/qa/validate_type.rb
83
+ - lib/ae_easy/qa/validate_value.rb
84
+ - lib/ae_easy/qa/version.rb
85
+ homepage: https://answersengine.com
86
+ licenses:
87
+ - MIT
88
+ metadata:
89
+ homepage_uri: https://answersengine.com
90
+ source_code_uri: https://github.com/answersengine/ae_easy-qa
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 2.2.2
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.7.8
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: AnswersEngine Easy Quality Assurance gem
111
+ test_files: []