is_valid 0.2.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/is_valid.rb +100 -0
  3. metadata +76 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ceff1381c62339c48a7f157c4aa467c1187dde72880935aab100dc4ca88b28c3
4
+ data.tar.gz: abde930fdd77d2b8efbc7e1050318678fd40f5fbfa01566595160b4bdf45129b
5
+ SHA512:
6
+ metadata.gz: 35cef062c842b9761aa03121fae7ed8fa8da89c5605e310e41d9bb6b69ffa8cb189759daf9b2f1617d58608c214ec6b64689861aa3207d13dafc8b3659d9be96
7
+ data.tar.gz: 14f31ef5236d975fcde2ffae4f90d78570df177499637c4685720bb738d5151d006504fdd1feecd37f3903fe75f16053290273dc76311108e195146df58880cb
data/lib/is_valid.rb ADDED
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'modules/validators'
4
+ require_relative 'modules/errors'
5
+
6
+ # Ruby Gem to make a validation of a variable or a hash, based on regular expressions
7
+ # or own pre-defined validation templates in an easy way. See full documentation on GitHub.
8
+ class IsValid
9
+ include Validators
10
+ include Errors
11
+
12
+ TYPES = %w[string array hash class module symbol].freeze
13
+ STRICT_TYPES = %w[integer float].freeze
14
+
15
+ @rules = {}
16
+ @templates = {}
17
+ @errors = {}
18
+ @all_keys = false
19
+ @strict_types = false
20
+
21
+ def initialize(settings = {})
22
+ @templates = settings[:templates] || {}
23
+ @errors = settings[:errors] || {}
24
+ @all_keys = settings[:all_keys] || false
25
+ @strict_types = settings[:strict_types] || false
26
+ rules = settings[:rules] || {}
27
+ types_hash = {}
28
+ TYPES.each do |type|
29
+ types_hash[type.to_sym] = type
30
+ end
31
+ validators = init_rules
32
+ @rules = validators.merge(rules)
33
+ @rules = @rules.merge(types_hash)
34
+ end
35
+
36
+ def check(val, rules)
37
+ validated = rules.is_a?(String) ? check_with_types(val, rules) : check_one_of_rules(val, rules)
38
+ validated.is_a?(Array) ? false : validated
39
+ end
40
+
41
+ def check_with_types(val, rule_name)
42
+ return true if rule_name == 'any'
43
+ return val.nil? if rule_name == 'nil'
44
+ return val.is_a?(Object.const_get(rule_name.capitalize)) if TYPES.include?(rule_name)
45
+ return val.is_a?(Object.const_get(rule_name.capitalize)) if @strict_types && STRICT_TYPES.include?(rule_name)
46
+ return [true, false].include?(val) if @strict_types && rule_name == 'boolean'
47
+
48
+ rule = @rules[rule_name.to_sym]
49
+ val.to_s.match?(rule)
50
+ end
51
+
52
+ def rule_exists(rule)
53
+ !rule.nil? && @rules[rule.to_sym].nil?
54
+ end
55
+
56
+ def check_one_of_rules(val, rules, key = 'variable')
57
+ errors = []
58
+ rules.each do |rule|
59
+ if rule_exists(rule)
60
+ errors << error_no_rule(rule)
61
+ elsif !check(val, rule)
62
+ errors << error_not_valid(key, rule, @errors)
63
+ end
64
+ end
65
+ !errors.empty? && errors.length == rules.length ? errors : true
66
+ end
67
+
68
+ def check_hash(hash_var, template, errors = [])
69
+ template_rules = @templates[template.to_sym]
70
+ return [error_no_template(template)] if template_rules.nil?
71
+
72
+ req_errors = check_required(hash_var, template_rules)
73
+ return req_errors unless req_errors.empty?
74
+
75
+ hash_var.each do |key, val|
76
+ rules = template_rules[key.to_sym]
77
+ if @all_keys && rules.nil?
78
+ errors << error_no_key(key, template)
79
+ elsif !rules.nil?
80
+ rules = [rules] if rules.is_a?(String)
81
+ validated = check_one_of_rules(val, rules, key)
82
+ errors += validated if validated != true
83
+ inner = check_hash(val, template, errors) if val.is_a?(Hash)
84
+ errors += inner if !inner.nil? && inner != true
85
+ end
86
+ end
87
+ errors.empty? ? true : errors.uniq
88
+ end
89
+
90
+ def check_required(hash_var, template_rules)
91
+ errors = []
92
+ template_rules.each_key do |key|
93
+ if key.match?('_required$')
94
+ key = key.to_s.gsub(/_required$/, '')
95
+ errors << error_required_key(key) if hash_var[key.to_sym].nil?
96
+ end
97
+ end
98
+ errors
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: is_valid
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.4
5
+ platform: ruby
6
+ authors:
7
+ - Sergei Illarionov (www.butteff.ru/en/)
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2025-02-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.69'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.69'
41
+ description: |-
42
+ Ruby Gem to make a validation of a variable or a hash, based on regular expressions
43
+ or own pre-defined validation templates in an easy way. See full documentation on GitHub.
44
+ email: butteff.ru@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - lib/is_valid.rb
50
+ homepage: https://butteff.ru/en/
51
+ licenses:
52
+ - MIT
53
+ metadata:
54
+ source_code_uri: https://github.com/butteff/is_valid_ruby_gem
55
+ rubygems_mfa_required: 'true'
56
+ post_install_message: You can find docs about is_valid gem on https://butteff.ru/en/extensions
57
+ or on https://github.com/butteff/is_valid_ruby_gem
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 2.7.0
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubygems_version: 3.4.19
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: Validation of a variable or a hash, based on pre-defined or own easy rules
76
+ test_files: []