def validates_with_block(*attribute_names, &block)
      unless block_given?
        raise ArgumentError, 'You need to pass a block to validates_with_block'
      end

      options = Macros.extract_options(attribute_names)
      validation_rules.add(Rule::Block, attribute_names, options, &block)
    end
def validates_with_block(*attribute_names, &block)
      unless block_given?
        raise ArgumentError, 'You need to pass a block to validates_with_block'
      end

      options = Macros.extract_options(attribute_names)
      validation_rules.add(Rule::Block, attribute_names, options, &block)
    end
Validate using the given block. The block given needs to return:
 [result::<Boolean>, Error Message::<String>]

 @example [Usage]
   require 'virtus'
   require 'aequitas'

   class Page
     include Virtus
     include Aequitas

     attribute :zip_code, String

     validates_with_block do
       if @zip_code == "94301"
         true
       else
         [false, "You're in the wrong zip code"]
       end
     end

     # A call to valid? will return false and
     # populate the object's errors with "You're in the
     # wrong zip code" unless zip_code == "94301"

     # You can also specify field:

     validates_with_block :zip_code do
       if @zip_code == "94301"
         true
       else
         [false, "You're in the wrong zip code"]
       end
     end

     # it will add returned error message to :zip_code field
   end