Project

General

Profile

Feature #39111 » 0001-Support-plugin-multiple-asset-path.patch

Takashi Kato, 2024-11-10 22:45

View differences:

config/initializers/30-redmine.rb
34 34
  end
35 35

  
36 36
  Redmine::Plugin.all.each do |plugin|
37
    paths = plugin.asset_paths
38
    Rails.application.config.assets.redmine_extension_paths << paths if paths.present?
37
    plugin.asset_paths.each do |paths|
38
      Rails.application.config.assets.redmine_extension_paths << paths if paths.present?
39
    end
39 40
  end
40 41

  
41 42
  Redmine::Themes.themes.each do |theme|
lib/redmine/plugin.rb
192 192
    def asset_paths
193 193
      return unless path.has_assets_dir?
194 194

  
195
      base_dir = Pathname.new(path.assets_dir)
196
      paths = base_dir.children.select(&:directory?)
197
      Redmine::AssetPath.new(base_dir, paths, asset_prefix)
195
      path.assets_dir.map do |dir|
196
        base_dir = Pathname.new(dir)
197
        paths = base_dir.children.select(&:directory?)
198
        Redmine::AssetPath.new(base_dir, paths, asset_prefix)
199
      end
198 200
    end
199 201

  
200 202
    def <=>(plugin)
lib/redmine/plugin_loader.rb
21 21
  class PluginPath
22 22
    attr_reader :assets_dir, :initializer
23 23

  
24
    ASSET_PATHS = ['assets', 'app/assets']
25

  
24 26
    def initialize(dir)
25 27
      @dir = dir
26
      @assets_dir = File.join dir, 'assets'
28
      @assets_dir = ASSET_PATHS.map{|asset_path| File.join dir, asset_path}.select{|dir| File.directory? dir}
27 29
      @initializer = File.join dir, 'init.rb'
28 30
    end
29 31

  
......
36 38
    end
37 39

  
38 40
    def has_assets_dir?
39
      File.directory?(@assets_dir)
41
      assets_dir.any?{|dir| File.directory?(dir)}
40 42
    end
41 43

  
42 44
    def has_initializer?
test/unit/lib/redmine/plugin_test.rb
59 59
    assert_equal 'http://example.net/jsmith', plugin.author_url
60 60
    assert_equal 'This is a test plugin', plugin.description
61 61
    assert_equal '0.0.1', plugin.version
62
    assert_equal File.join(@klass.directory, 'foo_plugin', 'assets'), plugin.assets_directory
62
    assert plugin.assets_directory.find{|dir| dir == File.join(@klass.directory, 'foo_plugin', 'assets')}
63
    assert plugin.assets_directory.find{|dir| dir == File.join(@klass.directory, 'foo_plugin', 'app', 'assets')}
63 64
  end
64 65

  
65 66
  ::FooModel = Class.new(ApplicationRecord)
(10-10/10)