mini_defender 0.7.4 → 0.8.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: 371d65d32be7408cc86692e4e28bd1cce7c7aed48f32c62ca2871db9153bbed3
4
- data.tar.gz: 9288d6445ef40a0e6e6b2b3425c526ba744f055029ae3ed935f9b7f2762082a0
3
+ metadata.gz: 53ca5d9198b8205b86302ffa2541950931680d2af58486904bbda6835d457c65
4
+ data.tar.gz: bf41bed9f56f20c8ac67df245e8951657dca5e59208ec4c88a95903813763f17
5
5
  SHA512:
6
- metadata.gz: 1a70a27998e815e6adcd6a033e87f75b88fd0e5e52e0090b308eaf2b3450bd33d6e98a292acb8122633a3534c18f5cead3055e7b5bda0ff1f28a16d630f0f94f
7
- data.tar.gz: e3e390e5420a29d2593811e4fdf24faa131398ad7c2f3dacb978c25b84a5ce1685d986dd0dcc11c8dd2188612dfa31da362e38678e01d7f6008ee8b877f0d0c3
6
+ metadata.gz: 8a772cfacf137bb67985efe6976308894df48b649058e417c8be4bf66be011b016aebd947f518d8a498f627fe3f292c7a9494cf0a0ea2ace1b74cf470884a4d5
7
+ data.tar.gz: 6cb8e81c7fea23dd5d27bae9681a47ff3d9fb2a5cbcc004c1269509c189ea343dbbf853d48ad6f22cfb8187e28b31acac0d675441bb4be3357469d4b822075f5
@@ -10,7 +10,9 @@ class MiniDefender::Rules::Default < MiniDefender::Rule
10
10
  end
11
11
 
12
12
  def self.make(args)
13
- raise ArgumentError, 'Expected exactly one argument.' unless args.length == 1
13
+ unless args.length == 1
14
+ raise ArgumentError, 'Expected exactly one argument.'
15
+ end
14
16
 
15
17
  new(args[0])
16
18
  end
@@ -28,9 +28,10 @@ class MiniDefender::Rules::MimeTypes < MiniDefender::Rule
28
28
  def passes?(attribute, value, validator)
29
29
  @file = value.is_a?(ActionDispatch::Http::UploadedFile)
30
30
  content_type = Marcel::MimeType.for(value.read)
31
+ extension_mime_type = Marcel::MimeType.for(extension: File.extname(value.original_filename))
31
32
  value.rewind
32
33
 
33
- @file && @types.include?(content_type)
34
+ @file && @types.include?(content_type) && content_type == extension_mime_type
34
35
  end
35
36
 
36
37
  def message(attribute, value, validator)
@@ -27,30 +27,52 @@ module MiniDefender
27
27
  end
28
28
 
29
29
  # Set default values for missing data key compared to rules
30
- data_rules.each do |k, set|
31
- if !@data.key?(k) || missing_value?(@data[k])
32
- set.filter{ |r| r.defaults?(self) }.each do |r|
33
- @data.merge!({k => r.default_value(self)}.flatten_keys(keep_roots: true))
30
+ defaults_rules = data_rules.filter { |k, set| set.any? { |r| r.defaults?(self) } }
31
+ defaults_rules.each do |key_pattern, set|
32
+ # If element is not inside an array
33
+ unless key_pattern.match?(/\*/)
34
+ if missing_value?(@data[key_pattern])
35
+ @data[key_pattern] = set.map { |r| r.default_value(self) }.reject(&:nil?).first
34
36
  end
37
+
38
+ next
35
39
  end
40
+
41
+ parent, sep, child_key = key_pattern.rpartition('*')
42
+ parent += sep
43
+
44
+ # If parent or a sibling exists, add the default value
45
+ pattern = Regexp.new("\\A#{parent.gsub('*', '\d')}\\z")
46
+ additions = {}
47
+ @data.each do |k, _|
48
+ unless k.match?(pattern)
49
+ next
50
+ end
51
+
52
+ current_child_key = "#{k}#{child_key}"
53
+
54
+ unless missing_value?(@data[current_child_key])
55
+ next
56
+ end
57
+
58
+ additions[current_child_key] = set.map { |r| r.default_value(self) }.reject(&:nil?).first
59
+ end
60
+
61
+ @data.merge!(additions)
36
62
  end
37
63
 
38
64
  data_rules = @expander.expand(data_rules, @data)
39
-
40
65
  data_rules.each do |k, rule_set|
41
66
  @errors[k] = []
42
67
 
43
68
  value_included = true
44
69
  required = rule_set.any? { |r| r.implicit?(self) }
45
70
 
46
- if !@data.key?(k) || missing_value?(@data[k])
47
- rule_set.filter{ |r| r.defaults?(self) }.each do |r|
48
- @data.merge!({k => r.default_value(self)}.flatten_keys(keep_roots: true))
71
+ unless @data.key?(k)
72
+ if required
73
+ @errors[k] << 'This field is missing.'
49
74
  end
50
- end
51
75
 
52
- unless @data.key?(k)
53
- @errors[k] << 'This field is missing.' if required
54
76
  next
55
77
  end
56
78
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiniDefender
4
- VERSION = "0.7.4"
4
+ VERSION = "0.8.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.4
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ali Alhoshaiyan
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-09-24 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport
@@ -261,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
261
261
  - !ruby/object:Gem::Version
262
262
  version: '0'
263
263
  requirements: []
264
- rubygems_version: 3.6.5
264
+ rubygems_version: 3.6.9
265
265
  specification_version: 4
266
266
  summary: A small and efficient validation library for Rails and anything that uses
267
267
  Ruby.