lib/kind.rb in kind-2.2.0 vs lib/kind.rb in kind-2.3.0
- old
+ new
@@ -2,16 +2,16 @@
require 'kind/version'
require 'kind/empty'
require 'kind/undefined'
+require 'kind/checker'
require 'kind/maybe'
require 'kind/error'
require 'kind/of'
require 'kind/is'
-require 'kind/checker'
require 'kind/types'
module Kind
WRONG_NUMBER_OF_ARGUMENTS = 'wrong number of arguments (given 1, expected 2)'.freeze
@@ -23,34 +23,16 @@
return Kind::Is.(expected, object) if Undefined != object
raise ArgumentError, WRONG_NUMBER_OF_ARGUMENTS
end
- MODULE_OR_CLASS = 'Module/Class'.freeze
-
- private_constant :MODULE_OR_CLASS
-
- private_class_method def self.__checkers__
- @__checkers__ ||= {}
- end
-
- __checkers__
-
def self.of(kind = Undefined, object = Undefined)
return Of if Undefined == kind && Undefined == object
return Kind::Of.(kind, object) if Undefined != object
- __checkers__[kind] ||= begin
- kind_name = kind.name
-
- if Kind::Of.const_defined?(kind_name, false)
- Kind::Of.const_get(kind_name)
- else
- Checker.new(Kind::Of.(Module, kind, MODULE_OR_CLASS))
- end
- end
+ Kind::Checker::Factory.create(kind)
end
def self.of?(kind, *args)
Kind.of(kind).instance?(*args)
end
@@ -85,11 +67,11 @@
self.call(::Class, object)
end
const_set(:Class, ::Module.new do
- extend Checkable
+ extend Checker::Protocol
def self.__kind; ::Class; end
def self.class?(value); Kind::Is.Class(value); end
@@ -107,11 +89,11 @@
self.call(::Module, object)
end
const_set(:Module, ::Module.new do
- extend Checkable
+ extend Checker::Protocol
def self.__kind_undefined(value)
__kind_error(Kind::Undefined) if Kind::Undefined == value
yield
@@ -163,11 +145,11 @@
raise Kind::Error.new('Boolean'.freeze, bool)
end
const_set(:Boolean, ::Module.new do
- extend Checkable
+ extend Checker::Protocol
def self.__kind; [TrueClass, FalseClass].freeze; end
def self.class?(value); Kind.is.Boolean(value); end
@@ -218,11 +200,11 @@
raise Kind::Error.new('Lambda'.freeze, func)
end
const_set(:Lambda, ::Module.new do
- extend Checkable
+ extend Checker::Protocol
def self.__kind; ::Proc; end
def self.instance(value, options = Empty::HASH)
default = options[:or]
@@ -266,10 +248,10 @@
raise Kind::Error.new('Callable'.freeze, callable)
end
const_set(:Callable, ::Module.new do
- extend Checkable
+ extend Checker::Protocol
def self.__kind; Object; end
def self.class?(value)
Kind::Is::Callable(value)