lib/kind.rb in kind-1.0.0 vs lib/kind.rb in kind-1.1.0

- old
+ new

@@ -1,10 +1,12 @@ # frozen_string_literal: true require 'kind/version' module Kind + Undefined = Object.new + class Error < TypeError def initialize(klass, object) super("#{object.inspect} expected to be a kind of #{klass}") end end @@ -45,12 +47,12 @@ return object if object.is_a?(klass) raise Kind::Error.new((name || klass.name), object) end - def self.Class(object = nil) - return Class if object.nil? + def self.Class(object = Undefined) + return Class if object == Undefined self.call(::Class, object) end const_set(:Class, ::Module.new do @@ -61,12 +63,12 @@ def self.class?(value); Kind::Is.Class(value); end def self.instance?(value); class?(value); end end) - def self.Module(object = nil) - return Module if object.nil? + def self.Module(object = Undefined) + return Module if object == Undefined self.call(::Module, object) end const_set(:Module, ::Module.new do @@ -84,22 +86,22 @@ extend self COLONS = '::'.freeze KIND_OF = <<-RUBY - def self.%{method_name}(object = nil, options = {}) + def self.%{method_name}(object = Undefined, options = {}) default = options[:or] - return Kind::Of::%{kind_name} if object.nil? && default.nil? + return Kind::Of::%{kind_name} if object == Undefined && default.nil? Kind::Of.(::%{kind_name}, (object || default), name: "%{kind_name}".freeze) end RUBY KIND_IS = <<-RUBY - def self.%{method_name}(value = nil) - return Kind::Is::%{kind_name} if value.nil? + def self.%{method_name}(value = Undefined) + return Kind::Is::%{kind_name} if value == Undefined Kind::Is.(::%{kind_name}, value) end RUBY @@ -200,14 +202,14 @@ end module Of # -- Boolean - def self.Boolean(object = nil, options = {}) + def self.Boolean(object = Undefined, options = {}) default = options[:or] - return Kind::Of::Boolean if object.nil? && default.nil? + return Kind::Of::Boolean if object == Undefined && default.nil? bool = object.nil? ? default : object return bool if bool.is_a?(::TrueClass) || bool.is_a?(::FalseClass) @@ -226,13 +228,13 @@ end end) # -- Lambda - def self.Lambda(object = nil, options = {}) + def self.Lambda(object = Undefined, options = {}) default = options[:or] - return Kind::Of::Lambda if object.nil? && default.nil? + return Kind::Of::Lambda if object == Undefined && default.nil? func = object || default return func if func.is_a?(::Proc) && func.lambda?