module Yema class Rule include Equalizer.new(:attribute_name) attr_reader :attribute_name def initialize(attribute_name, options={}) assert_required_options(options) @attribute_name = attribute_name end def self.required_options [] end def errors(resource) Validator.new(resource, self).errors end private def assert_required_options(options) shortage = self.class.required_options - options.keys raise InvalidOptionError, "Missing options: #{shortage.inspect}" unless shortage.empty? end end end