def validates_with_block(*fields, &block)
@__validates_with_block_count ||= 0
@__validates_with_block_count += 1
unless block_given?
raise ArgumentError, 'You need to pass a block to validates_with_block method'
end
method_name = "__validates_with_block_#{@__validates_with_block_count}".to_sym
define_method(method_name, &block)
options = fields.last.is_a?(Hash) ? fields.last.pop.dup : {}
options[:method] = method_name
fields = [method_name] if fields.empty?
validators.add(MethodValidator, *fields + [options])
end