active_storage_validations 0.9.5 → 0.9.6
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 +4 -4
 - data/README.md +20 -3
 - data/lib/active_storage_validations/aspect_ratio_validator.rb +1 -1
 - data/lib/active_storage_validations/dimension_validator.rb +1 -1
 - data/lib/active_storage_validations/matchers.rb +1 -1
 - data/lib/active_storage_validations/metadata.rb +9 -10
 - data/lib/active_storage_validations/size_validator.rb +11 -0
 - data/lib/active_storage_validations/version.rb +1 -1
 - metadata +46 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 52bbd6249bbadd7549ccd7daf17673e98ccfd757b15ec954b67c5d7ce3395c84
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: cf3664efb821cd7fe60b0536e0d394f900af6fb128161ab13d62d373b2018013
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: bece2608d56156a83e468ffaf4ed31dead1769882457c1ff8480586ce0335122b475084f24f914d4d8083c5b4f2b891bda7465b25b2d34272ba76631c313167f
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 56a1cbb1bd5bddc4cce887405eecd6d5e27cc9bfcdca97e636ccf43cf98ce29d9077e1b3e7a602dcb229cd24d25125024c4d83beba6f82050edc773b32d21ca4
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -58,14 +58,15 @@ end 
     | 
|
| 
       58 
58 
     | 
    
         | 
| 
       59 
59 
     | 
    
         
             
            ### More examples
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
            - Content type validation using symbols. In order to infer the correct mime type from the symbol, the types must be registered with `MimeMagic::EXTENSIONS 
     | 
| 
      
 61 
     | 
    
         
            +
            - Content type validation using symbols. In order to infer the correct mime type from the symbol, the types must be registered with `Marcel::EXTENSIONS` (`MimeMagic::EXTENSIONS` for Rails <= 6.1.3).
         
     | 
| 
       62 
62 
     | 
    
         | 
| 
       63 
63 
     | 
    
         
             
            ```ruby
         
     | 
| 
       64 
64 
     | 
    
         
             
            class User < ApplicationRecord
         
     | 
| 
       65 
65 
     | 
    
         
             
              has_one_attached :avatar
         
     | 
| 
       66 
66 
     | 
    
         
             
              has_many_attached :photos
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
              validates :avatar, attached: true, content_type: :png #  
     | 
| 
      
 68 
     | 
    
         
            +
              validates :avatar, attached: true, content_type: :png # Marcel::Magic.by_extension(:png).to_s => 'image/png'
         
     | 
| 
      
 69 
     | 
    
         
            +
                                                                    # Rails <= 6.1.3; MimeMagic.by_extension(:png).to_s => 'image/png'
         
     | 
| 
       69 
70 
     | 
    
         
             
              # or
         
     | 
| 
       70 
71 
     | 
    
         
             
              validates :photos, attached: true, content_type: [:png, :jpg, :jpeg]
         
     | 
| 
       71 
72 
     | 
    
         
             
              # or
         
     | 
| 
         @@ -292,6 +293,20 @@ To run tests in root folder of gem: 
     | 
|
| 
       292 
293 
     | 
    
         
             
            * `BUNDLE_GEMFILE=gemfiles/rails_5_2.gemfile bundle exec rake test` to run for Rails 5.2
         
     | 
| 
       293 
294 
     | 
    
         
             
            * `BUNDLE_GEMFILE=gemfiles/rails_6_0.gemfile bundle exec rake test` to run for Rails 6.0
         
     | 
| 
       294 
295 
     | 
    
         
             
            * `BUNDLE_GEMFILE=gemfiles/rails_6_1.gemfile bundle exec rake test` to run for Rails 6.1
         
     | 
| 
      
 296 
     | 
    
         
            +
            * `BUNDLE_GEMFILE=gemfiles/rails_next.gemfile bundle exec rake test` to run for Rails main branch
         
     | 
| 
      
 297 
     | 
    
         
            +
             
     | 
| 
      
 298 
     | 
    
         
            +
            Snippet to run in console:
         
     | 
| 
      
 299 
     | 
    
         
            +
             
     | 
| 
      
 300 
     | 
    
         
            +
            ```
         
     | 
| 
      
 301 
     | 
    
         
            +
            BUNDLE_GEMFILE=gemfiles/rails_5_2.gemfile bundle
         
     | 
| 
      
 302 
     | 
    
         
            +
            BUNDLE_GEMFILE=gemfiles/rails_6_0.gemfile bundle
         
     | 
| 
      
 303 
     | 
    
         
            +
            BUNDLE_GEMFILE=gemfiles/rails_6_1.gemfile bundle
         
     | 
| 
      
 304 
     | 
    
         
            +
            BUNDLE_GEMFILE=gemfiles/rails_next.gemfile bundle
         
     | 
| 
      
 305 
     | 
    
         
            +
            BUNDLE_GEMFILE=gemfiles/rails_5_2.gemfile bundle exec rake test
         
     | 
| 
      
 306 
     | 
    
         
            +
            BUNDLE_GEMFILE=gemfiles/rails_6_0.gemfile bundle exec rake test
         
     | 
| 
      
 307 
     | 
    
         
            +
            BUNDLE_GEMFILE=gemfiles/rails_6_1.gemfile bundle exec rake test
         
     | 
| 
      
 308 
     | 
    
         
            +
            BUNDLE_GEMFILE=gemfiles/rails_next.gemfile bundle exec rake test
         
     | 
| 
      
 309 
     | 
    
         
            +
            ```
         
     | 
| 
       295 
310 
     | 
    
         | 
| 
       296 
311 
     | 
    
         
             
            ## Known issues
         
     | 
| 
       297 
312 
     | 
    
         | 
| 
         @@ -344,7 +359,9 @@ You are welcome to contribute. 
     | 
|
| 
       344 
359 
     | 
    
         
             
            - https://github.com/jayshepherd
         
     | 
| 
       345 
360 
     | 
    
         
             
            - https://github.com/ohbarye
         
     | 
| 
       346 
361 
     | 
    
         
             
            - https://github.com/randsina
         
     | 
| 
       347 
     | 
    
         
            -
            - https://github.com 
     | 
| 
      
 362 
     | 
    
         
            +
            - https://github.com/vietqhoang
         
     | 
| 
      
 363 
     | 
    
         
            +
            - https://github.com/kemenaran
         
     | 
| 
      
 364 
     | 
    
         
            +
            - https://github.com/jrmhaig
         
     | 
| 
       348 
365 
     | 
    
         | 
| 
       349 
366 
     | 
    
         
             
            ## License
         
     | 
| 
       350 
367 
     | 
    
         | 
| 
         @@ -18,7 +18,7 @@ module ActiveStorageValidations 
     | 
|
| 
       18 
18 
     | 
    
         
             
                  raise ArgumentError, 'You must pass "aspect_ratio: :OPTION" option to the validator'
         
     | 
| 
       19 
19 
     | 
    
         
             
                end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                if Rails 
     | 
| 
      
 21 
     | 
    
         
            +
                if Rails.gem_version >= Gem::Version.new('6.0.0')
         
     | 
| 
       22 
22 
     | 
    
         
             
                  def validate_each(record, attribute, _value)
         
     | 
| 
       23 
23 
     | 
    
         
             
                    return true unless record.send(attribute).attached?
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
         @@ -22,7 +22,7 @@ module ActiveStorageValidations 
     | 
|
| 
       22 
22 
     | 
    
         
             
                end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
                def self.mock_metadata(attachment, width, height)
         
     | 
| 
       25 
     | 
    
         
            -
                  if Rails 
     | 
| 
      
 25 
     | 
    
         
            +
                  if Rails.gem_version >= Gem::Version.new('6.0.0')
         
     | 
| 
       26 
26 
     | 
    
         
             
                    # Mock the Metadata class for rails 6
         
     | 
| 
       27 
27 
     | 
    
         
             
                    mock = OpenStruct.new(metadata: { width: width, height: height })
         
     | 
| 
       28 
28 
     | 
    
         
             
                    stub_method(ActiveStorageValidations::Metadata, :new, mock) do
         
     | 
| 
         @@ -21,17 +21,16 @@ module ActiveStorageValidations 
     | 
|
| 
       21 
21 
     | 
    
         
             
                def read_image
         
     | 
| 
       22 
22 
     | 
    
         
             
                  is_string = file.is_a?(String)
         
     | 
| 
       23 
23 
     | 
    
         
             
                  if is_string || file.is_a?(ActiveStorage::Blob)
         
     | 
| 
       24 
     | 
    
         
            -
                     
     | 
| 
       25 
     | 
    
         
            -
                       
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                         
     | 
| 
      
 24 
     | 
    
         
            +
                    blob =
         
     | 
| 
      
 25 
     | 
    
         
            +
                      if is_string
         
     | 
| 
      
 26 
     | 
    
         
            +
                        if Rails.gem_version < Gem::Version.new('6.1.0')
         
     | 
| 
      
 27 
     | 
    
         
            +
                          ActiveStorage::Blob.find_signed(file)
         
     | 
| 
      
 28 
     | 
    
         
            +
                        else
         
     | 
| 
      
 29 
     | 
    
         
            +
                          ActiveStorage::Blob.find_signed!(file)
         
     | 
| 
      
 30 
     | 
    
         
            +
                        end
         
     | 
| 
      
 31 
     | 
    
         
            +
                      else
         
     | 
| 
      
 32 
     | 
    
         
            +
                        file
         
     | 
| 
       31 
33 
     | 
    
         
             
                      end
         
     | 
| 
       32 
     | 
    
         
            -
                    else
         
     | 
| 
       33 
     | 
    
         
            -
                      blob = file
         
     | 
| 
       34 
     | 
    
         
            -
                    end
         
     | 
| 
       35 
34 
     | 
    
         | 
| 
       36 
35 
     | 
    
         
             
                    tempfile = Tempfile.new(["ActiveStorage-#{blob.id}-", blob.filename.extension_with_delimiter])
         
     | 
| 
       37 
36 
     | 
    
         
             
                    tempfile.binmode
         
     | 
| 
         @@ -25,6 +25,9 @@ module ActiveStorageValidations 
     | 
|
| 
       25 
25 
     | 
    
         
             
                    next if content_size_valid?(file.blob.byte_size)
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                    errors_options[:file_size] = number_to_human_size(file.blob.byte_size)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    errors_options[:min_size] = number_to_human_size(min_size)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    errors_options[:max_size] = number_to_human_size(max_size)
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       28 
31 
     | 
    
         
             
                    record.errors.add(attribute, :file_size_out_of_range, **errors_options)
         
     | 
| 
       29 
32 
     | 
    
         
             
                    break
         
     | 
| 
       30 
33 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -43,5 +46,13 @@ module ActiveStorageValidations 
     | 
|
| 
       43 
46 
     | 
    
         
             
                    file_size >= options[:greater_than_or_equal_to]
         
     | 
| 
       44 
47 
     | 
    
         
             
                  end
         
     | 
| 
       45 
48 
     | 
    
         
             
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                def min_size
         
     | 
| 
      
 51 
     | 
    
         
            +
                  options[:between]&.min || options[:greater_than] || options[:greater_than_or_equal_to]
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                def max_size
         
     | 
| 
      
 55 
     | 
    
         
            +
                  options[:between]&.max || options[:less_than] || options[:less_than_or_equal_to]
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
       46 
57 
     | 
    
         
             
              end
         
     | 
| 
       47 
58 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,17 +1,59 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: active_storage_validations
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.9. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.9.6
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Igor Kasyanchuk
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-11-23 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
     | 
    
         
            -
              name:  
     | 
| 
      
 14 
     | 
    
         
            +
              name: activejob
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 5.2.0
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: 5.2.0
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: activemodel
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 5.2.0
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: 5.2.0
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: activestorage
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: 5.2.0
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: 5.2.0
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: activesupport
         
     | 
| 
       15 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
59 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -153,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       153 
195 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       154 
196 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       155 
197 
     | 
    
         
             
            requirements: []
         
     | 
| 
       156 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 198 
     | 
    
         
            +
            rubygems_version: 3.1.4
         
     | 
| 
       157 
199 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       158 
200 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       159 
201 
     | 
    
         
             
            summary: Validations for Active Storage
         
     |