Class: Decidim::GemManager
- Inherits:
-
Object
- Object
- Decidim::GemManager
- Defined in:
- lib/decidim/gem_manager.rb
Overview
Handles a decidim components.
Allows to perform custom operations on all modules in a given folder, or on specific module folders.
Potential operations are:
-
Running custom commands, via the ‘run` method, such as releasing it, or installing it locally.
-
Updating version files from the main ‘.decidim-version` file in the root of the repository.
Constant Summary collapse
- PARTICIPATORY_SPACES =
%w( participatory_processes assemblies consultations conferences ).freeze
- COMPONENTS =
%w( accountability budgets debates meetings pages proposals surveys sortitions blogs ).freeze
Class Method Summary collapse
- .all_dirs(include_root: true) ⇒ Object
- .capture(cmd, env: {}, with_stderr: true) ⇒ Object
- .fail_fast? ⇒ Boolean
- .install_all(out: $stdout) ⇒ Object
- .package_dirs ⇒ Object
- .plugins ⇒ Object
- .replace_file(name, regexp, replacement) ⇒ Object
- .replace_versions ⇒ Object
- .retry_times ⇒ Object
- .run(cmd, out: $stdout) ⇒ Object
- .run_all(command, out: $stdout, include_root: true) ⇒ Object
- .run_at(dir, command, out: $stdout) ⇒ Object
- .run_packages(command, out: $stdout) ⇒ Object
- .semver_friendly_version(a_version) ⇒ Object
- .test_component ⇒ Object
- .test_participatory_space ⇒ Object
- .uninstall_all(out: $stdout) ⇒ Object
- .version ⇒ Object
Instance Method Summary collapse
- #capture(command, env: {}, with_stderr: true) ⇒ Object
-
#initialize(dir) ⇒ GemManager
constructor
A new instance of GemManager.
- #replace_gem_version ⇒ Object
- #replace_package_version ⇒ Object
- #run(command, out: $stdout) ⇒ Object
- #short_name ⇒ Object
Constructor Details
#initialize(dir) ⇒ GemManager
Returns a new instance of GemManager.
41 42 43 |
# File 'lib/decidim/gem_manager.rb', line 41 def initialize(dir) @dir = File.(dir) end |
Class Method Details
.all_dirs(include_root: true) ⇒ Object
172 173 174 175 176 177 |
# File 'lib/decidim/gem_manager.rb', line 172 def all_dirs(include_root: true) dirs = plugins dirs << "./" if include_root dirs.each { |dir| yield(dir) } end |
.capture(cmd, env: {}, with_stderr: true) ⇒ Object
82 83 84 85 86 |
# File 'lib/decidim/gem_manager.rb', line 82 def capture(cmd, env: {}, with_stderr: true) return Open3.capture2e(env, cmd) if with_stderr Open3.capture2(env, cmd) end |
.fail_fast? ⇒ Boolean
193 194 195 |
# File 'lib/decidim/gem_manager.rb', line 193 def fail_fast? ENV.fetch("FAIL_FAST", nil) != "false" end |
.install_all(out: $stdout) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/decidim/gem_manager.rb', line 110 def install_all(out: $stdout) run_all( "gem build %name && mv %name-%version.gem ..", include_root: false, out: out ) new(root).run( "gem build %name && gem install *.gem", out: out ) end |
.package_dirs ⇒ Object
179 180 181 182 183 |
# File 'lib/decidim/gem_manager.rb', line 179 def package_dirs dirs = Dir.glob("#{root}/packages/*") dirs.each { |dir| yield(dir) } end |
.plugins ⇒ Object
185 186 187 |
# File 'lib/decidim/gem_manager.rb', line 185 def plugins Dir.glob("#{root}/decidim-*/") end |
.replace_file(name, regexp, replacement) ⇒ Object
166 167 168 169 170 |
# File 'lib/decidim/gem_manager.rb', line 166 def replace_file(name, regexp, replacement) new_content = File.read(name).gsub(regexp, replacement) File.write(name, new_content) end |
.replace_versions ⇒ Object
100 101 102 103 104 105 106 107 108 |
# File 'lib/decidim/gem_manager.rb', line 100 def replace_versions all_dirs do |dir| new(dir).replace_gem_version end package_dirs do |dir| new(dir).replace_package_version end end |
.retry_times ⇒ Object
197 198 199 |
# File 'lib/decidim/gem_manager.rb', line 197 def retry_times ENV.fetch("RETRY_TIMES", 10).to_i end |
.run(cmd, out: $stdout) ⇒ Object
88 89 90 |
# File 'lib/decidim/gem_manager.rb', line 88 def run(cmd, out: $stdout) system(cmd, out: out) end |
.run_all(command, out: $stdout, include_root: true) ⇒ Object
135 136 137 138 139 140 141 |
# File 'lib/decidim/gem_manager.rb', line 135 def run_all(command, out: $stdout, include_root: true) all_dirs(include_root: include_root) do |dir| status = run_at(dir, command, out: out) break if !status && fail_fast? end end |
.run_at(dir, command, out: $stdout) ⇒ Object
151 152 153 154 155 156 157 158 159 160 |
# File 'lib/decidim/gem_manager.rb', line 151 def run_at(dir, command, out: $stdout) attempts = 0 until (status = new(dir).run(command, out: out)) attempts += 1 break if attempts > Decidim::GemManager.retry_times end status end |
.run_packages(command, out: $stdout) ⇒ Object
143 144 145 146 147 148 149 |
# File 'lib/decidim/gem_manager.rb', line 143 def run_packages(command, out: $stdout) package_dirs do |dir| status = run_at(dir, command, out: out) break if !status && fail_fast? end end |
.semver_friendly_version(a_version) ⇒ Object
189 190 191 |
# File 'lib/decidim/gem_manager.rb', line 189 def semver_friendly_version(a_version) a_version.gsub(/\.pre/, "-pre").gsub(/\.dev/, "-dev").gsub(/.rc(\d*)/, "-rc\\1") end |
.test_component ⇒ Object
96 97 98 |
# File 'lib/decidim/gem_manager.rb', line 96 def test_component new("decidim-#{COMPONENTS.sample}").run("rake") end |
.test_participatory_space ⇒ Object
92 93 94 |
# File 'lib/decidim/gem_manager.rb', line 92 def test_participatory_space new("decidim-#{PARTICIPATORY_SPACES.sample}").run("rake") end |
.uninstall_all(out: $stdout) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/decidim/gem_manager.rb', line 123 def uninstall_all(out: $stdout) run_all( "gem uninstall %name -v %version --executables --force", out: out ) new(root).run( "rm decidim-*.gem", out: out ) end |
.version ⇒ Object
162 163 164 |
# File 'lib/decidim/gem_manager.rb', line 162 def version @version ||= File.read(version_file).strip end |
Instance Method Details
#capture(command, env: {}, with_stderr: true) ⇒ Object
51 52 53 54 55 |
# File 'lib/decidim/gem_manager.rb', line 51 def capture(command, env: {}, with_stderr: true) interpolated_in_folder(command) do |cmd| self.class.capture(cmd, env: env, with_stderr: with_stderr) end end |
#replace_gem_version ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/decidim/gem_manager.rb', line 57 def replace_gem_version Dir.chdir(@dir) do replace_file( "lib/#{name.tr("-", "/")}/version.rb", /def self\.version(\s*)"[^"]*"/, "def self.version\\1\"#{version}\"" ) end end |
#replace_package_version ⇒ Object
67 68 69 70 71 72 73 74 75 |
# File 'lib/decidim/gem_manager.rb', line 67 def replace_package_version Dir.chdir(@dir) do replace_file( "package.json", /^ "version": "[^"]*"/, " \"version\": \"#{semver_friendly_version(version)}\"" ) end end |
#run(command, out: $stdout) ⇒ Object
45 46 47 48 49 |
# File 'lib/decidim/gem_manager.rb', line 45 def run(command, out: $stdout) interpolated_in_folder(command) do |cmd| self.class.run(cmd, out: out) end end |
#short_name ⇒ Object
77 78 79 |
# File 'lib/decidim/gem_manager.rb', line 77 def short_name name.gsub(/decidim-/, "") end |