middleman/middleman-core/lib/middleman-core/contracts.rb

113 lines
1.5 KiB
Ruby

if ENV['CONTRACTS'] != 'false'
require 'contracts'
require 'hamster'
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
end
VectorOf = Contracts::CollectionOf::Factory.new(::Hamster::Vector)
ResourceList = Contracts::ArrayOf[IsA['Middleman::Sitemap::Resource']]
end
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
class SetOf < Callable
end
class Frozen < Callable
end
class VectorOf < Callable
end
end
end
module Contracts
PATH_MATCHER = Or[String, RespondTo[:match], RespondTo[:call], RespondTo[:to_s]]
end