mini_defender 0.7.0 → 0.7.1

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: c72fe66d029b23db90c463a27a4ac69547465047620687c4d4da4f40e1471230
4
- data.tar.gz: 2dde879487e7f23b65f59ba8b3b3527490f15db79f9101cb523691e2ad532aae
3
+ metadata.gz: b5b6dfb53b37f6a2c6b47b6e16e31fed61ef5a8b54c09bfdfb6cd281d184543e
4
+ data.tar.gz: 7377e5c6a38f01740bbc08599d8887230664d1aef7fd13d60fd15575d16b1457
5
5
  SHA512:
6
- metadata.gz: 864b6c2ad31fa2df0a9651e0e27907912f68a3b888afadc410e53ccca6604acc6f06ff9e6bbf1e1676d40cee7fd7dbcfa6e45c0d197861b8b11cd50be866a071
7
- data.tar.gz: ce39dd86774e6387d06e1e17a9584c43928b0069ec349d5392de19f2dd7e3afc42ee7f3c65761fa2d49037a30382691b5afd861628b7ac478a4fab92e16c09a4
6
+ metadata.gz: c139200a8d9ec41d27de36007df37022b138d4acdf83369cbdcb3690448cff2e46dfda9d3045ac922c0dae38f37a3f105dec376b943ec3edfd25b118ff00d2e7
7
+ data.tar.gz: 7c4afa6982e5746cbe19071abd5619e62cb02eb0788a9a3443e14fc15a0bbd83d53254e96cda8cd04e198464bb9908579f50547367682228c4f450acd3cd0974
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.7.1] - 2025-09-07
4
+
5
+ - Add password rule
6
+
3
7
  ## [0.3.0] - 2023-04-05
4
8
 
5
9
  - Add cleansing for data before validation
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MiniDefender::Rules::Password < MiniDefender::Rule
4
+ SPECIAL_CHARS = '!@#$%^&*()_+-=[]{}|;:,.<>?'.freeze
5
+ MIN_LENGTH = 8
6
+
7
+ def self.signature
8
+ 'password'
9
+ end
10
+
11
+ def passes?(attribute, value, validator)
12
+ unless value.is_a?(String)
13
+ return false
14
+ end
15
+
16
+ @missing_requirements = []
17
+
18
+ check_length(value)
19
+ check_lowercase(value)
20
+ check_uppercase(value)
21
+ check_digit(value)
22
+ check_special_char(value)
23
+
24
+ @missing_requirements.empty?
25
+ end
26
+
27
+ def message(attribute, value, validator)
28
+ unless value.is_a?(String)
29
+ return 'Password must be a string.'
30
+ end
31
+
32
+ if @missing_requirements.nil? || @missing_requirements.empty?
33
+ return 'Password is valid.'
34
+ end
35
+
36
+ "Password is missing: #{@missing_requirements.join(', ')}."
37
+ end
38
+
39
+ private
40
+
41
+ def check_length(value)
42
+ if value.length < MIN_LENGTH
43
+ @missing_requirements << "at least #{MIN_LENGTH} characters"
44
+ end
45
+ end
46
+
47
+ def check_lowercase(value)
48
+ unless value.match?(/[a-z]/)
49
+ @missing_requirements << 'at least one lowercase letter'
50
+ end
51
+ end
52
+
53
+ def check_uppercase(value)
54
+ unless value.match?(/[A-Z]/)
55
+ @missing_requirements << 'at least one uppercase letter'
56
+ end
57
+ end
58
+
59
+ def check_digit(value)
60
+ unless value.match?(/\d/)
61
+ @missing_requirements << 'at least one digit'
62
+ end
63
+ end
64
+
65
+ def check_special_char(value)
66
+ unless value.chars.any? { |char| SPECIAL_CHARS.include?(char) }
67
+ @missing_requirements << 'at least one special character'
68
+ end
69
+ end
70
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiniDefender
4
- VERSION = "0.7.0"
4
+ VERSION = "0.7.1"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_defender
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ali Alhoshaiyan
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-07-17 00:00:00.000000000 Z
10
+ date: 2025-09-09 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport
@@ -211,6 +211,7 @@ files:
211
211
  - lib/mini_defender/rules/not_regex.rb
212
212
  - lib/mini_defender/rules/not_starting_with.rb
213
213
  - lib/mini_defender/rules/numeric.rb
214
+ - lib/mini_defender/rules/password.rb
214
215
  - lib/mini_defender/rules/present.rb
215
216
  - lib/mini_defender/rules/prohibited.rb
216
217
  - lib/mini_defender/rules/prohibited_if.rb