module FactChecker::ClassMethods

Public Instance Methods

define_fact(arg, &block) click to toggle source
# File lib/fact_checker/mixin.rb, line 9
def define_fact(arg, &block)
  fail ArgumentError, 'block not supplied'  unless block

  name, dependencies = arg.is_a?(Hash) ? arg.to_a.flatten(1) : [arg, []]

  (@fact_checker_facts ||= []) << name.to_sym

  define_method(name) do
    dependencies_satisfied = [*dependencies].all?{ |dep_name| send(dep_name).valid? }
    Result.new(dependencies_satisfied, instance_eval(&block))
  end

  define_method("#{name}?") do
    send(name).valid?
  end

  private name, "#{name}?"  if name[0] == '_'
end
facts() click to toggle source
# File lib/fact_checker/mixin.rb, line 28
def facts
  ancestors.reverse.map{ |klass| klass.instance_eval{ @fact_checker_facts } }.compact.flatten(1)
end