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?