rexer 0.14.1 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rexer/commands/envs.rb +20 -7
- data/lib/rexer/commands/state.rb +10 -12
- data/lib/rexer/commands/switch.rb +3 -3
- data/lib/rexer/extension/entity.rb +55 -0
- data/lib/rexer/extension/plugin/action.rb +4 -23
- data/lib/rexer/extension/plugin/install.rb +9 -5
- data/lib/rexer/extension/plugin/reload_source.rb +4 -6
- data/lib/rexer/extension/plugin/uninstall.rb +8 -4
- data/lib/rexer/extension/plugin/update.rb +4 -4
- data/lib/rexer/extension/theme/action.rb +2 -26
- data/lib/rexer/extension/theme/install.rb +8 -4
- data/lib/rexer/extension/theme/reload_source.rb +4 -6
- data/lib/rexer/extension/theme/uninstall.rb +8 -4
- data/lib/rexer/extension/theme/update.rb +3 -3
- data/lib/rexer/source/base.rb +1 -1
- data/lib/rexer/source/git.rb +18 -11
- data/lib/rexer/source/github.rb +2 -2
- data/lib/rexer/version.rb +1 -1
- data/lib/rexer.rb +8 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a65472e424f27d1a96fa1be7093fcb9eac2f59606dd9b93c907dfec412b8309d
|
4
|
+
data.tar.gz: b56d1515e26fd98f800c772f64511bd241c83e1e0b706f4bbdd6b2cbf734a375
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdeb0d3f7855f8fef1710f0d7918ce2b24c39004ac2cc0fa3ddd3c1e201eb5bf3afef7c08531caa539842189eb95fa99fd11166bdbcfc8fbef4ea5345541d2c8
|
7
|
+
data.tar.gz: 160d63e6239cd0d417443d2935c35a826340040cc917c28f29d3827e5e9db53bcacdc28a45c9a665f12e4087a88b436407258fe995dfd1ab08a30a25cd057783
|
data/lib/rexer/commands/envs.rb
CHANGED
@@ -10,8 +10,12 @@ module Rexer
|
|
10
10
|
defined_envs.each.with_index do |env, i|
|
11
11
|
puts env
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
themes_in(env) do
|
14
|
+
print_extension_definition(_1)
|
15
|
+
end
|
16
|
+
|
17
|
+
plugins_in(env) do
|
18
|
+
print_extension_definition(_1)
|
15
19
|
end
|
16
20
|
|
17
21
|
puts if i < defined_envs.size - 1
|
@@ -22,11 +26,20 @@ module Rexer
|
|
22
26
|
|
23
27
|
attr_reader :definition
|
24
28
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
def print_extension_definition(extension_def)
|
30
|
+
puts " #{extension_def.name} (#{Source.from_definition(extension_def.source).info})"
|
31
|
+
end
|
32
|
+
|
33
|
+
def themes_in(env)
|
34
|
+
definition.themes.each do
|
35
|
+
yield _1 if _1.env == env
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def plugins_in(env)
|
40
|
+
definition.plugins.each do
|
41
|
+
yield _1 if _1.env == env
|
42
|
+
end
|
30
43
|
end
|
31
44
|
end
|
32
45
|
end
|
data/lib/rexer/commands/state.rb
CHANGED
@@ -20,29 +20,27 @@ module Rexer
|
|
20
20
|
attr_reader :lock_definition
|
21
21
|
|
22
22
|
def print_plugins
|
23
|
-
|
24
|
-
return if
|
23
|
+
plugin_defs = lock_definition.plugins
|
24
|
+
return if plugin_defs.empty?
|
25
25
|
|
26
26
|
puts "\nPlugins:"
|
27
|
-
|
28
|
-
|
27
|
+
plugin_defs.each do
|
28
|
+
plugin = Extension::Entity::Plugin.new(_1)
|
29
|
+
puts " * #{plugin.name} (#{plugin.source_info})"
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
33
|
def print_themes
|
33
|
-
|
34
|
-
return if
|
34
|
+
theme_defs = lock_definition.themes
|
35
|
+
return if theme_defs.empty?
|
35
36
|
|
36
37
|
puts "\nThemes:"
|
37
|
-
|
38
|
-
|
38
|
+
theme_defs.each do
|
39
|
+
theme = Extension::Entity::Theme.new(_1)
|
40
|
+
puts " * #{theme.name} (#{theme.source_info})"
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
|
-
def source_info(definition_source)
|
43
|
-
Source.from_definition(definition_source).info
|
44
|
-
end
|
45
|
-
|
46
44
|
def no_lock_file_found
|
47
45
|
lock_definition.nil?.tap { |result|
|
48
46
|
puts "No lock file found" if result
|
@@ -7,7 +7,7 @@ module Rexer
|
|
7
7
|
|
8
8
|
def call(env)
|
9
9
|
return if no_lock_file_found
|
10
|
-
return if
|
10
|
+
return if already_in(env)
|
11
11
|
|
12
12
|
Uninstall.new.call
|
13
13
|
Install.new.call(env)
|
@@ -23,9 +23,9 @@ module Rexer
|
|
23
23
|
}
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def already_in(env)
|
27
27
|
(lock_definition.env == env).tap do |result|
|
28
|
-
puts "Already
|
28
|
+
puts "Already in #{env} environment" if result
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "active_support/core_ext/class/attribute"
|
2
|
+
|
3
|
+
module Rexer
|
4
|
+
module Extension
|
5
|
+
module Entity
|
6
|
+
class Base
|
7
|
+
class_attribute :root_dir
|
8
|
+
|
9
|
+
def initialize(definition)
|
10
|
+
@definition = definition
|
11
|
+
@hooks = definition.hooks || {}
|
12
|
+
@name = definition.name
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :hooks, :name
|
16
|
+
|
17
|
+
def exist?
|
18
|
+
path.exist? && !path.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
def path
|
22
|
+
@path ||= root_dir.join(name.to_s)
|
23
|
+
end
|
24
|
+
|
25
|
+
def source_info
|
26
|
+
@source_info ||= source.info(path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def source
|
30
|
+
@source ||= Source.from_definition(definition.source)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
attr_reader :definition
|
36
|
+
end
|
37
|
+
|
38
|
+
class Plugin < Base
|
39
|
+
self.root_dir = Pathname.new("plugins")
|
40
|
+
|
41
|
+
def contains_db_migrations?
|
42
|
+
path.join("db", "migrate").then { _1.exist? && !_1.empty? }
|
43
|
+
end
|
44
|
+
|
45
|
+
def contains_gemfile?
|
46
|
+
path.join("Gemfile").exist?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class Theme < Base
|
51
|
+
self.root_dir = Pathname.new("themes")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -9,36 +9,21 @@ module Rexer
|
|
9
9
|
|
10
10
|
def initialize(definition)
|
11
11
|
@definition = definition
|
12
|
-
@
|
13
|
-
@hooks = definition.hooks || {}
|
12
|
+
@plugin = Entity::Plugin.new(definition)
|
14
13
|
end
|
15
14
|
|
16
15
|
private
|
17
16
|
|
18
|
-
attr_reader :
|
19
|
-
|
20
|
-
def plugin_root_dir
|
21
|
-
Pathname.new("plugins")
|
22
|
-
end
|
23
|
-
|
24
|
-
def plugin_dir
|
25
|
-
@plugin_dir ||= plugin_root_dir.join(name.to_s)
|
26
|
-
end
|
27
|
-
|
28
|
-
def plugin_exists?
|
29
|
-
plugin_dir.exist? && !plugin_dir.empty?
|
30
|
-
end
|
17
|
+
attr_reader :plugin
|
31
18
|
|
32
19
|
def needs_db_migration?
|
33
|
-
|
34
|
-
_1.exist? && !_1.empty?
|
35
|
-
}
|
20
|
+
plugin.contains_db_migrations?
|
36
21
|
end
|
37
22
|
|
38
23
|
def run_db_migrate(extra_envs = {})
|
39
24
|
return unless needs_db_migration?
|
40
25
|
|
41
|
-
envs = {"NAME" => name.to_s}.merge(extra_envs)
|
26
|
+
envs = {"NAME" => plugin.name.to_s}.merge(extra_envs)
|
42
27
|
cmds = build_cmd("bundle", "exec", "rake", Rexer.verbosity.debug? ? nil : "-q", "redmine:plugins:migrate", envs:)
|
43
28
|
|
44
29
|
broadcast(:processing, "Execute #{cmds}")
|
@@ -51,10 +36,6 @@ module Rexer
|
|
51
36
|
end
|
52
37
|
end
|
53
38
|
|
54
|
-
def source
|
55
|
-
@source ||= Source.from_definition(definition.source)
|
56
|
-
end
|
57
|
-
|
58
39
|
def build_cmd(*command, envs: {})
|
59
40
|
envs_str = envs.map { [_1, _2].join("=") }
|
60
41
|
[Rexer.config.command_prefix, *command, *envs_str].compact.join(" ")
|
@@ -3,9 +3,9 @@ module Rexer
|
|
3
3
|
module Plugin
|
4
4
|
class Install < Action
|
5
5
|
def call
|
6
|
-
broadcast(:started, "Install #{name}")
|
6
|
+
broadcast(:started, "Install #{plugin.name}")
|
7
7
|
|
8
|
-
if
|
8
|
+
if plugin.exist?
|
9
9
|
broadcast(:skipped, "Already exists")
|
10
10
|
return
|
11
11
|
end
|
@@ -13,7 +13,7 @@ module Rexer
|
|
13
13
|
load_from_source
|
14
14
|
run_bundle_install
|
15
15
|
run_db_migrate
|
16
|
-
|
16
|
+
call_installed_hook
|
17
17
|
|
18
18
|
broadcast(:completed)
|
19
19
|
end
|
@@ -21,11 +21,11 @@ module Rexer
|
|
21
21
|
private
|
22
22
|
|
23
23
|
def load_from_source
|
24
|
-
source.load(
|
24
|
+
plugin.source.load(plugin.path.to_s)
|
25
25
|
end
|
26
26
|
|
27
27
|
def run_bundle_install
|
28
|
-
return unless
|
28
|
+
return unless plugin.contains_gemfile?
|
29
29
|
|
30
30
|
cmds = build_cmd("bundle", "install", Rexer.verbosity.debug? ? nil : "--quiet")
|
31
31
|
|
@@ -33,6 +33,10 @@ module Rexer
|
|
33
33
|
|
34
34
|
system(cmds, exception: true)
|
35
35
|
end
|
36
|
+
|
37
|
+
def call_installed_hook
|
38
|
+
plugin.hooks[:installed]&.call
|
39
|
+
end
|
36
40
|
end
|
37
41
|
end
|
38
42
|
end
|
@@ -3,9 +3,9 @@ module Rexer
|
|
3
3
|
module Plugin
|
4
4
|
class ReloadSource < Action
|
5
5
|
def call
|
6
|
-
return unless
|
6
|
+
return unless plugin.exist?
|
7
7
|
|
8
|
-
broadcast(:started, "Reload #{name} source")
|
8
|
+
broadcast(:started, "Reload #{plugin.name} source")
|
9
9
|
|
10
10
|
reload_source
|
11
11
|
run_db_migrate
|
@@ -16,10 +16,8 @@ module Rexer
|
|
16
16
|
private
|
17
17
|
|
18
18
|
def reload_source
|
19
|
-
|
20
|
-
|
21
|
-
source.load(dir)
|
22
|
-
}
|
19
|
+
plugin.path.rmtree
|
20
|
+
plugin.source.load(plugin.path.to_s)
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
@@ -3,16 +3,16 @@ module Rexer
|
|
3
3
|
module Plugin
|
4
4
|
class Uninstall < Action
|
5
5
|
def call
|
6
|
-
broadcast(:started, "Uninstall #{name}")
|
6
|
+
broadcast(:started, "Uninstall #{plugin.name}")
|
7
7
|
|
8
|
-
unless
|
8
|
+
unless plugin.exist?
|
9
9
|
broadcast(:skipped, "Not exists")
|
10
10
|
return
|
11
11
|
end
|
12
12
|
|
13
13
|
reset_db_migration
|
14
14
|
remove_plugin
|
15
|
-
|
15
|
+
call_uninstalled_hook
|
16
16
|
|
17
17
|
broadcast(:completed)
|
18
18
|
end
|
@@ -24,7 +24,11 @@ module Rexer
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def remove_plugin
|
27
|
-
|
27
|
+
plugin.path.rmtree
|
28
|
+
end
|
29
|
+
|
30
|
+
def call_uninstalled_hook
|
31
|
+
plugin.hooks[:uninstalled]&.call
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
@@ -3,11 +3,11 @@ module Rexer
|
|
3
3
|
module Plugin
|
4
4
|
class Update < Action
|
5
5
|
def call
|
6
|
-
return unless
|
6
|
+
return unless plugin.exist?
|
7
7
|
|
8
|
-
broadcast(:started, "Update #{name}")
|
8
|
+
broadcast(:started, "Update #{plugin.name}")
|
9
9
|
|
10
|
-
unless source.updatable?
|
10
|
+
unless plugin.source.updatable?
|
11
11
|
broadcast(:skipped, "Not updatable")
|
12
12
|
return
|
13
13
|
end
|
@@ -21,7 +21,7 @@ module Rexer
|
|
21
21
|
private
|
22
22
|
|
23
23
|
def update_source
|
24
|
-
source.update(
|
24
|
+
plugin.source.update(plugin.path)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -8,36 +8,12 @@ module Rexer
|
|
8
8
|
|
9
9
|
def initialize(definition)
|
10
10
|
@definition = definition
|
11
|
-
@
|
12
|
-
@hooks = definition.hooks || {}
|
11
|
+
@theme = Entity::Theme.new(definition)
|
13
12
|
end
|
14
13
|
|
15
14
|
private
|
16
15
|
|
17
|
-
attr_reader :
|
18
|
-
|
19
|
-
def theme_root_dir
|
20
|
-
public_themes = Pathname.pwd.join("public", "themes")
|
21
|
-
|
22
|
-
if public_themes.exist?
|
23
|
-
# When Redmine version is v5.1 or older, public/themes is used.
|
24
|
-
public_themes
|
25
|
-
else
|
26
|
-
Pathname.new("themes")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def theme_dir
|
31
|
-
@theme_dir ||= theme_root_dir.join(name.to_s)
|
32
|
-
end
|
33
|
-
|
34
|
-
def theme_exists?
|
35
|
-
theme_dir.exist? && !theme_dir.empty?
|
36
|
-
end
|
37
|
-
|
38
|
-
def source
|
39
|
-
@source ||= Source.from_definition(definition.source)
|
40
|
-
end
|
16
|
+
attr_reader :theme
|
41
17
|
end
|
42
18
|
end
|
43
19
|
end
|
@@ -3,15 +3,15 @@ module Rexer
|
|
3
3
|
module Theme
|
4
4
|
class Install < Action
|
5
5
|
def call
|
6
|
-
broadcast(:started, "Install #{name}")
|
6
|
+
broadcast(:started, "Install #{theme.name}")
|
7
7
|
|
8
|
-
if
|
8
|
+
if theme.exist?
|
9
9
|
broadcast(:skipped, "Already exists")
|
10
10
|
return
|
11
11
|
end
|
12
12
|
|
13
13
|
load_from_source
|
14
|
-
|
14
|
+
call_installed_hook
|
15
15
|
|
16
16
|
broadcast(:completed)
|
17
17
|
end
|
@@ -19,7 +19,11 @@ module Rexer
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def load_from_source
|
22
|
-
source.load(
|
22
|
+
theme.source.load(theme.path.to_s)
|
23
|
+
end
|
24
|
+
|
25
|
+
def call_installed_hook
|
26
|
+
theme.hooks[:installed]&.call
|
23
27
|
end
|
24
28
|
end
|
25
29
|
end
|
@@ -3,9 +3,9 @@ module Rexer
|
|
3
3
|
module Theme
|
4
4
|
class ReloadSource < Action
|
5
5
|
def call
|
6
|
-
return unless
|
6
|
+
return unless theme.exist?
|
7
7
|
|
8
|
-
broadcast(:started, "Reload #{name} source")
|
8
|
+
broadcast(:started, "Reload #{theme.name} source")
|
9
9
|
|
10
10
|
reload_source
|
11
11
|
|
@@ -15,10 +15,8 @@ module Rexer
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def reload_source
|
18
|
-
|
19
|
-
|
20
|
-
source.load(dir)
|
21
|
-
}
|
18
|
+
theme.path.rmtree
|
19
|
+
theme.source.load(theme.path.to_s)
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|
@@ -3,15 +3,15 @@ module Rexer
|
|
3
3
|
module Theme
|
4
4
|
class Uninstall < Action
|
5
5
|
def call
|
6
|
-
broadcast(:started, "Uninstall #{name}")
|
6
|
+
broadcast(:started, "Uninstall #{theme.name}")
|
7
7
|
|
8
|
-
unless
|
8
|
+
unless theme.exist?
|
9
9
|
broadcast(:skipped, "Not exists")
|
10
10
|
return
|
11
11
|
end
|
12
12
|
|
13
13
|
remove_theme
|
14
|
-
|
14
|
+
call_uninstalled_hook
|
15
15
|
|
16
16
|
broadcast(:completed)
|
17
17
|
end
|
@@ -19,7 +19,11 @@ module Rexer
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def remove_theme
|
22
|
-
|
22
|
+
theme.path.rmtree
|
23
|
+
end
|
24
|
+
|
25
|
+
def call_uninstalled_hook
|
26
|
+
theme.hooks[:uninstalled]&.call
|
23
27
|
end
|
24
28
|
end
|
25
29
|
end
|
@@ -3,9 +3,9 @@ module Rexer
|
|
3
3
|
module Theme
|
4
4
|
class Update < Action
|
5
5
|
def call
|
6
|
-
return unless
|
6
|
+
return unless theme.exist?
|
7
7
|
|
8
|
-
broadcast(:started, "Update #{name}")
|
8
|
+
broadcast(:started, "Update #{theme.name}")
|
9
9
|
|
10
10
|
update_source
|
11
11
|
|
@@ -15,7 +15,7 @@ module Rexer
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def update_source
|
18
|
-
source.update(
|
18
|
+
theme.source.update(theme.path.to_s)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/lib/rexer/source/base.rb
CHANGED
data/lib/rexer/source/git.rb
CHANGED
@@ -9,7 +9,6 @@ module Rexer
|
|
9
9
|
@branch = branch
|
10
10
|
@tag = tag
|
11
11
|
@ref = ref
|
12
|
-
@reference = branch || tag || ref
|
13
12
|
end
|
14
13
|
|
15
14
|
def load(path)
|
@@ -25,27 +24,35 @@ module Rexer
|
|
25
24
|
branch || reference.nil?
|
26
25
|
end
|
27
26
|
|
28
|
-
def info
|
29
|
-
URI.parse(url).then
|
30
|
-
|
31
|
-
|
27
|
+
def info(work_dir = nil)
|
28
|
+
uri = URI.parse(url).then { "#{_1.host}#{_1.path}" }
|
29
|
+
ref = reference(short_ref: true) || current_branch(work_dir)
|
30
|
+
|
31
|
+
[uri, ref].compact.join("@")
|
32
32
|
end
|
33
33
|
|
34
34
|
private
|
35
35
|
|
36
|
-
attr_reader :url, :
|
36
|
+
attr_reader :url, :branch, :tag
|
37
37
|
|
38
38
|
def checkout(git)
|
39
39
|
reference&.then { git.checkout(_1) }
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
43
|
-
branch || tag || short_ref
|
42
|
+
def reference(short_ref: false)
|
43
|
+
branch || tag || ref(short: short_ref)
|
44
|
+
end
|
45
|
+
|
46
|
+
def ref(short: false)
|
47
|
+
return nil unless @ref
|
48
|
+
return @ref unless short
|
49
|
+
|
50
|
+
@ref.match?(/^[a-z0-9]+$/) ? @ref.slice(0, 7) : @ref
|
44
51
|
end
|
45
52
|
|
46
|
-
def
|
47
|
-
return unless
|
48
|
-
|
53
|
+
def current_branch(work_dir)
|
54
|
+
return nil unless work_dir
|
55
|
+
::Git.open(work_dir).current_branch
|
49
56
|
end
|
50
57
|
end
|
51
58
|
end
|
data/lib/rexer/source/github.rb
CHANGED
@@ -6,8 +6,8 @@ module Rexer
|
|
6
6
|
super(url: "https://github.com/#{repo}", branch: branch, tag: tag, ref: ref)
|
7
7
|
end
|
8
8
|
|
9
|
-
def info
|
10
|
-
|
9
|
+
def info(work_dir = nil)
|
10
|
+
[@repo, reference(short_ref: true) || current_branch(work_dir)].compact.join("@")
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/lib/rexer/version.rb
CHANGED
data/lib/rexer.rb
CHANGED
@@ -1,12 +1,4 @@
|
|
1
1
|
module Rexer
|
2
|
-
def self.definition_file
|
3
|
-
".extensions.rb"
|
4
|
-
end
|
5
|
-
|
6
|
-
def self.definition_lock_file
|
7
|
-
".extensions.lock"
|
8
|
-
end
|
9
|
-
|
10
2
|
Config = Data.define(
|
11
3
|
# The prefix of the command such as bundle install and bin/rails redmine:plugins:migrate.
|
12
4
|
#
|
@@ -21,6 +13,14 @@ module Rexer
|
|
21
13
|
class << self
|
22
14
|
attr_accessor :verbosity
|
23
15
|
|
16
|
+
def definition_file
|
17
|
+
".extensions.rb"
|
18
|
+
end
|
19
|
+
|
20
|
+
def definition_lock_file
|
21
|
+
".extensions.lock"
|
22
|
+
end
|
23
|
+
|
24
24
|
def config
|
25
25
|
@config ||= Config.new(command_prefix: ENV["REXER_COMMAND_PREFIX"])
|
26
26
|
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.
|
4
|
+
version: 0.15.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-11-
|
11
|
+
date: 2024-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- lib/rexer/definition/diff.rb
|
140
140
|
- lib/rexer/definition/dsl.rb
|
141
141
|
- lib/rexer/definition/lock.rb
|
142
|
+
- lib/rexer/extension/entity.rb
|
142
143
|
- lib/rexer/extension/plugin/action.rb
|
143
144
|
- lib/rexer/extension/plugin/install.rb
|
144
145
|
- lib/rexer/extension/plugin/reload_source.rb
|