rexer 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b58d350ffc9bafc33b202240ed26a3ecf6228a29677ba2cca1938c81bd32576
4
- data.tar.gz: 68d15da77b4838c6bbd97e35bd2b301c2cdf0d738176cc24fe62a07c1e486013
3
+ metadata.gz: 4086f1f1bc3ef9be9579087c03f189f311e98276cadb9295acb2d33ae319e28e
4
+ data.tar.gz: 23b848de6c3e635b312ef127e5d7f6e616ee8d1a64d5e21dc4d90dc5196b48a2
5
5
  SHA512:
6
- metadata.gz: 3ef4db2f19d7fc91b28d265b8afe6a51080553ec4d2bd8f9a02824c05ed166593a1fbe44ed7e28a3a2ec3eb40d98a255963eb953b4e900340902ec4499a619cd
7
- data.tar.gz: 330a05a5692158e30db7a3a4f55d2b830b18265dfb1fb277e5b73f27af113002014234431a8abe2f8a2932c2ca16f65b3c76121e483f9add212bcd0e45e74de4
6
+ metadata.gz: 1b0067a5d35d0ef2646f9e0a46da872be4b58bcce261be2a23cb9f57b314a612879af881628244dffa0dab11b4a2afc947317de2f0265e41807a62fd29cb85e1
7
+ data.tar.gz: 45fde51fb5bdf467cb0a8b00ef20d9498f7a06ebf39b555da6fa0435a0aef9a82ca2baa77ee9b8143e5200ab93ca36f516629b62c07f9c611a2320fae1ea1aef
data/README.md CHANGED
@@ -120,6 +120,18 @@ plugin :redmica_s3, github: { repo: "redmica/redmica_s3" } do
120
120
  end
121
121
  ```
122
122
 
123
+ ## Configuring the command prefix
124
+
125
+ You can configure the command prefix for the commands that Rexer runs such as `bundle install` and `bin/rails redmine:plugins:migrate`.
126
+
127
+ ```ruby
128
+ config command_prefix: "docker compose exec -T app"
129
+
130
+ plugin :some_plugin_with_db_migration, github: { repo: "some_plugin" }
131
+ ```
132
+
133
+ In the above example, the `bin/rails redmine:plugins:migrate` command is executed as `docker compose exec -T app bin/rails redmine:plugins:migrate`.
134
+
123
135
  ## Developing
124
136
 
125
137
  ### Running tests
@@ -17,7 +17,7 @@ module Rexer
17
17
  private
18
18
 
19
19
  def install_initially(definition)
20
- install(definition.themes, definition.plugins)
20
+ install(definition.themes, definition.plugins, definition.config)
21
21
 
22
22
  create_lock_file(definition.env)
23
23
  print_state
@@ -26,8 +26,8 @@ module Rexer
26
26
  def apply_diff(lock_definition, definition)
27
27
  diff = lock_definition.diff(definition)
28
28
 
29
- install(diff.added_themes, diff.added_plugins)
30
- uninstall(diff.deleted_themes, diff.deleted_plugins)
29
+ install(diff.added_themes, diff.added_plugins, definition.config)
30
+ uninstall(diff.deleted_themes, diff.deleted_plugins, definition.config)
31
31
  reload_source(diff.source_changed_themes, diff.source_changed_plugins)
32
32
 
33
33
  create_lock_file(definition.env)
@@ -44,23 +44,23 @@ module Rexer
44
44
  Definition::Lock.load_data if Definition::Lock.file.exist?
45
45
  end
46
46
 
47
- def install(themes, plugins)
47
+ def install(themes, plugins, config)
48
48
  themes.each do
49
49
  Extension::Theme::Installer.new(_1).install
50
50
  end
51
51
 
52
52
  plugins.each do
53
- Extension::Plugin::Installer.new(_1).install
53
+ Extension::Plugin::Installer.new(_1, config).install
54
54
  end
55
55
  end
56
56
 
57
- def uninstall(themes, plugins)
57
+ def uninstall(themes, plugins, config)
58
58
  themes.each do
59
59
  Extension::Theme::Uninstaller.new(_1).uninstall
60
60
  end
61
61
 
62
62
  plugins.each do
63
- Extension::Plugin::Uninstaller.new(_1).uninstall
63
+ Extension::Plugin::Uninstaller.new(_1, config).uninstall
64
64
  end
65
65
  end
66
66
 
@@ -2,11 +2,12 @@ module Rexer
2
2
  module Definition
3
3
  class Data
4
4
  attr_accessor :env
5
- attr_reader :version
5
+ attr_reader :config, :version
6
6
 
7
- def initialize(plugins, themes, env: nil, version: nil)
7
+ def initialize(plugins, themes, config, env: nil, version: nil)
8
8
  @plugins = plugins
9
9
  @themes = themes
10
+ @config = config
10
11
  @env = env
11
12
  @version = version
12
13
  end
@@ -5,6 +5,7 @@ module Rexer
5
5
  @plugins = []
6
6
  @themes = []
7
7
  @env = env
8
+ @config = nil
8
9
  end
9
10
 
10
11
  def plugin(name, **opts, &hooks)
@@ -32,8 +33,12 @@ module Rexer
32
33
  @themes += data.themes
33
34
  end
34
35
 
36
+ def config(command_prefix: nil)
37
+ @config = Definition::Config.new(command_prefix)
38
+ end
39
+
35
40
  def to_data
36
- Definition::Data.new(@plugins, @themes)
41
+ Definition::Data.new(@plugins, @themes, @config)
37
42
  end
38
43
 
39
44
  private
@@ -27,7 +27,7 @@ module Rexer
27
27
  end
28
28
 
29
29
  def to_data
30
- Definition::Data.new(@plugins, @themes, **lock_state)
30
+ Definition::Data.new(@plugins, @themes, @config, **lock_state)
31
31
  end
32
32
 
33
33
  private
@@ -10,6 +10,17 @@ module Rexer
10
10
  end
11
11
  end
12
12
 
13
+ Config = ::Data.define(
14
+ # The prefix of the command such as bundle install and bin/rails redmine:plugins:migrate.
15
+ #
16
+ # For example, if the command_prefix is set "docker compose exec -T app",
17
+ # then bundle install will be executed as follows:
18
+ #
19
+ # docker compose exec -T app bundle install
20
+ #
21
+ :command_prefix
22
+ )
23
+
13
24
  Source = ::Data.define(:type, :options)
14
25
 
15
26
  Plugin = ::Data.define(:name, :source, :hooks, :env) do
@@ -8,15 +8,16 @@ module Rexer
8
8
  end
9
9
 
10
10
  class Base
11
- def initialize(definition)
11
+ def initialize(definition, config = nil)
12
12
  @definition = definition
13
13
  @name = definition.name
14
14
  @hooks = definition.hooks || {}
15
+ @config = config
15
16
  end
16
17
 
17
18
  private
18
19
 
19
- attr_reader :name, :hooks, :definition
20
+ attr_reader :name, :hooks, :definition, :config
20
21
 
21
22
  def plugin_dir
22
23
  @plugin_dir ||= Plugin.dir.join(name.to_s)
@@ -36,7 +37,7 @@ module Rexer
36
37
  return unless needs_db_migration?
37
38
 
38
39
  envs = {"NAME" => name.to_s}.merge(extra_envs)
39
- _, error, status = Open3.capture3(envs, "bin/rails redmine:plugins:migrate")
40
+ _, error, status = Open3.capture3(envs, cmd_with_prefix("bin/rails redmine:plugins:migrate"))
40
41
 
41
42
  raise error unless status.success?
42
43
  end
@@ -44,6 +45,10 @@ module Rexer
44
45
  def source
45
46
  @source ||= Source.from_definition(definition.source)
46
47
  end
48
+
49
+ def cmd_with_prefix(command)
50
+ [config&.command_prefix, command].compact.join(" ")
51
+ end
47
52
  end
48
53
 
49
54
  class Installer < Base
@@ -51,6 +56,7 @@ module Rexer
51
56
  return if plugin_exists?
52
57
 
53
58
  load_from_source
59
+ run_bundle_install
54
60
  run_db_migrate
55
61
  hooks[:installed]&.call
56
62
  end
@@ -60,6 +66,13 @@ module Rexer
60
66
  def load_from_source
61
67
  source.load(plugin_dir.to_s)
62
68
  end
69
+
70
+ def run_bundle_install
71
+ return unless plugin_dir.join("Gemfile").exist?
72
+
73
+ _, error, status = Open3.capture3(cmd_with_prefix("bundle install"))
74
+ raise error unless status.success?
75
+ end
63
76
  end
64
77
 
65
78
  class Uninstaller < Base
data/lib/rexer/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rexer
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rexer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katsuya Hidaka
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-15 00:00:00.000000000 Z
11
+ date: 2024-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor