module Symbiont::Ready

Attributes

ready[RW]
ready_error[RW]

Public Class Methods

included(caller) click to toggle source
# File lib/symbiont/ready.rb, line 25
def self.included(caller)
  caller.extend(ClassMethods)
end

Public Instance Methods

ready?() click to toggle source
# File lib/symbiont/ready.rb, line 43
def ready?
  self.ready_error = nil
  return true if ready
  ready_validations_pass?
end
ready_validations_pass?() click to toggle source
# File lib/symbiont/ready.rb, line 49
def ready_validations_pass?
  self.class.ready_validations.all? do |validation|
    passed, message = instance_eval(&validation)
    self.ready_error = message if message && !passed
    passed
  end
end
when_ready(&block) click to toggle source
# File lib/symbiont/ready.rb, line 29
def when_ready(&block)
  already_marked_ready = ready

  fail(ArgumentError, 'A block is required for a when_ready action.') unless block_given?

  unless self.ready = ready?
    message = "Failed to validate because: #{ready_error || 'no reason provided'}"
    fail(::Symbiont::Errors::PageNotValidatedError, message)
  end
  block.call self
ensure
  self.ready = already_marked_ready
end