active_storage_validations 1.3.1 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
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