Module: FactChecker::ClassMethods

Defined in:
lib/fact_checker/mixin.rb

Instance Method Summary collapse

Instance Method Details

#define_fact(arg, &block) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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

#factsObject



28
29
30
# File 'lib/fact_checker/mixin.rb', line 28

def facts
  ancestors.reverse.map{ |klass| klass.instance_eval{ @fact_checker_facts } }.compact.flatten(1)
end