redmine_plugins_helper 0.12.2 → 0.13.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0b11be7658944fad863cbae11f781f91add85990656cf9a6b02a269cd2edf75e
4
- data.tar.gz: 4ff94b0da6a7ca8cdb7f25b37da49c5229b853bd0a221ac7315a276404bfac2e
3
+ metadata.gz: aaaaeded613ef8e1008c1132a077516083ccb224dd6c3e14762ec6b9ce57cd4f
4
+ data.tar.gz: d554fd7dd558929f38e0c8c57b5bdfdcbc2e12dc903610b2477e30fe6e6b9e62
5
5
  SHA512:
6
- metadata.gz: 53951f0c50e341532893f0162bdb4ae885501be99cc7b9684ace05d9e1e4c0a084fd0ef53cca676528b8ba35d94d905db8f6c42b4f67f202c272be1980573073
7
- data.tar.gz: 9e5acf5b10a84f02dab26de5e417c57b1773ed63fc3eaeb8b82ab946884f9ce43c492102a3cebd3e20148ddea2cd157281f1d78ae20122506859a059b3932594
6
+ metadata.gz: dbed1ae45933b914612c964b232e8bd3ad15a5514b60fca9e2030ba9531e11fa9fa0dbe53acadaa7f8a3c005d1c723bf401f5167227da0af4e979c89379418ec
7
+ data.tar.gz: 41b1c4b5899809adb2c2270ec6ff2f1c147197b9d3e278d9745997cfc837aed2b116765b2395229ffa615ed66f23751aae8d8e956cd417d660099042be286943
data/init.rb CHANGED
@@ -14,6 +14,6 @@ end
14
14
  Rails.configuration.to_prepare do
15
15
  require_dependency 'redmine_plugins_helper/patches/redmine/plugin_patch'
16
16
  require_dependency 'redmine_plugins_helper/patches/redmine/plugin_migration_context'
17
- ::Redmine::Plugin.registered_plugins.values.each(&:add_assets_paths)
18
- ::Redmine::Plugin.registered_plugins.values.each(&:load_initializers)
17
+ ::Redmine::Plugin.all.each(&:add_assets_paths)
18
+ ::Redmine::Plugin.all.each(&:load_initializers)
19
19
  end
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_ruby_utils/core_ext'
4
+
3
5
  module RedminePluginsHelper
4
6
  class Migrate
5
- attr_reader :plugin_name, :migration_version
6
-
7
- def initialize(plugin_name, migration_version)
8
- @plugin_name = plugin_name
9
- @migration_version = migration_version
7
+ common_constructor :plugin_name, :migration_version do
10
8
  run
11
9
  end
12
10
 
@@ -21,41 +19,21 @@ module RedminePluginsHelper
21
19
  end
22
20
 
23
21
  def run_all
24
- versions_sorted.each do |v|
25
- migrate_plugin_version(v)
26
- end
22
+ versions_sorted.each(&:apply)
27
23
  end
28
24
 
29
25
  def run_version
30
26
  ::Redmine::Plugin.migrate(plugin_name, migration_version)
31
27
  end
32
28
 
33
- def migrate_plugin_version(version)
34
- return if migrated?(version)
35
-
36
- ::Redmine::Plugin.registered_plugins[version[:plugin]].migrate(version[:timestamp])
37
- end
38
-
29
+ # @return [Enumerable<RedminePluginsHelper::Migration>]
39
30
  def versions_sorted
40
- versions.sort_by { |e| [e[:timestamp]] }
31
+ versions.sort
41
32
  end
42
33
 
34
+ # @return [Enumerable<RedminePluginsHelper::Migration>]
43
35
  def versions
44
- r = []
45
- ::RedminePluginsHelper::Migrations.local_versions.each do |plugin, ts|
46
- ts.each { |t| r << { plugin: plugin, timestamp: t } }
47
- end
48
- r
49
- end
50
-
51
- def migrated?(version)
52
- return false unless db_versions.key?(version[:plugin])
53
-
54
- db_versions[version[:plugin]].include?(version[:timestamp])
55
- end
56
-
57
- def db_versions
58
- @db_versions ||= ::RedminePluginsHelper::Migrations.db_versions
36
+ ::RedminePluginsHelper::Migration.from_code.select(&:plugin?)
59
37
  end
60
38
  end
61
39
  end
@@ -10,6 +10,19 @@ module RedminePluginsHelper
10
10
  self.plugin_id = plugin_id.to_sym
11
11
  self.version = version.to_i
12
12
  end
13
+ compare_by :version, :plugin_id
14
+
15
+ # @return [void]
16
+ def apply
17
+ return if applied?
18
+
19
+ nyi unless plugin?
20
+
21
+ ::Redmine::Plugin::Migrator.current_plugin = plugin
22
+ ::Redmine::Plugin::MigrationContext.new(plugin.migration_directory).up do |m|
23
+ m.version == version
24
+ end
25
+ end
13
26
 
14
27
  # @return [Boolean]
15
28
  def applied?
@@ -27,6 +40,11 @@ module RedminePluginsHelper
27
40
  plugin_id == PLUGIN_ID_CORE_VALUE
28
41
  end
29
42
 
43
+ # @return [Redmine::Plugin]
44
+ def plugin
45
+ plugin? ? ::Redmine::Plugin.find(plugin_id) : nil
46
+ end
47
+
30
48
  # @return [Boolean]
31
49
  def plugin?
32
50
  !core?
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module RedminePluginsHelper
6
+ module Patches
7
+ module Redmine
8
+ module PluginPatch
9
+ module Assets
10
+ common_concern
11
+
12
+ ASSETS_SUBDIRS = %w[stylesheets javascripts images].freeze
13
+
14
+ ASSETS_SUBDIRS.each do |assert_subdir|
15
+ class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
16
+ def #{assert_subdir}_directory
17
+ ::File.join(directory, 'app', 'assets', '#{assert_subdir}')
18
+ end
19
+ RUBY_EVAL
20
+ end
21
+
22
+ def add_assets_paths
23
+ ASSETS_SUBDIRS.each do |assert_subdir|
24
+ assets_directory = send("#{assert_subdir}_directory")
25
+ next unless ::File.directory?(assets_directory)
26
+
27
+ Rails.application.config.assets.paths << assets_directory
28
+ end
29
+ end
30
+
31
+ def main_javascript_asset_path
32
+ find_asset(javascripts_directory, %w[js coffee js.coffee])
33
+ end
34
+
35
+ def main_stylesheet_asset_path
36
+ find_asset(stylesheets_directory, %w[css scss])
37
+ end
38
+
39
+ private
40
+
41
+ def find_asset(assets_directory, extensions)
42
+ extensions.each do |extension|
43
+ ['', '.erb'].each do |erb_extension|
44
+ path = ::File.join(assets_directory, "#{id}.#{extension}#{erb_extension}")
45
+ return id if ::File.exist?(path)
46
+ end
47
+ end
48
+ nil
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module RedminePluginsHelper
6
+ module Patches
7
+ module Redmine
8
+ module PluginPatch
9
+ module Dependencies
10
+ common_concern
11
+
12
+ DEPENDENCIES_FILE_BASENAMES = %w[yml yaml].map { |e| "dependencies.#{e}" }
13
+
14
+ # @param other [Redmine::Plugin]
15
+ # @return [Integer]
16
+ def <=>(other)
17
+ so = dependency?(other)
18
+ os = other.dependency?(self)
19
+
20
+ return 1 if so && !os
21
+ return -1 if !so && os
22
+
23
+ super
24
+ end
25
+
26
+ # @return [Array<Symbol>]
27
+ def dependencies_ids
28
+ load_dependencies_from_file
29
+ dependencies_hash.keys
30
+ end
31
+
32
+ # @param other [Redmine::Plugin]
33
+ # @return [Boolean]
34
+ def dependency?(other)
35
+ load_dependencies_from_file
36
+ recursive_dependencies_ids.include?(other.id)
37
+ end
38
+
39
+ # @param plugin_name [Symbol]
40
+ # @param arg [Hash, String]
41
+ # @return [Boolean]
42
+ def requires_redmine_plugin(plugin_name, arg)
43
+ r = super
44
+ dependencies_hash[plugin_name.to_sym] = arg
45
+ r
46
+ end
47
+
48
+ private
49
+
50
+ # @return [Hash<Symbol, Object>]
51
+ def dependencies_hash
52
+ @dependencies_hash ||= {}
53
+ end
54
+
55
+ # @return [Hash<Symbol, Object>]
56
+ def dependencies_from_file
57
+ r = dependencies_file.if_present({}) { |path| ::EacRubyUtils::Yaml.load_file(path) }
58
+ r = r.map do |plugin_name, arg|
59
+ [plugin_name.to_sym, (arg.is_a?(::Hash) ? arg.symbolize_keys : arg)]
60
+ end
61
+ r.to_h
62
+ end
63
+
64
+ # @return [Pathname, nil]
65
+ def dependencies_file
66
+ DEPENDENCIES_FILE_BASENAMES
67
+ .lazy
68
+ .map { |b| directory.to_pathname.join(b) }.select(&:file?).first
69
+ end
70
+
71
+ # @return [void]
72
+ def load_dependencies_from_file
73
+ return if @dependencies_from_file_loaded
74
+
75
+ dependencies_from_file
76
+ .each { |plugin_name, arg| requires_redmine_plugin(plugin_name, arg) }
77
+ @dependencies_from_file_loaded = true
78
+ end
79
+
80
+ # @return [Set<Symbol>]
81
+ def recursive_dependencies_ids
82
+ ::EacRubyUtils::RecursiveBuilder
83
+ .new(id) { |plugin_id| ::Redmine::Plugin.find(plugin_id).dependencies_ids }.result
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module RedminePluginsHelper
6
+ module Patches
7
+ module Redmine
8
+ module PluginPatch
9
+ module Initializers
10
+ def load_initializers
11
+ Dir["#{initializers_directory}/*.rb"].sort.each { |f| require f }
12
+ end
13
+
14
+ private
15
+
16
+ def initializers_directory
17
+ File.join(directory, 'config', 'initializers')
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -11,10 +11,11 @@ module RedminePluginsHelper
11
11
  included do
12
12
  extend ClassMethods
13
13
  include InstanceMethods
14
+ include ::RedminePluginsHelper::Patches::Redmine::PluginPatch::Assets
15
+ prepend ::RedminePluginsHelper::Patches::Redmine::PluginPatch::Dependencies
16
+ include ::RedminePluginsHelper::Patches::Redmine::PluginPatch::Initializers
14
17
  end
15
18
 
16
- ASSETS_SUBDIRS = %w[stylesheets javascripts images].freeze
17
-
18
19
  module ClassMethods
19
20
  def by_path(path)
20
21
  plugin_id_from_path(path).if_present do |v|
@@ -39,53 +40,6 @@ module RedminePluginsHelper
39
40
  plugin.instance_eval(&block)
40
41
  end
41
42
  end
42
-
43
- module InstanceMethods
44
- def load_initializers
45
- Dir["#{initializers_directory}/*.rb"].sort.each { |f| require f }
46
- end
47
-
48
- ASSETS_SUBDIRS.each do |assert_subdir|
49
- class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
50
- def #{assert_subdir}_directory
51
- ::File.join(directory, 'app', 'assets', '#{assert_subdir}')
52
- end
53
- RUBY_EVAL
54
- end
55
-
56
- def add_assets_paths
57
- ASSETS_SUBDIRS.each do |assert_subdir|
58
- assets_directory = send("#{assert_subdir}_directory")
59
- next unless ::File.directory?(assets_directory)
60
-
61
- Rails.application.config.assets.paths << assets_directory
62
- end
63
- end
64
-
65
- def main_javascript_asset_path
66
- find_asset(javascripts_directory, %w[js coffee js.coffee])
67
- end
68
-
69
- def main_stylesheet_asset_path
70
- find_asset(stylesheets_directory, %w[css scss])
71
- end
72
-
73
- private
74
-
75
- def initializers_directory
76
- File.join(directory, 'config', 'initializers')
77
- end
78
-
79
- def find_asset(assets_directory, extensions)
80
- extensions.each do |extension|
81
- ['', '.erb'].each do |erb_extension|
82
- path = ::File.join(assets_directory, "#{id}.#{extension}#{erb_extension}")
83
- return id if ::File.exist?(path)
84
- end
85
- end
86
- nil
87
- end
88
- end
89
43
  end
90
44
  end
91
45
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module RedminePluginsHelper
6
+ module TestTasks
7
+ class Base
8
+ acts_as_abstract :register
9
+ DEFAULT_TASK_NAME_LAST_PART = 'test'
10
+ PREPARE_TASK_NAME = 'db:test:prepare'
11
+
12
+ class << self
13
+ def register(plugin_id, task_name_last_part = DEFAULT_TASK_NAME_LAST_PART)
14
+ new(plugin_id, task_name_last_part).register
15
+ end
16
+ end
17
+
18
+ common_constructor :plugin_id, :task_name_last_part
19
+
20
+ # @return [Pathname]
21
+ def plugin_root
22
+ ::Rails.root.join('plugins', plugin_id.to_s)
23
+ end
24
+
25
+ # @return [String]
26
+ def prepare_task_name
27
+ PREPARE_TASK_NAME
28
+ end
29
+
30
+ # @return [String]
31
+ def task_full_name
32
+ "#{plugin_id}:#{task_name_last_part}"
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'redmine_plugins_helper/test_tasks/base'
5
+ require 'rake/testtask'
6
+
7
+ module RedminePluginsHelper
8
+ module TestTasks
9
+ class Minitest < ::RedminePluginsHelper::TestTasks::Base
10
+ def register
11
+ ::Rake::TestTask.new(task_full_name => 'db:test:prepare') do |t|
12
+ t.description = "Run plugin #{plugin_id}\'s tests."
13
+ t.libs << 'test'
14
+ t.test_files = ::FileList["#{plugin_root}/test/**/*_test.rb"]
15
+ t.verbose = false
16
+ t.warning = false
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'redmine_plugins_helper/test_tasks/base'
5
+ require 'rspec/core/rake_task'
6
+
7
+ module RedminePluginsHelper
8
+ module TestTasks
9
+ class Rspec < ::RedminePluginsHelper::TestTasks::Base
10
+ def register
11
+ ::RSpec::Core::RakeTask.new(task_full_name) do |t|
12
+ t.rspec_opts = ::Shellwords.join(rspec_opts)
13
+ end
14
+ ::Rake::Task[task_full_name].enhance [prepare_task_name]
15
+ end
16
+
17
+ def rspec_opts
18
+ ['--pattern', plugin_root.join('spec/**/*_spec.rb'),
19
+ '--default-path', 'plugins/redmine_plugins_helper/spec',
20
+ '--require', 'spec_helper']
21
+ end
22
+ end
23
+ end
24
+ end
@@ -3,5 +3,5 @@
3
3
  module RedminePluginsHelper
4
4
  AUTHOR = 'Eduardo Henrique Bogoni'
5
5
  SUMMARY = 'Helper for Redmine plugins'
6
- VERSION = '0.12.2'
6
+ VERSION = '0.13.1'
7
7
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'redmine_plugins_helper/plugin_rake_task'
4
- ::RedminePluginsHelper::PluginRakeTask.register(:redmine_plugins_helper, :test)
3
+ require 'redmine_plugins_helper/test_tasks/rspec'
4
+ ::RedminePluginsHelper::TestTasks::Rspec.register(:redmine_plugins_helper, :test)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redmine_plugins_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.2
4
+ version: 0.13.1
5
5
  platform: ruby
6
6
  authors:
7
- - 0.12.2
7
+ - 0.13.1
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-21 00:00:00.000000000 Z
11
+ date: 2023-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -30,20 +30,20 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.95'
33
+ version: '0.119'
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: 0.95.1
36
+ version: 0.119.2
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: '0.95'
43
+ version: '0.119'
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.95.1
46
+ version: 0.119.2
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: launchy
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -124,12 +124,17 @@ files:
124
124
  - lib/redmine_plugins_helper/migrations.rb
125
125
  - lib/redmine_plugins_helper/patches/redmine/plugin_migration_context.rb
126
126
  - lib/redmine_plugins_helper/patches/redmine/plugin_patch.rb
127
+ - lib/redmine_plugins_helper/patches/redmine/plugin_patch/assets.rb
128
+ - lib/redmine_plugins_helper/patches/redmine/plugin_patch/dependencies.rb
129
+ - lib/redmine_plugins_helper/patches/redmine/plugin_patch/initializers.rb
127
130
  - lib/redmine_plugins_helper/patches/test_case_patch.rb
128
- - lib/redmine_plugins_helper/plugin_rake_task.rb
129
131
  - lib/redmine_plugins_helper/settings.rb
130
132
  - lib/redmine_plugins_helper/status_migrations.rb
131
133
  - lib/redmine_plugins_helper/test_config.rb
132
134
  - lib/redmine_plugins_helper/test_helper.rb
135
+ - lib/redmine_plugins_helper/test_tasks/base.rb
136
+ - lib/redmine_plugins_helper/test_tasks/minitest.rb
137
+ - lib/redmine_plugins_helper/test_tasks/rspec.rb
133
138
  - lib/redmine_plugins_helper/version.rb
134
139
  - lib/tasks/redmine.rake
135
140
  - lib/tasks/redmine_plugins_helper.rake
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'rspec/core/rake_task'
5
- require 'shellwords'
6
-
7
- module RedminePluginsHelper
8
- class PluginRakeTask
9
- DEFAULT_TASK_NAME_LAST_PART = 'rspec'
10
-
11
- class << self
12
- def register(plugin_id, task_name_last_part = DEFAULT_TASK_NAME_LAST_PART)
13
- new(plugin_id, task_name_last_part).register
14
- end
15
- end
16
-
17
- common_constructor :plugin_id, :task_name_last_part
18
-
19
- def register
20
- ::RSpec::Core::RakeTask.new(task_full_name) do |t|
21
- t.rspec_opts = ::Shellwords.join(rspec_opts)
22
- end
23
- Rake::Task[task_full_name].enhance ['db:test:prepare']
24
- end
25
-
26
- def task_full_name
27
- "#{plugin_id}:#{task_name_last_part}"
28
- end
29
-
30
- def rspec_opts
31
- ['--pattern', "plugins/#{plugin_id}/spec/**/*_spec.rb",
32
- '--default-path', 'plugins/redmine_plugins_helper/spec',
33
- '--require', 'spec_helper']
34
- end
35
- end
36
- end