class Gouteur::Checker
main process class
Constants
- BUNDLER_GEM_NOT_FOUND_CODE
- BUNDLER_INCOMPATIBLE_VERSION_CODE
Attributes
repo[R]
Public Class Methods
call(repo, silent: false)
click to toggle source
# File lib/gouteur/checker.rb, line 8 def self.call(repo, silent: false) new(repo, silent: silent).call end
new(repo, silent: false)
click to toggle source
# File lib/gouteur/checker.rb, line 12 def initialize(repo, silent: false) @repo = repo @silent = silent end
Public Instance Methods
adapt_gemfile_content(content)
click to toggle source
# File lib/gouteur/checker.rb, line 67 def adapt_gemfile_content(content) new_entry = "gem '#{Host.name}', path: '#{Host.root}' # set by gouteur " existing_ref_pattern = /^ *gem +(?<q>'|")#{Host.name}\k<q>(?<v> *,\s*(?<q2>'|")[^'"]+\k<q2>*)?/ if content =~ existing_ref_pattern content.gsub(existing_ref_pattern) do # keep version specification if there was one new_entry.sub(/(?=, path:)/, Regexp.last_match[:v].to_s) end else "#{content}\n#{new_entry}\n" end end
adaptation_env()
click to toggle source
# File lib/gouteur/checker.rb, line 117 def adaptation_env { 'BUNDLE_GEMFILE' => adapted_gemfile_path, 'SPEC_OPTS' => '--fail-fast', # saves time with rspec tasks } end
adapted_gemfile_path()
click to toggle source
# File lib/gouteur/checker.rb, line 87 def adapted_gemfile_path "#{repo.bundle.gemfile_path}.gouteur" end
call()
click to toggle source
# File lib/gouteur/checker.rb, line 17 def call puts "Preparing `#{repo}` for checks..." prepare check_dependence run_tasks(adapted: false) create_adapted_gemfile install_adapted_bundle or return handle_incompatible_semver run_tasks(adapted: true) [true, Message.success(repo: repo)] rescue Gouteur::Error => e [false, e.message.chomp] end
check_dependence()
click to toggle source
# File lib/gouteur/checker.rb, line 41 def check_dependence repo.bundle.depends_on?(Host.name) || raise(Error, Message.no_dependence(repo: repo)) end
create_adapted_gemfile()
click to toggle source
# File lib/gouteur/checker.rb, line 61 def create_adapted_gemfile content = File.exist?(gemfile_path) ? File.read(gemfile_path) : '' adapted_content = adapt_gemfile_content(content) File.open(adapted_gemfile_path, 'w') { |f| f.puts(adapted_content) } end
gemfile_path()
click to toggle source
# File lib/gouteur/checker.rb, line 83 def gemfile_path repo.bundle.gemfile_path end
handle_incompatible_semver()
click to toggle source
# File lib/gouteur/checker.rb, line 111 def handle_incompatible_semver raise Error, Message.incompatible_failure(repo: repo) if repo.locked? [true, Message.skipped_incompatible(repo: repo)] end
indicates_incompatible_semver?(result)
click to toggle source
# File lib/gouteur/checker.rb, line 105 def indicates_incompatible_semver?(result) result.exitstatus == BUNDLER_INCOMPATIBLE_VERSION_CODE || result.exitstatus == BUNDLER_GEM_NOT_FOUND_CODE && result.stderr =~ /following version/ end
install_adapted_bundle()
click to toggle source
# File lib/gouteur/checker.rb, line 91 def install_adapted_bundle result = repo.bundle.install(env: adaptation_env) if result.success? true elsif indicates_incompatible_semver?(result) false else raise Error, result.full_error end end
prepare()
click to toggle source
# File lib/gouteur/checker.rb, line 34 def prepare repo.fetch repo.prepare result = repo.bundle.install result.success? || raise(Error, result.full_error) end
run_task(task, adapted: false)
click to toggle source
# File lib/gouteur/checker.rb, line 51 def run_task(task, adapted: false) puts("Running `#{task}` with #{adapted ? :new : :old} `#{Host.name}`...") env = adapted ? adaptation_env : {} result = repo.bundle.exec(task, env: env) result.success? or raise Error, Message.send( adapted ? :broken_after_update : :broken, repo: repo, task: task, output: result.stdout, error: result.stderr ) end
run_tasks(adapted: false)
click to toggle source
# File lib/gouteur/checker.rb, line 46 def run_tasks(adapted: false) repo.tasks.empty? && raise(Error, Message.no_tasks(repo: repo)) repo.tasks.each { |task| run_task(task, adapted: adapted) } end
Private Instance Methods
puts(*args)
click to toggle source
# File lib/gouteur/checker.rb, line 126 def puts(*args) @silent ? nil : Kernel.puts(*args) end