active_storage_validations 1.3.1 → 1.3.3

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -1
  3. data/lib/active_storage_validations/aspect_ratio_validator.rb +10 -10
  4. data/lib/active_storage_validations/attached_validator.rb +6 -6
  5. data/lib/active_storage_validations/base_size_validator.rb +8 -8
  6. data/lib/active_storage_validations/content_type_spoof_detector.rb +4 -4
  7. data/lib/active_storage_validations/content_type_validator.rb +27 -18
  8. data/lib/active_storage_validations/dimension_validator.rb +10 -10
  9. data/lib/active_storage_validations/limit_validator.rb +8 -8
  10. data/lib/active_storage_validations/marcel_extensor.rb +2 -0
  11. data/lib/active_storage_validations/matchers/aspect_ratio_validator_matcher.rb +14 -14
  12. data/lib/active_storage_validations/matchers/attached_validator_matcher.rb +12 -12
  13. data/lib/active_storage_validations/matchers/base_size_validator_matcher.rb +14 -14
  14. data/lib/active_storage_validations/matchers/content_type_validator_matcher.rb +40 -40
  15. data/lib/active_storage_validations/matchers/dimension_validator_matcher.rb +14 -14
  16. data/lib/active_storage_validations/matchers/limit_validator_matcher.rb +14 -14
  17. data/lib/active_storage_validations/matchers/processable_image_validator_matcher.rb +14 -14
  18. data/lib/active_storage_validations/matchers/{concerns/active_storageable.rb → shared/asv_active_storageable.rb} +4 -2
  19. data/lib/active_storage_validations/matchers/{concerns/allow_blankable.rb → shared/asv_allow_blankable.rb} +4 -2
  20. data/lib/active_storage_validations/matchers/{concerns/attachable.rb → shared/asv_attachable.rb} +7 -1
  21. data/lib/active_storage_validations/matchers/{concerns/contextable.rb → shared/asv_contextable.rb} +4 -2
  22. data/lib/active_storage_validations/matchers/{concerns/messageable.rb → shared/asv_messageable.rb} +4 -2
  23. data/lib/active_storage_validations/matchers/{concerns/rspecable.rb → shared/asv_rspecable.rb} +4 -2
  24. data/lib/active_storage_validations/matchers/{concerns/validatable.rb → shared/asv_validatable.rb} +4 -2
  25. data/lib/active_storage_validations/metadata.rb +2 -2
  26. data/lib/active_storage_validations/processable_image_validator.rb +8 -8
  27. data/lib/active_storage_validations/{concerns/active_storageable.rb → shared/asv_active_storageable.rb} +4 -2
  28. data/lib/active_storage_validations/{concerns/attachable.rb → shared/asv_attachable.rb} +4 -2
  29. data/lib/active_storage_validations/{concerns/errorable.rb → shared/asv_errorable.rb} +3 -1
  30. data/lib/active_storage_validations/{concerns/loggable.rb → shared/asv_loggable.rb} +3 -1
  31. data/lib/active_storage_validations/{concerns/optionable.rb → shared/asv_optionable.rb} +4 -2
  32. data/lib/active_storage_validations/{concerns/symbolizable.rb → shared/asv_symbolizable.rb} +3 -1
  33. data/lib/active_storage_validations/size_validator.rb +1 -1
  34. data/lib/active_storage_validations/total_size_validator.rb +1 -1
  35. data/lib/active_storage_validations/version.rb +1 -1
  36. metadata +15 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 435de3a42881b172293cf50bc3edb1e5462f4a0f8346543f14936502abe7a041
4
- data.tar.gz: 6dc253e3b1dcf5ac55ae13bcd4fe9d9cabe39cdf49e0de25cc0f091bfb5c3d1b
3
+ metadata.gz: c5908eeb81003dac14877a0427050b3db222977413379a2c55382676272115e4
4
+ data.tar.gz: 5a49abac59e29c7ba055284fd437a8c1872f9e200c0b7491c613dae8f5152438
5
5
  SHA512:
6
- metadata.gz: bfd15f884cda85c47ad25c1d7e2ca8423f6d6a9e3e4aadeb415492c3a9830a00b10c611ed0eb0a5866bd12e1c2b61aaa69cfccf3952447c3cd716c07e51780c5
7
- data.tar.gz: 91ab2c226d9657f52f6cc5f289fb8697608954d59d34400042e0521b7e60657e5ac5f256b268eef16fd1ffcd83169f61345ba3e7c9e925d1384d427f10a00bad
6
+ metadata.gz: b46c3457c3042e514e9401eb011d2c9bfd880ff3c42d38595b3e33010b95f57e5310bffbbc6af350aacbb55accf3f60cd33b3f7333ee33fceed105aac4e49d64
7
+ data.tar.gz: bebee3a79850fa031e4f8cbdd8d16aec5212e3214d17da6f38f72feb4713320f1ba2b351ba331ac155e0aa637632a50781d36749983aa643fa5f9591ba4a86ea
data/README.md CHANGED
@@ -221,7 +221,8 @@ aspect_ratio_is_not: "must be a %{aspect_ratio} image"
221
221
 
222
222
  ### Content type
223
223
  The `content_type_invalid` key has three variables that you can use:
224
- - `content_type` containing the content type of the sent file
224
+ - `content_type` containing the exact content type of the sent file
225
+ - `human_content_type` containing a more user-friendly version of the sent file content type (e.g. 'TXT' for 'text/plain')
225
226
  - `authorized_types` containing the list of authorized content types
226
227
  - `filename` containing the current file name
227
228
 
@@ -436,6 +437,7 @@ Then you can use the matchers with the syntax specified in the RSpec section, ju
436
437
 
437
438
  To run tests in root folder of gem:
438
439
 
440
+ * `BUNDLE_GEMFILE=gemfiles/rails_6_1_4.gemfile bundle exec rake test` to run for Rails 7.0
439
441
  * `BUNDLE_GEMFILE=gemfiles/rails_7_0.gemfile bundle exec rake test` to run for Rails 7.0
440
442
  * `BUNDLE_GEMFILE=gemfiles/rails_7_1.gemfile bundle exec rake test` to run for Rails 7.1
441
443
  * `BUNDLE_GEMFILE=gemfiles/rails_7_2.gemfile bundle exec rake test` to run for Rails 7.2
@@ -444,10 +446,12 @@ To run tests in root folder of gem:
444
446
  Snippet to run in console:
445
447
 
446
448
  ```bash
449
+ BUNDLE_GEMFILE=gemfiles/rails_6_1_4.gemfile bundle
447
450
  BUNDLE_GEMFILE=gemfiles/rails_7_0.gemfile bundle
448
451
  BUNDLE_GEMFILE=gemfiles/rails_7_1.gemfile bundle
449
452
  BUNDLE_GEMFILE=gemfiles/rails_7_2.gemfile bundle
450
453
  BUNDLE_GEMFILE=gemfiles/rails_8_0.gemfile bundle
454
+ BUNDLE_GEMFILE=gemfiles/rails_6_1_4.gemfile bundle exec rake test
451
455
  BUNDLE_GEMFILE=gemfiles/rails_7_0.gemfile bundle exec rake test
452
456
  BUNDLE_GEMFILE=gemfiles/rails_7_1.gemfile bundle exec rake test
453
457
  BUNDLE_GEMFILE=gemfiles/rails_7_2.gemfile bundle exec rake test
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/attachable.rb'
5
- require_relative 'concerns/errorable.rb'
6
- require_relative 'concerns/optionable.rb'
7
- require_relative 'concerns/symbolizable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_attachable'
5
+ require_relative 'shared/asv_errorable'
6
+ require_relative 'shared/asv_optionable'
7
+ require_relative 'shared/asv_symbolizable'
8
8
 
9
9
  module ActiveStorageValidations
10
10
  class AspectRatioValidator < ActiveModel::EachValidator # :nodoc
11
- include ActiveStorageable
12
- include Attachable
13
- include Errorable
14
- include Optionable
15
- include Symbolizable
11
+ include ASVActiveStorageable
12
+ include ASVAttachable
13
+ include ASVErrorable
14
+ include ASVOptionable
15
+ include ASVSymbolizable
16
16
 
17
17
  AVAILABLE_CHECKS = %i[with].freeze
18
18
  NAMED_ASPECT_RATIOS = %i[square portrait landscape].freeze
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/errorable.rb'
5
- require_relative 'concerns/symbolizable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_errorable'
5
+ require_relative 'shared/asv_symbolizable'
6
6
 
7
7
  module ActiveStorageValidations
8
8
  class AttachedValidator < ActiveModel::EachValidator # :nodoc:
9
- include ActiveStorageable
10
- include Errorable
11
- include Symbolizable
9
+ include ASVActiveStorageable
10
+ include ASVErrorable
11
+ include ASVSymbolizable
12
12
 
13
13
  ERROR_TYPES = %i[blank].freeze
14
14
 
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/errorable.rb'
5
- require_relative 'concerns/optionable.rb'
6
- require_relative 'concerns/symbolizable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_errorable'
5
+ require_relative 'shared/asv_optionable'
6
+ require_relative 'shared/asv_symbolizable'
7
7
 
8
8
  module ActiveStorageValidations
9
9
  class BaseSizeValidator < ActiveModel::EachValidator # :nodoc:
10
- include ActiveStorageable
11
- include Errorable
12
- include Optionable
13
- include Symbolizable
10
+ include ASVActiveStorageable
11
+ include ASVErrorable
12
+ include ASVOptionable
13
+ include ASVSymbolizable
14
14
 
15
15
  delegate :number_to_human_size, to: ActiveSupport::NumberHelper
16
16
 
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/attachable'
4
- require_relative 'concerns/loggable'
3
+ require_relative 'shared/asv_attachable'
4
+ require_relative 'shared/asv_loggable'
5
5
  require 'open3'
6
6
 
7
7
  module ActiveStorageValidations
8
8
  class ContentTypeSpoofDetector
9
9
  class FileCommandLineToolNotInstalledError < StandardError; end
10
10
 
11
- include Attachable
12
- include Loggable
11
+ include ASVAttachable
12
+ include ASVLoggable
13
13
 
14
14
  def initialize(record, attribute, attachable)
15
15
  @record = record
@@ -1,19 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/attachable.rb'
5
- require_relative 'concerns/errorable.rb'
6
- require_relative 'concerns/optionable.rb'
7
- require_relative 'concerns/symbolizable.rb'
8
- require_relative 'content_type_spoof_detector.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_attachable'
5
+ require_relative 'shared/asv_errorable'
6
+ require_relative 'shared/asv_optionable'
7
+ require_relative 'shared/asv_symbolizable'
8
+ require_relative 'content_type_spoof_detector'
9
9
 
10
10
  module ActiveStorageValidations
11
11
  class ContentTypeValidator < ActiveModel::EachValidator # :nodoc:
12
- include ActiveStorageable
13
- include Attachable
14
- include Errorable
15
- include Optionable
16
- include Symbolizable
12
+ include ASVActiveStorageable
13
+ include ASVAttachable
14
+ include ASVErrorable
15
+ include ASVOptionable
16
+ include ASVSymbolizable
17
17
 
18
18
  AVAILABLE_CHECKS = %i[with in].freeze
19
19
  ERROR_TYPES = %i[
@@ -63,10 +63,11 @@ module ActiveStorageValidations
63
63
  end
64
64
 
65
65
  def extension_matches_content_type?(record, attribute, attachable)
66
- extension = @attachable_filename.split('.').second
66
+ return true if !@attachable_filename || !@attachable_content_type
67
67
 
68
+ extension = @attachable_filename.split('.').last
68
69
  possible_extensions = Marcel::TYPE_EXTS[@attachable_content_type]
69
- return true if possible_extensions && extension.in?(possible_extensions)
70
+ return true if possible_extensions && extension.downcase.in?(possible_extensions)
70
71
 
71
72
  errors_options = initialize_and_populate_error_options(options, attachable)
72
73
  add_error(record, attribute, ERROR_TYPES.first, **errors_options)
@@ -111,15 +112,23 @@ module ActiveStorageValidations
111
112
  def initialize_and_populate_error_options(options, attachable)
112
113
  errors_options = initialize_error_options(options, attachable)
113
114
  errors_options[:content_type] = @attachable_content_type
114
- errors_options[:authorized_types] = authorized_content_types_to_human_format
115
+ errors_options[:human_content_type] = content_type_to_human_format(@attachable_content_type)
116
+ errors_options[:authorized_types] = content_type_to_human_format(@authorized_content_types)
115
117
  errors_options
116
118
  end
117
119
 
118
- def authorized_content_types_to_human_format
119
- @authorized_content_types
120
- .map do |authorized_content_type|
121
- authorized_content_type.is_a?(Regexp) ? authorized_content_type.source : authorized_content_type.to_s.split('/').last.upcase
120
+ def content_type_to_human_format(content_type)
121
+ Array(content_type)
122
+ .map do |content_type|
123
+ case content_type
124
+ when String, Symbol
125
+ content_type.to_s.match?(/\//) ? Marcel::TYPE_EXTS[content_type.to_s]&.first&.upcase : content_type.upcase
126
+ when Regexp
127
+ content_type.source
128
+ end
122
129
  end
130
+ .flatten
131
+ .compact
123
132
  .join(', ')
124
133
  end
125
134
 
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/attachable.rb'
5
- require_relative 'concerns/errorable.rb'
6
- require_relative 'concerns/optionable.rb'
7
- require_relative 'concerns/symbolizable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_attachable'
5
+ require_relative 'shared/asv_errorable'
6
+ require_relative 'shared/asv_optionable'
7
+ require_relative 'shared/asv_symbolizable'
8
8
 
9
9
  module ActiveStorageValidations
10
10
  class DimensionValidator < ActiveModel::EachValidator # :nodoc
11
- include ActiveStorageable
12
- include Attachable
13
- include Errorable
14
- include Optionable
15
- include Symbolizable
11
+ include ASVActiveStorageable
12
+ include ASVAttachable
13
+ include ASVErrorable
14
+ include ASVOptionable
15
+ include ASVSymbolizable
16
16
 
17
17
  AVAILABLE_CHECKS = %i[width height min max].freeze
18
18
  ERROR_TYPES = %i[
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/errorable.rb'
5
- require_relative 'concerns/optionable.rb'
6
- require_relative 'concerns/symbolizable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_errorable'
5
+ require_relative 'shared/asv_optionable'
6
+ require_relative 'shared/asv_symbolizable'
7
7
 
8
8
  module ActiveStorageValidations
9
9
  class LimitValidator < ActiveModel::EachValidator # :nodoc:
10
- include ActiveStorageable
11
- include Errorable
12
- include Optionable
13
- include Symbolizable
10
+ include ASVActiveStorageable
11
+ include ASVErrorable
12
+ include ASVOptionable
13
+ include ASVSymbolizable
14
14
 
15
15
  AVAILABLE_CHECKS = %i[max min].freeze
16
16
  ERROR_TYPES = %i[
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Marcel::MimeType.extend "application/x-rar-compressed", parents: %(application/x-rar)
2
4
  Marcel::MimeType.extend "audio/x-hx-aac-adts", parents: %(audio/x-aac)
3
5
  Marcel::MimeType.extend "audio/x-m4a", parents: %(audio/mp4)
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/allow_blankable.rb'
5
- require_relative 'concerns/attachable.rb'
6
- require_relative 'concerns/contextable.rb'
7
- require_relative 'concerns/messageable.rb'
8
- require_relative 'concerns/rspecable.rb'
9
- require_relative 'concerns/validatable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_allow_blankable'
5
+ require_relative 'shared/asv_attachable'
6
+ require_relative 'shared/asv_contextable'
7
+ require_relative 'shared/asv_messageable'
8
+ require_relative 'shared/asv_rspecable'
9
+ require_relative 'shared/asv_validatable'
10
10
 
11
11
  module ActiveStorageValidations
12
12
  module Matchers
@@ -15,13 +15,13 @@ module ActiveStorageValidations
15
15
  end
16
16
 
17
17
  class AspectRatioValidatorMatcher
18
- include ActiveStorageable
19
- include AllowBlankable
20
- include Attachable
21
- include Contextable
22
- include Messageable
23
- include Rspecable
24
- include Validatable
18
+ include ASVActiveStorageable
19
+ include ASVAllowBlankable
20
+ include ASVAttachable
21
+ include ASVContextable
22
+ include ASVMessageable
23
+ include ASVRspecable
24
+ include ASVValidatable
25
25
 
26
26
  def initialize(attribute_name)
27
27
  initialize_allow_blankable
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/attachable.rb'
5
- require_relative 'concerns/contextable.rb'
6
- require_relative 'concerns/messageable.rb'
7
- require_relative 'concerns/rspecable.rb'
8
- require_relative 'concerns/validatable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_attachable'
5
+ require_relative 'shared/asv_contextable'
6
+ require_relative 'shared/asv_messageable'
7
+ require_relative 'shared/asv_rspecable'
8
+ require_relative 'shared/asv_validatable'
9
9
 
10
10
  module ActiveStorageValidations
11
11
  module Matchers
@@ -14,12 +14,12 @@ module ActiveStorageValidations
14
14
  end
15
15
 
16
16
  class AttachedValidatorMatcher
17
- include ActiveStorageable
18
- include Attachable
19
- include Contextable
20
- include Messageable
21
- include Rspecable
22
- include Validatable
17
+ include ASVActiveStorageable
18
+ include ASVAttachable
19
+ include ASVContextable
20
+ include ASVMessageable
21
+ include ASVRspecable
22
+ include ASVValidatable
23
23
 
24
24
  def initialize(attribute_name)
25
25
  initialize_contextable
@@ -3,26 +3,26 @@
3
3
  # Big thank you to the paperclip validation matchers:
4
4
  # https://github.com/thoughtbot/paperclip/blob/v6.1.0/lib/paperclip/matchers/validate_attachment_size_matcher.rb
5
5
 
6
- require_relative 'concerns/active_storageable.rb'
7
- require_relative 'concerns/allow_blankable.rb'
8
- require_relative 'concerns/attachable.rb'
9
- require_relative 'concerns/contextable.rb'
10
- require_relative 'concerns/messageable.rb'
11
- require_relative 'concerns/rspecable.rb'
12
- require_relative 'concerns/validatable.rb'
6
+ require_relative 'shared/asv_active_storageable'
7
+ require_relative 'shared/asv_allow_blankable'
8
+ require_relative 'shared/asv_attachable'
9
+ require_relative 'shared/asv_contextable'
10
+ require_relative 'shared/asv_messageable'
11
+ require_relative 'shared/asv_rspecable'
12
+ require_relative 'shared/asv_validatable'
13
13
 
14
14
  module ActiveStorageValidations
15
15
  module Matchers
16
16
  class BaseSizeValidatorMatcher
17
17
  # BaseSizeValidatorMatcher is an abstract class and shouldn't be instantiated directly.
18
18
 
19
- include ActiveStorageable
20
- include AllowBlankable
21
- include Attachable
22
- include Contextable
23
- include Messageable
24
- include Rspecable
25
- include Validatable
19
+ include ASVActiveStorageable
20
+ include ASVAllowBlankable
21
+ include ASVAttachable
22
+ include ASVContextable
23
+ include ASVMessageable
24
+ include ASVRspecable
25
+ include ASVValidatable
26
26
 
27
27
  def initialize(attribute_name)
28
28
  initialize_allow_blankable
@@ -3,13 +3,13 @@
3
3
  # Big thank you to the paperclip validation matchers:
4
4
  # https://github.com/thoughtbot/paperclip/blob/v6.1.0/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
5
5
 
6
- require_relative 'concerns/active_storageable.rb'
7
- require_relative 'concerns/allow_blankable.rb'
8
- require_relative 'concerns/attachable.rb'
9
- require_relative 'concerns/contextable.rb'
10
- require_relative 'concerns/messageable.rb'
11
- require_relative 'concerns/rspecable.rb'
12
- require_relative 'concerns/validatable.rb'
6
+ require_relative 'shared/asv_active_storageable'
7
+ require_relative 'shared/asv_allow_blankable'
8
+ require_relative 'shared/asv_attachable'
9
+ require_relative 'shared/asv_contextable'
10
+ require_relative 'shared/asv_messageable'
11
+ require_relative 'shared/asv_rspecable'
12
+ require_relative 'shared/asv_validatable'
13
13
 
14
14
  module ActiveStorageValidations
15
15
  module Matchers
@@ -18,13 +18,13 @@ module ActiveStorageValidations
18
18
  end
19
19
 
20
20
  class ContentTypeValidatorMatcher
21
- include ActiveStorageable
22
- include AllowBlankable
23
- include Attachable
24
- include Contextable
25
- include Messageable
26
- include Rspecable
27
- include Validatable
21
+ include ASVActiveStorageable
22
+ include ASVAllowBlankable
23
+ include ASVAttachable
24
+ include ASVContextable
25
+ include ASVMessageable
26
+ include ASVRspecable
27
+ include ASVValidatable
28
28
 
29
29
  def initialize(attribute_name)
30
30
  initialize_allow_blankable
@@ -32,7 +32,7 @@ module ActiveStorageValidations
32
32
  initialize_messageable
33
33
  initialize_rspecable
34
34
  @attribute_name = attribute_name
35
- @allowed_types = @rejected_types = []
35
+ @allowed_content_types = @rejected_content_types = []
36
36
  end
37
37
 
38
38
  def description
@@ -45,13 +45,13 @@ module ActiveStorageValidations
45
45
  message.join("\n")
46
46
  end
47
47
 
48
- def allowing(*types)
49
- @allowed_types = types.flatten
48
+ def allowing(*content_types)
49
+ @allowed_content_types = content_types.flatten
50
50
  self
51
51
  end
52
52
 
53
- def rejecting(*types)
54
- @rejected_types = types.flatten
53
+ def rejecting(*content_types)
54
+ @rejected_content_types = content_types.flatten
55
55
  self
56
56
  end
57
57
 
@@ -62,21 +62,21 @@ module ActiveStorageValidations
62
62
  is_context_valid? &&
63
63
  is_allowing_blank? &&
64
64
  is_custom_message_valid? &&
65
- all_allowed_types_allowed? &&
66
- all_rejected_types_rejected?
65
+ all_allowed_content_types_allowed? &&
66
+ all_rejected_content_types_rejected?
67
67
  end
68
68
 
69
69
  protected
70
70
 
71
71
  def build_failure_message(message)
72
- if @allowed_types_not_allowed.present?
73
- message << " the following content type#{'s' if @allowed_types.count > 1} should be allowed: :#{@allowed_types.join(", :")}"
74
- message << " but #{pluralize(@allowed_types_not_allowed)} rejected"
72
+ if @allowed_content_types_not_allowed.present?
73
+ message << " the following content type#{'s' if @allowed_content_types.count > 1} should be allowed: :#{@allowed_content_types.join(", :")}"
74
+ message << " but #{pluralize(@allowed_content_types_not_allowed)} rejected"
75
75
  end
76
76
 
77
- if @rejected_types_not_rejected.present?
78
- message << " the following content type#{'s' if @rejected_types.count > 1} should be rejected: :#{@rejected_types.join(", :")}"
79
- message << " but #{pluralize(@rejected_types_not_rejected)} accepted"
77
+ if @rejected_content_types_not_rejected.present?
78
+ message << " the following content type#{'s' if @rejected_content_types.count > 1} should be rejected: :#{@rejected_content_types.join(", :")}"
79
+ message << " but #{pluralize(@rejected_content_types_not_rejected)} accepted"
80
80
  end
81
81
  end
82
82
 
@@ -88,25 +88,25 @@ module ActiveStorageValidations
88
88
  end
89
89
  end
90
90
 
91
- def all_allowed_types_allowed?
92
- @allowed_types_not_allowed ||= @allowed_types.reject { |type| type_allowed?(type) }
93
- @allowed_types_not_allowed.empty?
91
+ def all_allowed_content_types_allowed?
92
+ @allowed_content_types_not_allowed ||= @allowed_content_types.reject { |type| type_allowed?(type) }
93
+ @allowed_content_types_not_allowed.empty?
94
94
  end
95
95
 
96
- def all_rejected_types_rejected?
97
- @rejected_types_not_rejected ||= @rejected_types.select { |type| type_allowed?(type) }
98
- @rejected_types_not_rejected.empty?
96
+ def all_rejected_content_types_rejected?
97
+ @rejected_content_types_not_rejected ||= @rejected_content_types.select { |type| type_allowed?(type) }
98
+ @rejected_content_types_not_rejected.empty?
99
99
  end
100
100
 
101
- def type_allowed?(type)
102
- attach_file_of_type(type)
101
+ def type_allowed?(content_type)
102
+ attach_file_with_content_type(content_type)
103
103
  validate
104
104
  detach_file
105
105
  is_valid?
106
106
  end
107
107
 
108
- def attach_file_of_type(type)
109
- @subject.public_send(@attribute_name).attach(attachment_for(type))
108
+ def attach_file_with_content_type(content_type)
109
+ @subject.public_send(@attribute_name).attach(attachment_for(content_type))
110
110
  end
111
111
 
112
112
  def is_custom_message_valid?
@@ -121,13 +121,13 @@ module ActiveStorageValidations
121
121
  @subject.public_send(@attribute_name).attach(attachment_for('fake/fake'))
122
122
  end
123
123
 
124
- def attachment_for(type)
125
- suffix = type.to_s.split('/').last
124
+ def attachment_for(content_type)
125
+ suffix = Marcel::TYPE_EXTS[content_type.to_s]&.first || 'fake'
126
126
 
127
127
  {
128
128
  io: Tempfile.new('.'),
129
129
  filename: "test.#{suffix}",
130
- content_type: type
130
+ content_type: content_type
131
131
  }
132
132
  end
133
133
 
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/allow_blankable.rb'
5
- require_relative 'concerns/attachable'
6
- require_relative 'concerns/contextable.rb'
7
- require_relative 'concerns/messageable.rb'
8
- require_relative 'concerns/rspecable.rb'
9
- require_relative 'concerns/validatable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_allow_blankable'
5
+ require_relative 'shared/asv_attachable'
6
+ require_relative 'shared/asv_contextable'
7
+ require_relative 'shared/asv_messageable'
8
+ require_relative 'shared/asv_rspecable'
9
+ require_relative 'shared/asv_validatable'
10
10
 
11
11
  module ActiveStorageValidations
12
12
  module Matchers
@@ -15,13 +15,13 @@ module ActiveStorageValidations
15
15
  end
16
16
 
17
17
  class DimensionValidatorMatcher
18
- include ActiveStorageable
19
- include AllowBlankable
20
- include Attachable
21
- include Contextable
22
- include Messageable
23
- include Rspecable
24
- include Validatable
18
+ include ASVActiveStorageable
19
+ include ASVAllowBlankable
20
+ include ASVAttachable
21
+ include ASVContextable
22
+ include ASVMessageable
23
+ include ASVRspecable
24
+ include ASVValidatable
25
25
 
26
26
  def initialize(attribute_name)
27
27
  initialize_allow_blankable
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable'
4
- require_relative 'concerns/allow_blankable'
5
- require_relative 'concerns/attachable'
6
- require_relative 'concerns/contextable'
7
- require_relative 'concerns/messageable'
8
- require_relative 'concerns/rspecable'
9
- require_relative 'concerns/validatable'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_allow_blankable'
5
+ require_relative 'shared/asv_attachable'
6
+ require_relative 'shared/asv_contextable'
7
+ require_relative 'shared/asv_messageable'
8
+ require_relative 'shared/asv_rspecable'
9
+ require_relative 'shared/asv_validatable'
10
10
 
11
11
  module ActiveStorageValidations
12
12
  module Matchers
@@ -15,13 +15,13 @@ module ActiveStorageValidations
15
15
  end
16
16
 
17
17
  class LimitValidatorMatcher
18
- include ActiveStorageable
19
- include AllowBlankable
20
- include Attachable
21
- include Contextable
22
- include Messageable
23
- include Rspecable
24
- include Validatable
18
+ include ASVActiveStorageable
19
+ include ASVAllowBlankable
20
+ include ASVAttachable
21
+ include ASVContextable
22
+ include ASVMessageable
23
+ include ASVRspecable
24
+ include ASVValidatable
25
25
 
26
26
  def initialize(attribute_name)
27
27
  initialize_allow_blankable
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/allow_blankable.rb'
5
- require_relative 'concerns/attachable.rb'
6
- require_relative 'concerns/contextable.rb'
7
- require_relative 'concerns/messageable.rb'
8
- require_relative 'concerns/rspecable.rb'
9
- require_relative 'concerns/validatable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_allow_blankable'
5
+ require_relative 'shared/asv_attachable'
6
+ require_relative 'shared/asv_contextable'
7
+ require_relative 'shared/asv_messageable'
8
+ require_relative 'shared/asv_rspecable'
9
+ require_relative 'shared/asv_validatable'
10
10
 
11
11
  module ActiveStorageValidations
12
12
  module Matchers
@@ -15,13 +15,13 @@ module ActiveStorageValidations
15
15
  end
16
16
 
17
17
  class ProcessableImageValidatorMatcher
18
- include ActiveStorageable
19
- include AllowBlankable
20
- include Attachable
21
- include Contextable
22
- include Messageable
23
- include Rspecable
24
- include Validatable
18
+ include ASVActiveStorageable
19
+ include ASVAllowBlankable
20
+ include ASVAttachable
21
+ include ASVContextable
22
+ include ASVMessageable
23
+ include ASVRspecable
24
+ include ASVValidatable
25
25
 
26
26
  def initialize(attribute_name)
27
27
  initialize_allow_blankable
@@ -1,8 +1,10 @@
1
- require "active_support/concern"
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
2
4
 
3
5
  module ActiveStorageValidations
4
6
  module Matchers
5
- module ActiveStorageable
7
+ module ASVActiveStorageable
6
8
  extend ActiveSupport::Concern
7
9
 
8
10
  private
@@ -1,8 +1,10 @@
1
- require "active_support/concern"
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
2
4
 
3
5
  module ActiveStorageValidations
4
6
  module Matchers
5
- module AllowBlankable
7
+ module ASVAllowBlankable
6
8
  extend ActiveSupport::Concern
7
9
 
8
10
  def initialize_allow_blankable
@@ -1,6 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+
1
5
  module ActiveStorageValidations
2
6
  module Matchers
3
- module Attachable
7
+ module ASVAttachable
8
+ extend ActiveSupport::Concern
9
+
4
10
  private
5
11
 
6
12
  def attach_file(file = dummy_file)
@@ -1,8 +1,10 @@
1
- require "active_support/concern"
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
2
4
 
3
5
  module ActiveStorageValidations
4
6
  module Matchers
5
- module Contextable
7
+ module ASVContextable
6
8
  extend ActiveSupport::Concern
7
9
 
8
10
  def initialize_contextable
@@ -1,8 +1,10 @@
1
- require "active_support/concern"
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
2
4
 
3
5
  module ActiveStorageValidations
4
6
  module Matchers
5
- module Messageable
7
+ module ASVMessageable
6
8
  extend ActiveSupport::Concern
7
9
 
8
10
  def initialize_messageable
@@ -1,8 +1,10 @@
1
- require "active_support/concern"
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
2
4
 
3
5
  module ActiveStorageValidations
4
6
  module Matchers
5
- module Rspecable
7
+ module ASVRspecable
6
8
  extend ActiveSupport::Concern
7
9
 
8
10
  def initialize_rspecable
@@ -1,8 +1,10 @@
1
- require "active_support/concern"
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
2
4
 
3
5
  module ActiveStorageValidations
4
6
  module Matchers
5
- module Validatable
7
+ module ASVValidatable
6
8
  extend ActiveSupport::Concern
7
9
 
8
10
  private
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/loggable'
3
+ require_relative 'shared/asv_loggable'
4
4
 
5
5
  module ActiveStorageValidations
6
6
  class Metadata
7
- include Loggable
7
+ include ASVLoggable
8
8
 
9
9
  class InvalidImageError < StandardError; end
10
10
 
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'concerns/active_storageable.rb'
4
- require_relative 'concerns/attachable.rb'
5
- require_relative 'concerns/errorable.rb'
6
- require_relative 'concerns/symbolizable.rb'
3
+ require_relative 'shared/asv_active_storageable'
4
+ require_relative 'shared/asv_attachable'
5
+ require_relative 'shared/asv_errorable'
6
+ require_relative 'shared/asv_symbolizable'
7
7
 
8
8
  module ActiveStorageValidations
9
9
  class ProcessableImageValidator < ActiveModel::EachValidator # :nodoc
10
- include ActiveStorageable
11
- include Attachable
12
- include Errorable
13
- include Symbolizable
10
+ include ASVActiveStorageable
11
+ include ASVAttachable
12
+ include ASVErrorable
13
+ include ASVSymbolizable
14
14
 
15
15
  ERROR_TYPES = %i[
16
16
  image_not_processable
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveStorageValidations
2
- # ActiveStorageValidations::ActiveStorageable
4
+ # ActiveStorageValidations::ASVActiveStorageable
3
5
  #
4
6
  # Validator helper methods to make our code more explicit.
5
- module ActiveStorageable
7
+ module ASVActiveStorageable
6
8
  extend ActiveSupport::Concern
7
9
 
8
10
  private
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "../metadata"
2
4
 
3
5
  module ActiveStorageValidations
4
- # ActiveStorageValidations::Attachable
6
+ # ActiveStorageValidations::ASVAttachable
5
7
  #
6
8
  # Validator methods for analyzing attachable.
7
9
  #
8
10
  # An attachable is a file representation such as ActiveStorage::Blob,
9
11
  # ActionDispatch::Http::UploadedFile, Rack::Test::UploadedFile, Hash, String,
10
12
  # File or Pathname
11
- module Attachable
13
+ module ASVAttachable
12
14
  extend ActiveSupport::Concern
13
15
 
14
16
  private
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveStorageValidations
2
- module Errorable
4
+ module ASVErrorable
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  def initialize_error_options(options, file = nil)
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveStorageValidations
2
- module Loggable
4
+ module ASVLoggable
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  def logger
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveStorageValidations
2
- # ActiveStorageValidations::Optionable
4
+ # ActiveStorageValidations::ASVOptionable
3
5
  #
4
6
  # Helper method to flatten the validator options.
5
- module Optionable
7
+ module ASVOptionable
6
8
  extend ActiveSupport::Concern
7
9
 
8
10
  private
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveStorageValidations
2
- module Symbolizable
4
+ module ASVSymbolizable
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  class_methods do
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_size_validator.rb'
3
+ require_relative 'base_size_validator'
4
4
 
5
5
  module ActiveStorageValidations
6
6
  class SizeValidator < BaseSizeValidator
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_size_validator.rb'
3
+ require_relative 'base_size_validator'
4
4
 
5
5
  module ActiveStorageValidations
6
6
  class TotalSizeValidator < BaseSizeValidator
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveStorageValidations
4
- VERSION = '1.3.1'
4
+ VERSION = '1.3.3'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_storage_validations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-08 00:00:00.000000000 Z
11
+ date: 2024-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob
@@ -262,12 +262,6 @@ files:
262
262
  - lib/active_storage_validations/aspect_ratio_validator.rb
263
263
  - lib/active_storage_validations/attached_validator.rb
264
264
  - lib/active_storage_validations/base_size_validator.rb
265
- - lib/active_storage_validations/concerns/active_storageable.rb
266
- - lib/active_storage_validations/concerns/attachable.rb
267
- - lib/active_storage_validations/concerns/errorable.rb
268
- - lib/active_storage_validations/concerns/loggable.rb
269
- - lib/active_storage_validations/concerns/optionable.rb
270
- - lib/active_storage_validations/concerns/symbolizable.rb
271
265
  - lib/active_storage_validations/content_type_spoof_detector.rb
272
266
  - lib/active_storage_validations/content_type_validator.rb
273
267
  - lib/active_storage_validations/dimension_validator.rb
@@ -278,22 +272,28 @@ files:
278
272
  - lib/active_storage_validations/matchers/aspect_ratio_validator_matcher.rb
279
273
  - lib/active_storage_validations/matchers/attached_validator_matcher.rb
280
274
  - lib/active_storage_validations/matchers/base_size_validator_matcher.rb
281
- - lib/active_storage_validations/matchers/concerns/active_storageable.rb
282
- - lib/active_storage_validations/matchers/concerns/allow_blankable.rb
283
- - lib/active_storage_validations/matchers/concerns/attachable.rb
284
- - lib/active_storage_validations/matchers/concerns/contextable.rb
285
- - lib/active_storage_validations/matchers/concerns/messageable.rb
286
- - lib/active_storage_validations/matchers/concerns/rspecable.rb
287
- - lib/active_storage_validations/matchers/concerns/validatable.rb
288
275
  - lib/active_storage_validations/matchers/content_type_validator_matcher.rb
289
276
  - lib/active_storage_validations/matchers/dimension_validator_matcher.rb
290
277
  - lib/active_storage_validations/matchers/limit_validator_matcher.rb
291
278
  - lib/active_storage_validations/matchers/processable_image_validator_matcher.rb
279
+ - lib/active_storage_validations/matchers/shared/asv_active_storageable.rb
280
+ - lib/active_storage_validations/matchers/shared/asv_allow_blankable.rb
281
+ - lib/active_storage_validations/matchers/shared/asv_attachable.rb
282
+ - lib/active_storage_validations/matchers/shared/asv_contextable.rb
283
+ - lib/active_storage_validations/matchers/shared/asv_messageable.rb
284
+ - lib/active_storage_validations/matchers/shared/asv_rspecable.rb
285
+ - lib/active_storage_validations/matchers/shared/asv_validatable.rb
292
286
  - lib/active_storage_validations/matchers/size_validator_matcher.rb
293
287
  - lib/active_storage_validations/matchers/total_size_validator_matcher.rb
294
288
  - lib/active_storage_validations/metadata.rb
295
289
  - lib/active_storage_validations/processable_image_validator.rb
296
290
  - lib/active_storage_validations/railtie.rb
291
+ - lib/active_storage_validations/shared/asv_active_storageable.rb
292
+ - lib/active_storage_validations/shared/asv_attachable.rb
293
+ - lib/active_storage_validations/shared/asv_errorable.rb
294
+ - lib/active_storage_validations/shared/asv_loggable.rb
295
+ - lib/active_storage_validations/shared/asv_optionable.rb
296
+ - lib/active_storage_validations/shared/asv_symbolizable.rb
297
297
  - lib/active_storage_validations/size_validator.rb
298
298
  - lib/active_storage_validations/total_size_validator.rb
299
299
  - lib/active_storage_validations/version.rb