class Decidim::GemManager
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.
Constants
- COMPONENTS
- PARTICIPATORY_SPACES
Public Class Methods
all_dirs(include_root: true) { |dir| ... }
click to toggle source
# File lib/decidim/gem_manager.rb, line 142 def all_dirs(include_root: true) dirs = plugins dirs << "./" if include_root dirs.each { |dir| yield(dir) } end
capture(cmd, env: {})
click to toggle source
# File lib/decidim/gem_manager.rb, line 71 def capture(cmd, env: {}) Open3.capture2e(env, cmd) end
install_all(out: $stdout)
click to toggle source
# File lib/decidim/gem_manager.rb, line 99 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
new(dir)
click to toggle source
# File lib/decidim/gem_manager.rb, line 40 def initialize(dir) @dir = File.expand_path(dir) end
plugins()
click to toggle source
# File lib/decidim/gem_manager.rb, line 149 def plugins Dir.glob("#{root}/decidim-*/") end
replace_file(name, regexp, replacement)
click to toggle source
# File lib/decidim/gem_manager.rb, line 136 def replace_file(name, regexp, replacement) new_content = File.read(name).gsub(regexp, replacement) File.open(name, "w") { |f| f.write(new_content) } end
replace_versions()
click to toggle source
# File lib/decidim/gem_manager.rb, line 87 def replace_versions replace_file( "package.json", /^ "version": "[^"]*"/, " \"version\": \"#{semver_friendly_version}\"" ) all_dirs do |dir| new(dir).replace_version end end
run(cmd, out: $stdout)
click to toggle source
# File lib/decidim/gem_manager.rb, line 75 def run(cmd, out: $stdout) system(cmd, out: out) end
run_all(command, out: $stdout, include_root: true)
click to toggle source
# File lib/decidim/gem_manager.rb, line 124 def run_all(command, out: $stdout, include_root: true) all_dirs(include_root: include_root) do |dir| status = new(dir).run(command, out: out) break unless status || ENV["FAIL_FAST"] == "false" end end
test_component()
click to toggle source
# File lib/decidim/gem_manager.rb, line 83 def test_component new("decidim-#{COMPONENTS.sample}").run("rake") end
test_participatory_space()
click to toggle source
# File lib/decidim/gem_manager.rb, line 79 def test_participatory_space new("decidim-#{PARTICIPATORY_SPACES.sample}").run("rake") end
uninstall_all(out: $stdout)
click to toggle source
# File lib/decidim/gem_manager.rb, line 112 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()
click to toggle source
# File lib/decidim/gem_manager.rb, line 132 def version @version ||= File.read(version_file).strip end
Private Class Methods
root()
click to toggle source
# File lib/decidim/gem_manager.rb, line 155 def root File.expand_path(File.join("..", ".."), __dir__) end
semver_friendly_version()
click to toggle source
# File lib/decidim/gem_manager.rb, line 159 def semver_friendly_version version.gsub(/\.pre/, "-pre").gsub(/\.dev/, "-dev").gsub(/.rc(\d*)/, "-rc\\1") end
version_file()
click to toggle source
# File lib/decidim/gem_manager.rb, line 163 def version_file File.join(root, ".decidim-version") end
Public Instance Methods
capture(command)
click to toggle source
# File lib/decidim/gem_manager.rb, line 50 def capture(command) interpolated_in_folder(command) do |cmd| self.class.capture(cmd) end end
replace_version()
click to toggle source
# File lib/decidim/gem_manager.rb, line 56 def replace_version Dir.chdir(@dir) do self.class.replace_file( "lib/#{name.tr("-", "/")}/version.rb", /def self\.version(\s*)"[^"]*"/, "def self.version\\1\"#{version}\"" ) end end
run(command, out: $stdout)
click to toggle source
# File lib/decidim/gem_manager.rb, line 44 def run(command, out: $stdout) interpolated_in_folder(command) do |cmd| self.class.run(cmd, out: out) end end
short_name()
click to toggle source
# File lib/decidim/gem_manager.rb, line 66 def short_name name.gsub(/decidim-/, "") end
Private Instance Methods
folder_name()
click to toggle source
# File lib/decidim/gem_manager.rb, line 176 def folder_name File.basename(@dir) end
interpolated_in_folder(command) { |gsub("%version", version).gsub("%name", name)| ... }
click to toggle source
# File lib/decidim/gem_manager.rb, line 170 def interpolated_in_folder(command) Dir.chdir(@dir) do yield command.gsub("%version", version).gsub("%name", name) end end
name()
click to toggle source
# File lib/decidim/gem_manager.rb, line 180 def name self.class.plugins.map { |name| File.expand_path(name) }.include?(@dir) ? folder_name : "decidim" end
version()
click to toggle source
# File lib/decidim/gem_manager.rb, line 184 def version self.class.version end