Skip to content

Commit

Permalink
Follow-up for #2592
Browse files Browse the repository at this point in the history
- Raise StandardError instead of IntegrityError when image processor is not available
- Split dimension_ranges into width_range and height_range for simplicity
- Fix RSpec implicit block expectation syntax deprecation
- Test only with CarrierWave::MiniMagick as this functionality doesn't depend on a specific processor
  • Loading branch information
mshibuya committed Mar 18, 2023
1 parent 010b4e4 commit cc5cc22
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 210 deletions.
1 change: 0 additions & 1 deletion README.md
Expand Up @@ -1015,7 +1015,6 @@ errors:
max_width_error: "Image width should be less than %{max_width}px"
min_height_error: "Image height should be greater than %{min_height}px"
max_height_error: "Image height should be less than %{max_height}px"
no_processing_module_error: You need to include one of CarrierWave::MiniMagick, CarrierWave::RMagick, or CarrierWave::Vips
```

The [`carrierwave-i18n`](https://github.com/carrierwaveuploader/carrierwave-i18n)
Expand Down
1 change: 0 additions & 1 deletion lib/carrierwave/locale/en.yml
Expand Up @@ -15,4 +15,3 @@ en:
max_width_error: "Image width should be less than %{max_width}px"
min_height_error: "Image height should be greater than %{min_height}px"
max_height_error: "Image height should be less than %{max_height}px"
no_processing_module_error: You need to include one of CarrierWave::MiniMagick, CarrierWave::RMagick, or CarrierWave::Vips
54 changes: 32 additions & 22 deletions lib/carrierwave/uploader/dimension.rb
Expand Up @@ -10,44 +10,54 @@ module Dimension
end

##
# Override this method in your uploader to provide a tuple of
# width Range and height Range which are allowed to be uploaded.
# Override this method in your uploader to provide a Range of width which
# are allowed to be uploaded.
# === Returns
#
# [NilClass, [Range, Range]]
# width range and height range which are permitted to be uploaded
# [NilClass, Range] a width range which are permitted to be uploaded
#
# === Examples
#
# def dimension_ranges
# [1000..2000, 1000..]
# def width_range
# 1000..2000
# end
#
def dimension_ranges; end
def width_range; end

private
##
# Override this method in your uploader to provide a Range of height which
# are allowed to be uploaded.
# === Returns
#
# [NilClass, Range] a height range which are permitted to be uploaded
#
# === Examples
#
# def height_range
# 1000..
# end
#
def height_range; end

private

def check_dimensions!(new_file)
# NOTE: Skip the check for resized images
return if version_name.present?

expected_dimension_ranges = dimension_ranges
return unless expected_dimension_ranges.try(:all?) { |v| v.is_a?(::Range) }
return unless width_range || height_range

unless respond_to?(:width) || respond_to?(:height)
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.no_processing_module_error")
raise 'You need to include one of CarrierWave::MiniMagick, CarrierWave::RMagick, or CarrierWave::Vips to perform image dimension validation'
end

expected_width_range = expected_dimension_ranges[0]
expected_height_range = expected_dimension_ranges[1]
if expected_width_range.begin && width < expected_width_range.begin
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.min_width_error", :min_width => ActiveSupport::NumberHelper.number_to_delimited(expected_width_range.begin))
elsif expected_width_range.end && width > expected_width_range.end
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.max_width_error", :max_width => ActiveSupport::NumberHelper.number_to_delimited(expected_width_range.end))
elsif expected_height_range.begin && height < expected_height_range.begin
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.min_height_error", :min_height => ActiveSupport::NumberHelper.number_to_delimited(expected_height_range.begin))
elsif expected_height_range.end && height > expected_height_range.end
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.max_height_error", :max_height => ActiveSupport::NumberHelper.number_to_delimited(expected_height_range.end))
if width_range&.begin && width < width_range.begin
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.min_width_error", :min_width => ActiveSupport::NumberHelper.number_to_delimited(width_range.begin))
elsif width_range&.end && width > width_range.end
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.max_width_error", :max_width => ActiveSupport::NumberHelper.number_to_delimited(width_range.end))
elsif height_range&.begin && height < height_range.begin
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.min_height_error", :min_height => ActiveSupport::NumberHelper.number_to_delimited(height_range.begin))
elsif height_range&.end && height > height_range.end
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.max_height_error", :max_height => ActiveSupport::NumberHelper.number_to_delimited(height_range.end))
end
end

Expand Down

0 comments on commit cc5cc22

Please sign in to comment.