From 18cb44684b79d23dc1c45e4a9eeeb73dda5e9194 Mon Sep 17 00:00:00 2001 From: Marius Balteanu Date: Tue, 27 Feb 2024 07:06:47 +0000 Subject: [PATCH] Introduces Redmine::Plugin#attachment_object_type to provide better API for registering plugin models having attachments (#39948, #39862). MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Patch by Jens Krämer (@jkraemer). git-svn-id: https://svn.redmine.org/redmine/trunk@22747 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/plugin.rb | 12 ++++++++++++ test/unit/lib/redmine/plugin_test.rb | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/lib/redmine/plugin.rb b/lib/redmine/plugin.rb index c750c492d..17a20f5a8 100644 --- a/lib/redmine/plugin.rb +++ b/lib/redmine/plugin.rb @@ -428,6 +428,18 @@ module Redmine Redmine::WikiFormatting.register(name, *args) end + # Register plugin models that use acts_as_attachable. + # + # Example: + # attachment_object_type SomeAttachableModel + # + # This is necessary for the core attachments controller routes and attachments/_form to work. + def attachment_object_type(*args) + args.each do |klass| + Redmine::Acts::Attachable::ObjectTypeConstraint.register_object_type(klass.name.underscore.pluralize) + end + end + # Returns +true+ if the plugin can be configured. def configurable? settings && settings.is_a?(Hash) && settings[:partial].present? diff --git a/test/unit/lib/redmine/plugin_test.rb b/test/unit/lib/redmine/plugin_test.rb index 1b53f7ebf..66865481b 100644 --- a/test/unit/lib/redmine/plugin_test.rb +++ b/test/unit/lib/redmine/plugin_test.rb @@ -62,6 +62,14 @@ class Redmine::PluginTest < ActiveSupport::TestCase assert_equal File.join(@klass.directory, 'foo_plugin', 'assets'), plugin.assets_directory end + ::FooModel = Class.new(ActiveRecord::Base) + def test_register_attachment_object_type + Redmine::Acts::Attachable::ObjectTypeConstraint.expects(:register_object_type).with("foo_models") + @klass.register :foo_plugin do + attachment_object_type FooModel + end + end + def test_register_should_raise_error_if_plugin_directory_does_not_exist e = assert_raises Redmine::PluginNotFound do @klass.register(:bar_plugin) {} -- 2.39.5