def make_validator!(contract)
      klass = contract.class
      key = if validator_strategies.key?(klass)
              klass
            else
              if contract.respond_to? :valid?
                :valid
              elsif klass == Class || klass == Module
                :class
              else
                :default
              end
            end

      validator_strategies[key].call(contract)
    end
def make_validator!(contract)
      klass = contract.class
      key = if validator_strategies.key?(klass)
              klass
            else
              if contract.respond_to? :valid?
                :valid
              elsif klass == Class || klass == Module
                :class
              else
                :default
              end
            end

      validator_strategies[key].call(contract)
    end
This is a little weird. For each contract
 we pre-make a proc to validate it so we
 don't have to go through this decision tree every time.
 Seems silly but it saves us a bunch of time (4.3sec vs 5.2sec)