From a9de7565eabb4cdca05bb090cdf797eb1720c09c Mon Sep 17 00:00:00 2001 From: Mitsuhiro Shibuya Date: Sun, 15 Jan 2023 16:40:24 +0900 Subject: [PATCH] Give a stable name to version classes Fixes #2407, Fixes #2471 --- lib/carrierwave/uploader/versions.rb | 9 ++++++--- spec/uploader/versions_spec.rb | 8 ++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/carrierwave/uploader/versions.rb b/lib/carrierwave/uploader/versions.rb index 0816343dd..a8ab1402b 100644 --- a/lib/carrierwave/uploader/versions.rb +++ b/lib/carrierwave/uploader/versions.rb @@ -74,9 +74,11 @@ def recursively_apply_block_to_versions(&block) private def build_version(name, options) + class_name = "#{name.to_s.camelize}VersionUploader" + if !versions.has_key?(name) uploader = Class.new(self) - const_set("Uploader#{uploader.object_id}".tr('-', '_'), uploader) + const_set(class_name, uploader) uploader.version_names += [name] uploader.versions = {} uploader.processors = [] @@ -118,8 +120,9 @@ def #{name} end RUBY else - uploader = Class.new(versions[name]) - const_set("Uploader#{uploader.object_id}".tr('-', '_'), uploader) + parent = versions[name] + uploader = Class.new(parent) + parent.const_set(class_name, uploader) uploader.processors = [] uploader.version_options = uploader.version_options.merge(options) end diff --git a/spec/uploader/versions_spec.rb b/spec/uploader/versions_spec.rb index 9c18b0bcf..36a380219 100644 --- a/spec/uploader/versions_spec.rb +++ b/spec/uploader/versions_spec.rb @@ -8,6 +8,9 @@ end after do + @uploader_class.constants + .select { |const| const.to_s =~ /Uploader$/ } + .each { |const| @uploader_class.send(:remove_const, const)} FileUtils.rm_rf(public_path) end @@ -56,6 +59,11 @@ expect(@uploader.thumb.class.version_names).to eq([:thumb]) end + it "should set the class name" do + @uploader_class.version :thumb + expect(@uploader.thumb.class).to eq @uploader_class.const_get :ThumbVersionUploader + end + it "should remember mount options" do model = double('a model') @uploader_class.version :thumb