rexer 0.1.0 → 0.3.0

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: 564e86a618538937d2e68d85f1b625a8fa3ebddc8e4891fb12a4598eb2f944a5
4
- data.tar.gz: 4e21379d1dae8ee68c301ee0f4be43a1034b585af097a9713ae3b238a8795ffe
3
+ metadata.gz: 2b58d350ffc9bafc33b202240ed26a3ecf6228a29677ba2cca1938c81bd32576
4
+ data.tar.gz: 68d15da77b4838c6bbd97e35bd2b301c2cdf0d738176cc24fe62a07c1e486013
5
5
  SHA512:
6
- metadata.gz: f542f39676156e026985ab85853133e0efe09681cf8671bf8f2370fa9f0c2301a5d0f7422cdc042219b7475f2e15b28ec35807ae12285c132dba8e4729fc9203
7
- data.tar.gz: 4632bde598651690ce5b685d7d80b657ef6567fe074ce392575cf87f8b705a4ce6f3b75495a74b311d2a1b6949fca65b0a660c1b9c653b31a7086b7b4d3decf3
6
+ metadata.gz: 3ef4db2f19d7fc91b28d265b8afe6a51080553ec4d2bd8f9a02824c05ed166593a1fbe44ed7e28a3a2ec3eb40d98a255963eb953b4e900340902ec4499a619cd
7
+ data.tar.gz: 330a05a5692158e30db7a3a4f55d2b830b18265dfb1fb277e5b73f27af113002014234431a8abe2f8a2932c2ca16f65b3c76121e483f9add212bcd0e45e74de4
data/README.md CHANGED
@@ -9,13 +9,13 @@ It is mainly aimed at helping with the development of Redmine and its plugins, a
9
9
 
10
10
  ## Installation
11
11
 
12
- Install the gem and add to the application's Gemfile by executing:
13
-
14
- bundle add rexer
12
+ ```
13
+ gem install rexer
14
+ ```
15
15
 
16
- If bundler is not being used to manage dependencies, install the gem by executing:
16
+ ## Supported Redmine
17
17
 
18
- gem install rexer
18
+ Rexer is tested with Redmine v5.1 and trunk.
19
19
 
20
20
  ## Usage
21
21
 
@@ -55,6 +55,7 @@ This command uninstalls the extensions and deletes the `.extensions.lock` file.
55
55
  $ rex
56
56
  Commands:
57
57
  rex help [COMMAND] # Describe available commands or one specific command
58
+ rex envs # Show the list of defined environments in .extensions.rb
58
59
  rex install [ENV] # Install extensions for the specified environment
59
60
  rex state # Show the current state of the installed extensions
60
61
  rex switch [ENV] # Uninstall extensions for the currently installed environment and install extensions for the specified environment
@@ -116,29 +117,31 @@ plugin :redmica_s3, github: { repo: "redmica/redmica_s3" } do
116
117
  uninstalled do
117
118
  Pathname.new("config", "s3.yml").delete
118
119
  end
119
-
120
- updated do
121
- puts "updated"
122
- end
123
120
  end
124
121
  ```
125
122
 
126
123
  ## Developing
127
124
 
128
- ### Running integration tests
125
+ ### Running tests
129
126
 
130
127
  First, you need to build the docker image for the integration tests.
131
128
 
132
129
  ```
133
- rake rexer:test:build_integration_test_image
130
+ rake test:prepare_integration
134
131
  ```
135
132
 
136
- Then, you can run the integration tests.
133
+ Then, you can run all tests.
137
134
 
138
135
  ```
139
136
  rake test
140
137
  ```
141
138
 
139
+ Or, you can only the integration tests as follows.
140
+
141
+ ```
142
+ rake test:integration
143
+ ```
144
+
142
145
  ### Formatting and Linting code
143
146
 
144
147
  This project uses [Standard](https://github.com/standardrb/standard) for code formatting and linting. You can format and check the code by running the following commands.
data/lib/rexer/cli.rb CHANGED
@@ -31,6 +31,11 @@ module Rexer
31
31
  Commands::State.new.call
32
32
  end
33
33
 
34
+ desc "envs", "Show the list of defined environments in .extensions.rb"
35
+ def envs
36
+ Commands::Envs.new.call
37
+ end
38
+
34
39
  desc "version", "Show Rexer version"
35
40
  def version
36
41
  puts Rexer::VERSION
@@ -0,0 +1,24 @@
1
+ module Rexer
2
+ module Commands
3
+ class Envs
4
+ def initialize
5
+ @definition = Definition.load_data
6
+ end
7
+
8
+ def call
9
+ defined_envs.each do
10
+ puts _1
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ attr_reader :definition
17
+
18
+ def defined_envs
19
+ all_envs = definition.plugins.map(&:env) + definition.themes.map(&:env)
20
+ all_envs.uniq
21
+ end
22
+ end
23
+ end
24
+ end
@@ -28,7 +28,7 @@ module Rexer
28
28
 
29
29
  install(diff.added_themes, diff.added_plugins)
30
30
  uninstall(diff.deleted_themes, diff.deleted_plugins)
31
- update(diff.changed_themes, diff.changed_plugins)
31
+ reload_source(diff.source_changed_themes, diff.source_changed_plugins)
32
32
 
33
33
  create_lock_file(definition.env)
34
34
  print_state
@@ -64,13 +64,13 @@ module Rexer
64
64
  end
65
65
  end
66
66
 
67
- def update(themes, plugins)
67
+ def reload_source(themes, plugins)
68
68
  themes.each do
69
- Extension::Theme::Updater.new(_1).update
69
+ Extension::Theme::SourceReloader.new(_1).reload
70
70
  end
71
71
 
72
72
  plugins.each do
73
- Extension::Plugin::Updater.new(_1).update
73
+ Extension::Plugin::SourceReloader.new(_1).reload
74
74
  end
75
75
  end
76
76
 
@@ -39,10 +39,8 @@ module Rexer
39
39
  end
40
40
  end
41
41
 
42
- def source_info(source_def)
43
- source_def.then {
44
- Source.const_get(_1.type.capitalize).new(**_1.options).info
45
- }
42
+ def source_info(definition_source)
43
+ Source.from_definition(definition_source).info
46
44
  end
47
45
 
48
46
  def no_lock_file_found
@@ -22,21 +22,21 @@ module Rexer
22
22
  old_data.themes - new_data.themes
23
23
  end
24
24
 
25
- def changed_plugins
25
+ def source_changed_plugins
26
26
  old_plugins = old_data.plugins
27
27
 
28
28
  (new_data.plugins & old_plugins).select do |new_plugin|
29
29
  old_plugin = old_plugins.find { _1.name == new_plugin.name }
30
- plugin_changed?(old_plugin, new_plugin)
30
+ plugin_source_changed?(old_plugin, new_plugin)
31
31
  end
32
32
  end
33
33
 
34
- def changed_themes
34
+ def source_changed_themes
35
35
  old_themes = old_data.themes
36
36
 
37
37
  (new_data.themes & old_themes).select do |new_theme|
38
38
  old_theme = old_themes.find { _1.name == new_theme.name }
39
- theme_changed?(old_theme, new_theme)
39
+ theme_source_changed?(old_theme, new_theme)
40
40
  end
41
41
  end
42
42
 
@@ -44,11 +44,11 @@ module Rexer
44
44
 
45
45
  attr_reader :old_data, :new_data
46
46
 
47
- def plugin_changed?(old_plugin, new_plugin)
47
+ def plugin_source_changed?(old_plugin, new_plugin)
48
48
  old_plugin.source != new_plugin.source
49
49
  end
50
50
 
51
- def theme_changed?(old_theme, new_theme)
51
+ def theme_source_changed?(old_theme, new_theme)
52
52
  old_theme.source != new_theme.source
53
53
  end
54
54
  end
@@ -11,7 +11,7 @@ module Rexer
11
11
  @plugins << Definition::Plugin.new(
12
12
  name: name,
13
13
  source: build_source(opts),
14
- hooks: build_hooks(hooks, %i[installed uninstalled updated]),
14
+ hooks: build_hooks(hooks, %i[installed uninstalled]),
15
15
  env: @env
16
16
  )
17
17
  end
@@ -20,7 +20,7 @@ module Rexer
20
20
  @themes << Definition::Theme.new(
21
21
  name: name,
22
22
  source: build_source(opts),
23
- hooks: build_hooks(hooks, %i[installed uninstalled updated]),
23
+ hooks: build_hooks(hooks, %i[installed uninstalled]),
24
24
  env: @env
25
25
  )
26
26
  end
@@ -54,7 +54,7 @@ module Rexer
54
54
  end
55
55
 
56
56
  def build_source(opts)
57
- type = opts.keys.find { Rexer::Source::Base.source_names.include?(_1) }
57
+ type = opts.keys.find { Rexer::Source.names.include?(_1) }
58
58
  Source.new(type, opts[type]) if type
59
59
  end
60
60
  end
@@ -42,9 +42,7 @@ module Rexer
42
42
  end
43
43
 
44
44
  def source
45
- @source ||= definition.source.then do |src|
46
- Source.const_get(src.type.capitalize).new(**src.options)
47
- end
45
+ @source ||= Source.from_definition(definition.source)
48
46
  end
49
47
  end
50
48
 
@@ -90,7 +88,6 @@ module Rexer
90
88
 
91
89
  update_source
92
90
  run_db_migrate
93
- hooks[:updated]&.call
94
91
  end
95
92
 
96
93
  private
@@ -99,6 +96,24 @@ module Rexer
99
96
  source.update(plugin_dir.to_s)
100
97
  end
101
98
  end
99
+
100
+ class SourceReloader < Base
101
+ def reload
102
+ return unless plugin_exists?
103
+
104
+ reload_source
105
+ run_db_migrate
106
+ end
107
+
108
+ private
109
+
110
+ def reload_source
111
+ plugin_dir.to_s.then { |dir|
112
+ FileUtils.rm_rf(dir)
113
+ source.load(dir)
114
+ }
115
+ end
116
+ end
102
117
  end
103
118
  end
104
119
  end
@@ -2,7 +2,14 @@ module Rexer
2
2
  module Extension
3
3
  module Theme
4
4
  def self.dir
5
- Pathname.new("themes")
5
+ public_themes = Pathname.pwd.join("public", "themes")
6
+
7
+ if public_themes.exist?
8
+ # When Redmine version is v5.1 or older, public/themes is used.
9
+ public_themes
10
+ else
11
+ Pathname.new("themes")
12
+ end
6
13
  end
7
14
 
8
15
  class Base
@@ -25,9 +32,7 @@ module Rexer
25
32
  end
26
33
 
27
34
  def source
28
- @source ||= definition.source.then do |src|
29
- Source.const_get(src.type.capitalize).new(**src.options)
30
- end
35
+ @source ||= Source.from_definition(definition.source)
31
36
  end
32
37
  end
33
38
 
@@ -66,7 +71,6 @@ module Rexer
66
71
  return unless theme_exists?
67
72
 
68
73
  update_source
69
- hooks[:updated]&.call
70
74
  end
71
75
 
72
76
  private
@@ -75,6 +79,23 @@ module Rexer
75
79
  source.update(theme_dir.to_s)
76
80
  end
77
81
  end
82
+
83
+ class SourceReloader < Base
84
+ def reload
85
+ return unless theme_exists?
86
+
87
+ reload_source
88
+ end
89
+
90
+ private
91
+
92
+ def reload_source
93
+ theme_dir.to_s.then { |dir|
94
+ FileUtils.rm_rf(dir)
95
+ source.load(dir)
96
+ }
97
+ end
98
+ end
78
99
  end
79
100
  end
80
101
  end
@@ -1,16 +1,16 @@
1
1
  module Rexer
2
2
  module Source
3
3
  class Base
4
- def self.source_names = @source_names ||= []
5
-
6
4
  def self.inherited(subclass)
7
- source_names << subclass.name.split("::").last.downcase.to_sym
5
+ Source.names << subclass.name.split("::").last.downcase.to_sym
8
6
  end
9
7
 
8
+ # Load the source to the given path.
10
9
  def load(_path)
11
10
  raise "Not implemented"
12
11
  end
13
12
 
13
+ # Update to the latest version of the source.
14
14
  def update(_path)
15
15
  raise "Not implemented"
16
16
  end
@@ -0,0 +1,9 @@
1
+ module Rexer
2
+ module Source
3
+ def self.names = @names ||= []
4
+
5
+ def self.from_definition(source)
6
+ const_get(source.type.capitalize).new(**source.options)
7
+ end
8
+ end
9
+ end
data/lib/rexer/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rexer
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3.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.1.0
4
+ version: 0.3.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-14 00:00:00.000000000 Z
11
+ date: 2024-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -69,6 +69,7 @@ files:
69
69
  - exe/rex
70
70
  - lib/rexer.rb
71
71
  - lib/rexer/cli.rb
72
+ - lib/rexer/commands/envs.rb
72
73
  - lib/rexer/commands/install.rb
73
74
  - lib/rexer/commands/state.rb
74
75
  - lib/rexer/commands/switch.rb
@@ -81,6 +82,7 @@ files:
81
82
  - lib/rexer/definition/lock.rb
82
83
  - lib/rexer/extension/plugin.rb
83
84
  - lib/rexer/extension/theme.rb
85
+ - lib/rexer/source.rb
84
86
  - lib/rexer/source/base.rb
85
87
  - lib/rexer/source/git.rb
86
88
  - lib/rexer/source/github.rb