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
|