Skip to content

Commit

Permalink
Show warning if #filename is safeguarded as in the pre-3.0 style
Browse files Browse the repository at this point in the history
Closes #2708
  • Loading branch information
mshibuya committed Jan 13, 2024
1 parent d27c987 commit 52da2af
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
12 changes: 12 additions & 0 deletions lib/carrierwave/uploader/store.rb
Expand Up @@ -14,6 +14,8 @@ def initialize(*)
@file, @filename, @cache_id, @identifier, @deduplication_index = nil
end
}

after :store, :show_warning_when_filename_is_unavailable
end

##
Expand Down Expand Up @@ -133,6 +135,16 @@ def full_filename(for_file)
forcing_extension(for_file)
end

def show_warning_when_filename_is_unavailable(_)
return if filename

warn <<~MESSAGE
[WARNING] Your uploader's #filename method defined at #{method(:filename).source_location.join(':')} didn't return value after storing the file.
It's likely that the method is safeguarded with `if original_filename`, which were necessary for pre-3.x CarrierWave but is no longer necessary.
Removing it is recommended, as it is known to cause issues depending on the usecase: https://github.com/carrierwaveuploader/carrierwave/issues/2708#{' '}
MESSAGE
end

def storage
@storage ||= self.class.storage.new(self)
end
Expand Down
16 changes: 16 additions & 0 deletions spec/uploader/store_spec.rb
Expand Up @@ -247,6 +247,22 @@ def filename; "foo.jpg"; end
end
end

context "with a filename safeguarded by 'if original_filename'" do
before do
@uploader_class.class_eval do
def filename
"foo.jpg" if original_filename
end
end
end

it "shows warning on store" do
expect(@uploader).to receive(:warn).with(/Your uploader's #filename method .+ didn't return value/)
@file = File.open(file_path('test.jpg'))
@uploader.store!(@file)
end
end

describe 'without a store dir' do
before do
@uploader_class.class_eval do
Expand Down

0 comments on commit 52da2af

Please sign in to comment.