module Temple::Mixins::EngineDSL

def chain_proc_constructor(name, filter)

def chain_proc_constructor(name, filter)
  raise(ArgumentError, 'Proc or blocks must have arity 0 or 1') if filter.arity > 1
  method_name = "FILTER #{name}"
  c = Class === self ? self : singleton_class
  filter = c.class_eval { define_method(method_name, &filter); instance_method(method_name) }
  proc {|engine| filter.arity == 1 ? filter.bind(engine) : filter.bind(engine).call }
end