2014-07-03 04:04:34 +02:00
|
|
|
if ENV['TEST'] || ENV['CONTRACTS'] == 'true'
|
|
|
|
require 'contracts'
|
2015-05-04 02:11:49 +02:00
|
|
|
require 'hamster'
|
2014-07-03 04:04:34 +02:00
|
|
|
|
2014-07-10 21:35:47 +02:00
|
|
|
module Contracts
|
|
|
|
class IsA
|
|
|
|
def self.[](val)
|
|
|
|
@lookup ||= {}
|
|
|
|
@lookup[val] ||= new(val)
|
|
|
|
end
|
|
|
|
|
|
|
|
def initialize(val)
|
|
|
|
@val = val
|
|
|
|
end
|
|
|
|
|
|
|
|
def valid?(val)
|
|
|
|
val.is_a? @val.constantize
|
|
|
|
end
|
2014-07-03 04:04:34 +02:00
|
|
|
end
|
|
|
|
|
2015-05-04 02:11:49 +02:00
|
|
|
VectorOf = Contracts::CollectionOf::Factory.new(::Hamster::Vector)
|
2014-07-10 21:35:47 +02:00
|
|
|
ResourceList = Contracts::ArrayOf[IsA['Middleman::Sitemap::Resource']]
|
|
|
|
end
|
2014-07-03 04:04:34 +02:00
|
|
|
else
|
|
|
|
module Contracts
|
|
|
|
def self.included(base)
|
|
|
|
base.extend self
|
|
|
|
end
|
|
|
|
|
|
|
|
# rubocop:disable MethodName
|
|
|
|
def Contract(*)
|
|
|
|
end
|
|
|
|
|
|
|
|
class Callable
|
|
|
|
def self.[](*)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Bool
|
|
|
|
end
|
|
|
|
|
|
|
|
class Num
|
|
|
|
end
|
|
|
|
|
|
|
|
class Pos
|
|
|
|
end
|
|
|
|
|
|
|
|
class Neg
|
|
|
|
end
|
|
|
|
|
|
|
|
class Any
|
|
|
|
end
|
|
|
|
|
|
|
|
class None
|
|
|
|
end
|
|
|
|
|
|
|
|
class Or < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class Xor < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class And < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class Not < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class RespondTo < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class Send < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class Exactly < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class ArrayOf < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class ResourceList < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class Args < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class HashOf < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class Bool
|
|
|
|
end
|
|
|
|
|
|
|
|
class Maybe < Callable
|
|
|
|
end
|
|
|
|
|
|
|
|
class IsA < Callable
|
|
|
|
end
|
2014-07-10 21:35:47 +02:00
|
|
|
|
|
|
|
class SetOf < Callable
|
|
|
|
end
|
2014-07-14 22:19:34 +02:00
|
|
|
|
|
|
|
class Frozen < Callable
|
|
|
|
end
|
2014-06-29 00:07:43 +02:00
|
|
|
|
2015-05-04 02:11:49 +02:00
|
|
|
class VectorOf < Callable
|
|
|
|
end
|
2014-07-03 04:04:34 +02:00
|
|
|
end
|
|
|
|
end
|
2014-07-10 21:35:47 +02:00
|
|
|
|
|
|
|
module Contracts
|
|
|
|
PATH_MATCHER = Or[String, RespondTo[:match], RespondTo[:call], RespondTo[:to_s]]
|
|
|
|
end
|