Strict typing

This commit is contained in:
Douglas Eichelberger 2023-11-26 10:05:14 -08:00
parent ccbb05d5aa
commit c7c539efa5
3 changed files with 20 additions and 26 deletions

View File

@ -1,4 +1,4 @@
# typed: true # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
class Object class Object
@ -12,15 +12,13 @@ class Object
# to # to
# #
# address.blank? # address.blank?
# sig { returns(T::Boolean) }
# @return [true, false]
def blank? def blank?
respond_to?(:empty?) ? !!T.unsafe(self).empty? : false respond_to?(:empty?) ? !!T.unsafe(self).empty? : false
end end
# An object is present if it's not blank. # An object is present if it's not blank.
# sig { returns(T::Boolean) }
# @return [true, false]
def present? def present?
!blank? !blank?
end end
@ -39,8 +37,7 @@ class Object
# becomes # becomes
# #
# region = params[:state].presence || params[:country].presence || 'US' # region = params[:state].presence || params[:country].presence || 'US'
# sig { returns(T.nilable(T.self_type)) }
# @return [Object]
def presence def presence
self if present? self if present?
end end
@ -50,12 +47,12 @@ class NilClass
# +nil+ is blank: # +nil+ is blank:
# #
# nil.blank? # => true # nil.blank? # => true
# sig { returns(TrueClass) }
# @return [true]
def blank? def blank?
true true
end end
sig { returns(FalseClass) }
def present? # :nodoc: def present? # :nodoc:
false false
end end
@ -65,12 +62,12 @@ class FalseClass
# +false+ is blank: # +false+ is blank:
# #
# false.blank? # => true # false.blank? # => true
# sig { returns(TrueClass) }
# @return [true]
def blank? def blank?
true true
end end
sig { returns(FalseClass) }
def present? # :nodoc: def present? # :nodoc:
false false
end end
@ -80,12 +77,12 @@ class TrueClass
# +true+ is not blank: # +true+ is not blank:
# #
# true.blank? # => false # true.blank? # => false
# sig { returns(FalseClass) }
# @return [false]
def blank? def blank?
false false
end end
sig { returns(TrueClass) }
def present? # :nodoc: def present? # :nodoc:
true true
end end
@ -100,6 +97,7 @@ class Array
# @return [true, false] # @return [true, false]
alias_method :blank?, :empty? alias_method :blank?, :empty?
sig { returns(T::Boolean) }
def present? # :nodoc: def present? # :nodoc:
!empty? !empty?
end end
@ -114,6 +112,7 @@ class Hash
# @return [true, false] # @return [true, false]
alias_method :blank?, :empty? alias_method :blank?, :empty?
sig { returns(T::Boolean) }
def present? # :nodoc: def present? # :nodoc:
!empty? !empty?
end end
@ -126,6 +125,7 @@ class Symbol
# :symbol.blank? # => false # :symbol.blank? # => false
alias_method :blank?, :empty? alias_method :blank?, :empty?
sig { returns(T::Boolean) }
def present? # :nodoc: def present? # :nodoc:
!empty? !empty?
end end
@ -144,8 +144,7 @@ class String
# Unicode whitespace is supported: # Unicode whitespace is supported:
# #
# "\u00a0".blank? # => true # "\u00a0".blank? # => true
# sig { returns(T::Boolean) }
# @return [true, false]
def blank? def blank?
# The regexp that matches blank strings is expensive. For the case of empty # The regexp that matches blank strings is expensive. For the case of empty
# strings we can speed up this method (~3.5x) with an empty? call. The # strings we can speed up this method (~3.5x) with an empty? call. The
@ -158,6 +157,7 @@ class String
end end
end end
sig { returns(T::Boolean) }
def present? # :nodoc: def present? # :nodoc:
!blank? !blank?
end end
@ -168,12 +168,12 @@ class Numeric # :nodoc:
# #
# 1.blank? # => false # 1.blank? # => false
# 0.blank? # => false # 0.blank? # => false
# sig { returns(FalseClass) }
# @return [false]
def blank? def blank?
false false
end end
sig { returns(TrueClass) }
def present? def present?
true true
end end
@ -183,12 +183,12 @@ class Time # :nodoc:
# No Time is blank: # No Time is blank:
# #
# Time.now.blank? # => false # Time.now.blank? # => false
# sig { returns(FalseClass) }
# @return [false]
def blank? def blank?
false false
end end
sig { returns(TrueClass) }
def present? def present?
true true
end end

View File

@ -1,6 +0,0 @@
# typed: strict
class Object
sig { returns(T::Boolean) }
def present?; end
end

View File

@ -12,7 +12,6 @@ require "set"
# Only require "core_ext" here to ensure we're only requiring the minimum of # Only require "core_ext" here to ensure we're only requiring the minimum of
# what we need. # what we need.
require "extend/blank"
require "active_support/core_ext/array/access" require "active_support/core_ext/array/access"
require "active_support/core_ext/enumerable" require "active_support/core_ext/enumerable"
require "active_support/core_ext/file/atomic" require "active_support/core_ext/file/atomic"
@ -75,6 +74,7 @@ HOMEBREW_PULL_OR_COMMIT_URL_REGEX =
HOMEBREW_BOTTLES_EXTNAME_REGEX = /\.([a-z0-9_]+)\.bottle\.(?:(\d+)\.)?tar\.gz$/.freeze HOMEBREW_BOTTLES_EXTNAME_REGEX = /\.([a-z0-9_]+)\.bottle\.(?:(\d+)\.)?tar\.gz$/.freeze
require "extend/module" require "extend/module"
require "extend/blank"
require "env_config" require "env_config"
require "macos_version" require "macos_version"
require "os" require "os"