hashy_validator 0.1.2 → 0.1.3

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: bb2d96afac20d3a5de238c5909ba7001ebfabdbbb790ea9b0ead248853018005
4
- data.tar.gz: 299cb764bb7dfcd2bc69ef07cd791d8b76726b69eb0f7a12a0f28c7b1d71d55f
3
+ metadata.gz: 169c5f3bf1fa5deb20aaa9788eb1dc2bef55031a026b6b2d67ee050749edd9a1
4
+ data.tar.gz: 9a583d90637b4aec761dc5dfe6a133e34c8b62cd11b53d653567e632e0a096f6
5
5
  SHA512:
6
- metadata.gz: 6d27b7aa8aae40311a1526fd5fd70c38f962e646d5a73618295f24b874e29cca0d76661111dfbeb7fccf86ccbc5e199201ac0ef4dea5293d0e8838ea2615f401
7
- data.tar.gz: 6a2c04d418e28ad116b0d70b2b6d31c58bd0ffff4aa9aaf9e1f3648f8cacbcc4556a90894bb835a7da4b6430d20b42a1e84a9b4a51e64345e2cf4f0b971f76af
6
+ metadata.gz: f8853fec7ff9a3f67432d8ec71e68faf680f964317c6a874a12711a237faa1eeb8e7e55a4eda73c3570eb406975481529efaf9a1a8fea9d2867233f16842f1d2
7
+ data.tar.gz: a9c9f21c28c9036a943a6599173ac2a524b1ae70ac66dea91c979fe9f923330d58ab3d554e24e67ea3175ce0b9ce1effeba2e366c3616c9e08b0fa6a1be02756
data/CHANGELOG.md CHANGED
@@ -5,9 +5,19 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ### [0.1.3](https://www.github.com/flecto-io/hashy-validator/compare/v0.1.2...v0.1.3) (2024-01-13)
8
+ ### [0.1.4](https://www.github.com/flecto-io/hashy-validator/compare/v0.1.3...v0.1.4) (2024-08-24)
9
9
 
10
10
 
11
+ ### Bug Fixes
12
+
13
+ * Accepts dependencies version of activerecord lower than 8 ([eab4692](https://www.github.com/flecto-io/hashy-validator/commit/eab46925196ada0db0c408037cdf90b9ce4dacca))
14
+
15
+ ### [0.1.2](https://www.github.com/flecto-io/hashy-validator/compare/v0.1.2...v0.1.3) (2024-01-13)
16
+
17
+ ### Changes
18
+
19
+ * Production ready
20
+
11
21
  ### Bug Fixes
12
22
 
13
23
  * changelog ([6b8c151](https://www.github.com/flecto-io/hashy-validator/commit/6b8c15105bd085dafa6358f27f780ad4826a42e7))
data/README.md CHANGED
@@ -8,7 +8,6 @@
8
8
  HashyValidator is a custom Ruby on Rails validator designed to validate an array of hashes based on [HashValidator](https://github.com/jamesbrooks/hash_validator) criteria but also the following new criteria:
9
9
  - `unique`: A value within each hash that has to be unique across the whole array
10
10
 
11
-
12
11
  ## Installation
13
12
 
14
13
  Add this line to your application's Gemfile:
@@ -17,8 +16,6 @@ Add this line to your application's Gemfile:
17
16
  gem 'hashy_validator'
18
17
  ```
19
18
 
20
- <b>THIS GEM IS NOT READY FOR PRODUCTION YET!</b>
21
-
22
19
  And then execute:
23
20
 
24
21
  ```bash
@@ -42,14 +39,20 @@ To leverage HashyValidator in your Rails model, follow these steps:
42
39
  ```ruby
43
40
  class YourModel < ApplicationRecord
44
41
  validates :pricing, hashy_array: {
45
- minutes: HashValidator.multiple('required', 'integer', 'unique'),
46
- price_cents: HashValidator.multiple('required', 'integer')
42
+ minutes: HashValidator.multiple('integer', 'unique'),
43
+ price_cents: HashValidator.multiple('integer')
47
44
  }
48
45
  end
49
46
  ```
50
47
 
51
48
  Customize each entry validators according to [HashValidator](https://github.com/jamesbrooks/hash_validator) criteria
52
49
 
50
+ # Testing
51
+
52
+ ```bash
53
+ rake test
54
+ ```
55
+
53
56
  ## Contributing
54
57
 
55
58
  Bug reports and pull requests are welcome. This project is intended to be a safe, welcoming space for collaboration. To ease up contribution we provide a VSCode _devcontainer_ to run the project in a container.
@@ -14,12 +14,14 @@ Gem::Specification.new do |spec|
14
14
  spec.require_paths = ["lib"]
15
15
  spec.files = Dir["{lib}/**/*"] + ["README.md", "CHANGELOG.md", "hashy_validator.gemspec"]
16
16
 
17
- spec.add_dependency "activerecord", ">= 6.0.0", "<= 7.2.0"
17
+ spec.add_dependency "activerecord", ">= 6.0.0", "< 8.0.0"
18
18
  spec.add_dependency "hash_validator", "~> 1.1"
19
19
 
20
20
  spec.add_development_dependency 'sqlite3', '~> 1.4'
21
21
  spec.add_development_dependency 'rake', '~> 13.1.0'
22
22
  spec.add_development_dependency 'simplecov', '0.17.1'
23
+ spec.add_development_dependency 'rubocop', '~> 1.59'
24
+ spec.add_development_dependency 'rubocop-shopify', '~> 2.14'
23
25
 
24
26
  if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3")
25
27
  spec.add_development_dependency 'minitest', '>= 5.15.0', '< 5.16'
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HashyArrayValidator < ActiveModel::EachValidator
2
4
  def validate_each(record, attribute, value)
3
5
  instance_value = HashyValueValidator.new(value)
4
- unless instance_value.is_valid
6
+ unless instance_value.valid?
5
7
  record.errors.add(attribute, instance_value.reason)
6
8
  return false
7
9
  end
@@ -13,19 +15,22 @@ class HashyArrayValidator < ActiveModel::EachValidator
13
15
  boolean_attrs = []
14
16
  validations =
15
17
  # force validator keys to be strings
16
- options.stringify_keys.map do |val_attr,val|
17
- if (val.is_a?(HashValidator::Validations::Multiple) && val.validations.include?('boolean')) || (val.is_a?(String) && val == 'boolean')
18
+ options.stringify_keys.map do |val_attr, val|
19
+ is_multiple = val.is_a?(HashValidator::Validations::Multiple)
20
+ if (is_multiple && val.validations.include?("boolean")) || (val.is_a?(String) && val == "boolean")
18
21
  boolean_attrs << val_attr
19
22
  [val_attr, val]
20
- elsif val.is_a?(HashValidator::Validations::Multiple) && val.validations.include?('unique')
21
- # if unique key present, then remove that entry (since its not from HashValidator standard) and keep its history
23
+ elsif is_multiple && val.validations.include?("unique")
24
+ # if unique key present, then remove that entry
25
+ # (since its not from HashValidator standard) and keep its history
22
26
  unique_attrs[val_attr] ||= []
23
27
  # we have to make a new object to remove the unique entry,
24
- # because deleting it directly from the original object (val) would result into deleting the verification forever
25
- new_val = HashValidator::Validations::Multiple.new(val.validations.reject{|v| v == 'unique'})
28
+ # because deleting it directly from the original object
29
+ # (val) would result into deleting the verification forever
30
+ new_val = HashValidator::Validations::Multiple.new(val.validations.reject { |v| v == "unique" })
26
31
  # return the value
27
32
  val.validations.blank? ? nil : [val_attr, new_val]
28
- elsif val.is_a?(String) && val == 'unique'
33
+ elsif val.is_a?(String) && val == "unique"
29
34
  # same as above but substring
30
35
  unique_attrs[val_attr] ||= []
31
36
  nil
@@ -36,7 +41,7 @@ class HashyArrayValidator < ActiveModel::EachValidator
36
41
 
37
42
  # force all array entries to have string keys
38
43
  # discard keys that do not have validators
39
- value = value.map{ |e| e.stringify_keys.slice(*validations.keys) }
44
+ value = value.map { |e| e.stringify_keys.slice(*validations.keys) }
40
45
 
41
46
  # we validate each object in the array
42
47
  value.each do |t|
@@ -46,7 +51,7 @@ class HashyArrayValidator < ActiveModel::EachValidator
46
51
  end
47
52
 
48
53
  # keep track of unique values and add error if needed
49
- unique_attrs.keys.each do |unique_attr|
54
+ unique_attrs.each_key do |unique_attr|
50
55
  if unique_attrs[unique_attr].include?(t[unique_attr])
51
56
  record.errors.add(attribute, "'#{unique_attr}' not unique")
52
57
  else
@@ -57,7 +62,7 @@ class HashyArrayValidator < ActiveModel::EachValidator
57
62
  # use default hash validator
58
63
  validator = HashValidator.validate(t, validations)
59
64
  unless validator.valid?
60
- validator.errors.each { |k,v| record.errors.add(attribute, "'#{k.to_s}' #{v}") }
65
+ validator.errors.each { |k, v| record.errors.add(attribute, "'#{k}' #{v}") }
61
66
  end
62
67
  end
63
68
 
@@ -66,11 +71,12 @@ class HashyArrayValidator < ActiveModel::EachValidator
66
71
  record.send("#{attribute}=", value)
67
72
  end
68
73
 
69
- private
74
+ private
70
75
 
71
76
  def get_boolean_value(value)
72
- return true if value == true || value == 'true'
73
- return false if value == false || value == 'false'
77
+ return true if [true, "true"].include?(value)
78
+ return false if [false, "false"].include?(value)
79
+
74
80
  nil
75
81
  end
76
82
  end
@@ -1,42 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HashyValueValidator
2
- def initialize(value)
3
- @value = value.blank? ? [] : value
4
- @valid = true
5
- @reason = nil
6
-
7
- check_parse_value
8
- check_is_array
9
-
10
- @value
11
- end
12
-
13
- def is_valid
14
- @valid
15
- end
16
-
17
- def value
18
- @value
19
- end
20
-
21
- def reason
22
- @reason
23
- end
24
-
25
- private
26
-
27
- def check_parse_value
28
- begin
29
- @value = JSON.parse(@value) if @value.is_a?(String)
30
- rescue JSON::ParserError
31
- @valid = false
32
- @reason = :invalid
33
- end
34
- end
35
-
36
- def check_is_array
37
- unless @value.is_a?(Array)
38
- @valid = false
39
- @reason = :not_an_array
40
- end
41
- end
42
- end
4
+ def initialize(value)
5
+ @value = value.blank? ? [] : value
6
+ @valid = true
7
+ @reason = nil
8
+
9
+ check_parse_value
10
+ check_is_array
11
+ end
12
+
13
+ def valid?
14
+ @valid
15
+ end
16
+
17
+ attr_reader :value, :reason
18
+
19
+ private
20
+
21
+ def check_parse_value
22
+ @value = JSON.parse(@value) if @value.is_a?(String)
23
+ rescue JSON::ParserError
24
+ @valid = false
25
+ @reason = :invalid
26
+ end
27
+
28
+ def check_is_array
29
+ return if @value.is_a?(Array)
30
+
31
+ @valid = false
32
+ @reason = :not_an_array
33
+ end
34
+ end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HashyValidator
4
- module Version
5
- MAJOR = 0
6
- MINOR = 1
7
- PATCH = 2
8
- STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
9
- end
10
- end
4
+ module Version
5
+ MAJOR = 0
6
+ MINOR = 1
7
+ PATCH = 3
8
+ STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
9
+ end
10
+ end
@@ -1,4 +1,6 @@
1
- require 'active_record'
2
- require 'hash_validator'
3
- require_relative './hashy_validator/hashy_value_validator'
4
- require_relative './hashy_validator/hashy_array_validator'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+ require "hash_validator"
5
+ require_relative "hashy_validator/hashy_value_validator"
6
+ require_relative "hashy_validator/hashy_array_validator"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashy_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Flecto Team
@@ -17,9 +17,9 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 6.0.0
20
- - - "<="
20
+ - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: 7.2.0
22
+ version: 8.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,9 +27,9 @@ dependencies:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: 6.0.0
30
- - - "<="
30
+ - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: 7.2.0
32
+ version: 8.0.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: hash_validator
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -86,6 +86,34 @@ dependencies:
86
86
  - - '='
87
87
  - !ruby/object:Gem::Version
88
88
  version: 0.17.1
89
+ - !ruby/object:Gem::Dependency
90
+ name: rubocop
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.59'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.59'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rubocop-shopify
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '2.14'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '2.14'
89
117
  - !ruby/object:Gem::Dependency
90
118
  name: minitest
91
119
  requirement: !ruby/object:Gem::Requirement
@@ -134,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
162
  - !ruby/object:Gem::Version
135
163
  version: '0'
136
164
  requirements: []
137
- rubygems_version: 3.3.26
165
+ rubygems_version: 3.4.19
138
166
  signing_key:
139
167
  specification_version: 4
140
168
  summary: Custom Active Model validator for validating arrays of hashes