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)