class RooOnRails::Checks::Base

Attributes

context[R]
options[R]
shell[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/roo_on_rails/checks/base.rb, line 18
def initialize(options = {})
  @options = options.dup
  @fix     = @options.delete(:fix) { false }
  @context = @options.delete(:context) { Hashie::Mash.new }
  @shell   = @options.delete(:shell) { Shell.new }
  @dry_run = options.fetch(:dry_run, false)
end
requires(*dependencies) click to toggle source

Add `dependencies` to the list of prerequisites for this check. If none are specified, return the list of dependencies.

# File lib/roo_on_rails/checks/base.rb, line 13
def self.requires(*dependencies)
  @requires ||= Set.new
  dependencies.any? ? @requires.merge(dependencies) : @requires
end

Public Instance Methods

run() click to toggle source
# File lib/roo_on_rails/checks/base.rb, line 26
def run
  dependency_status = resolve dependencies

  say intro
  unless dependency_status
    final_fail! 'Unmet dependencies.'
    return
  end

  return true if @dry_run

  begin
    call
  rescue Failure
    return false unless @fix
    say "\t· attempting to fix", %i[yellow]
    fix
    @fix = false
    say "\t· re-checking", %i[yellow]
    retry
  end

  true
rescue FinalFailure
  false
end

Protected Instance Methods

call() click to toggle source
# File lib/roo_on_rails/checks/base.rb, line 68
def call
  final_fail! "this check wasn't implemented"
end
dependencies() click to toggle source

Returns prerequisite checks. Can be overriden.

# File lib/roo_on_rails/checks/base.rb, line 58
def dependencies
  @dependencies ||= self.class.requires.map { |k|
    k.new(fix: @fix, context: @context, shell: @shell, **@options)
  }
end
fail!(msg) click to toggle source
# File lib/roo_on_rails/checks/base.rb, line 80
def fail!(msg)
  say "\t✘ #{msg}", :red
  raise Failure, msg
end
final_fail!(msg) click to toggle source
# File lib/roo_on_rails/checks/base.rb, line 85
def final_fail!(msg)
  say "\t✘ #{msg}", :red
  raise FinalFailure, msg
end
fix() click to toggle source
# File lib/roo_on_rails/checks/base.rb, line 72
def fix
  final_fail! "can't fix this on my own"
end
intro() click to toggle source
# File lib/roo_on_rails/checks/base.rb, line 64
def intro
  self.class.name
end
pass(msg) click to toggle source
# File lib/roo_on_rails/checks/base.rb, line 76
def pass(msg)
  say "\t✔ #{msg}", :green
end
signature() click to toggle source

Return a unique signature for this check

# File lib/roo_on_rails/checks/base.rb, line 91
def signature
  [self.class.name]
end

Private Instance Methods

resolve(deps) click to toggle source

Run each dependency, then mark them as run.

# File lib/roo_on_rails/checks/base.rb, line 98
def resolve(deps)
  context.deps ||= {}
  deps.map { |dep|
    sig = dep.signature.join('/')
    if context.deps.key?(sig)
      context.deps[sig]
    else
      context.deps[sig] = dep.run
    end
  }.to_a.all?
end