Module: SemanticBoolean
- Defined in:
- lib/semantic_boolean.rb,
lib/semantic_boolean/version.rb
Overview
Constant Summary collapse
- TO_ENV_BOOL_TRUE_VALUES =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Truthy values in
SemanticBoolean.to_env_boolterms. ["t", "T", "true", "True", "TRUE", "on", "On", "ON", "y", "Y", "yes", "Yes", "YES"].freeze
- TO_ACTIVE_MODEL_BOOLEAN_TYPE_FALSE_VALUES =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Falsy values in
ActiveModel::Type::Booleanterms. [false, 0, "0", :"0", "f", :f, "F", :F, "false", :false, "FALSE", :FALSE, "off", :off, "OFF", :OFF].to_set.freeze
- ACTIVE_SUPPORT_CORE_EXT_BLANK_RE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Regexp to match falsy string values in Rails
blank?terms. /\A[[:space:]]*\z/- ACTIVE_SUPPORT_CORE_EXT_ENCODED_BLANKS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Cache of regexp objects to match falsy string values in Rails
blank?terms with non-default encodings. ::Hash.new do |h, enc| h[enc] = ::Regexp.new(ACTIVE_SUPPORT_CORE_EXT_BLANK_RE.source.encode(enc), ACTIVE_SUPPORT_CORE_EXT_BLANK_RE. | ::Regexp::FIXEDENCODING) end
- VERSION =
"1.1.0"
Class Method Summary collapse
-
.blank?(object) ⇒ Boolean
Converts
objectto boolean using exactly the same logic asblank?in Rails does (but withHashinstead ofConcurent::Mapfor string encodings storage). -
.boolean?(object) ⇒ Boolean
Returns
truewhenobjectistrueorfalse, returnsfalsefor all the other cases. -
.false?(object) ⇒ Boolean
Returns
truewhenobjectisfalse, returnsfalsefor all the other cases. -
.present?(object) ⇒ Boolean
Converts
objectto boolean using exactly the same logic aspresent?in Rails does (but withHashinstead ofConcurent::Mapfor string encodings storage). -
.to_active_model_boolean_type(object) ⇒ Boolean?
Converts
objectto boolean (ornil) using exactly the same logic asActiveModel::Type::Boolean.new.cast(object)does. -
.to_on_or_off(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts
objectto"on"or"off". -
.to_one_or_zero(object, by: :to_ruby_bool, unknown: false) ⇒ Integer
Converts
objectto1or0. -
.to_ruby_bool(object) ⇒ Boolean
(also: to_bool)
Returns
falsewhenobjectisfalseornil. -
.to_true_or_false(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts
objecttotrueorfalse. -
.to_y_or_n(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts
objectto"y"or"n". -
.to_yes_or_no(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts
objectto"yes"or"no". -
.true?(object) ⇒ Boolean
Returns
truewhenobjectistrue, returnsfalsefor all the other cases.
Instance Method Summary collapse
-
#to_env_bool(object) ⇒ Boolean
Converts
objectto a boolean by the following logic: - Convertsobjectto a string by the#to_smethod and checks whether it is one of["t", "T", "true", "True", "TRUE", "on", "On", "ON", "y", "Y", "yes", "Yes", "YES"].
Class Method Details
.blank?(object) ⇒ Boolean
If performance is a concern, prefer to load Rails (or just activesupport) and use blank? directly.
Converts object to boolean using exactly the same logic as blank? in Rails does (but with Hash instead of Concurent::Map for string encodings storage).
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/semantic_boolean.rb', line 108 def blank?(object) respond_to_blank = begin object.respond_to?(:blank?) rescue ::NoMethodError object.blank? # Only `BasicObject` does NOT respond to `respond_to?`. end return object.__send__(:blank?) if respond_to_blank case object when ::NilClass true when ::FalseClass true when ::TrueClass false when ::Array object.empty? when ::Hash object.empty? when ::Symbol object.empty? when ::String object.empty? || begin ACTIVE_SUPPORT_CORE_EXT_BLANK_RE.match?(object) rescue ::Encoding::CompatibilityError ACTIVE_SUPPORT_CORE_EXT_ENCODED_BLANKS[object.encoding].match?(object) end when ::Numeric false when ::Time false when ::Object object.respond_to?(:empty?) ? !!object.empty? : false else object.blank? end end |
.boolean?(object) ⇒ Boolean
Returns true when object is true or false, returns false for all the other cases.
62 63 64 65 66 67 |
# File 'lib/semantic_boolean.rb', line 62 def boolean?(object) return true if object == true return true if object == false false end |
.false?(object) ⇒ Boolean
Returns true when object is false, returns false for all the other cases.
89 90 91 92 93 |
# File 'lib/semantic_boolean.rb', line 89 def false?(object) return true if object == false false end |
.present?(object) ⇒ Boolean
If performance is a concern, prefer to load Rails (or just activesupport) and use present? directly.
Converts object to boolean using exactly the same logic as present? in Rails does (but with Hash instead of Concurent::Map for string encodings storage).
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/semantic_boolean.rb', line 160 def present?(object) respond_to_present = begin object.respond_to?(:present?) rescue ::NoMethodError object.present? # Only `BasicObject` does NOT respond to `respond_to?`. end return object.__send__(:present?) if respond_to_present return !object.__send__(:blank?) if object.respond_to?(:blank?) case object when ::NilClass false when ::FalseClass false when ::TrueClass true when ::Array !object.empty? when ::Hash !object.empty? when ::Symbol !object.empty? when ::String !( object.empty? || begin ACTIVE_SUPPORT_CORE_EXT_BLANK_RE.match?(object) rescue ::Encoding::CompatibilityError ACTIVE_SUPPORT_CORE_EXT_ENCODED_BLANKS[object.encoding].match?(object) end ) when ::Numeric true when ::Time true when ::Object !( object.respond_to?(:empty?) ? !!object.empty? : false ) else object.present? end end |
.to_active_model_boolean_type(object) ⇒ Boolean?
If performance is a concern, prefer to load Rails (or just activemodel) and use ActiveModel::Type::Boolean.new.cast(object) directly.
Converts object to boolean (or nil) using exactly the same logic as ActiveModel::Type::Boolean.new.cast(object) does.
307 308 309 |
# File 'lib/semantic_boolean.rb', line 307 def to_active_model_boolean_type(object) (object == "") ? nil : !TO_ACTIVE_MODEL_BOOLEAN_TYPE_FALSE_VALUES.include?(object) end |
.to_on_or_off(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts object to "on" or "off".
Uses to_ruby_bool method under the hood.
Accepts optional :by keyword to rely on a different method.
Accepts optional :unknown keyword that specify what to return when object is nil.
429 430 431 432 433 |
# File 'lib/semantic_boolean.rb', line 429 def to_on_or_off(object, by: :to_ruby_bool, unknown: false) return unknown if object.nil? public_send(by, object) ? "on" : "off" end |
.to_one_or_zero(object, by: :to_ruby_bool, unknown: false) ⇒ Integer
Converts object to 1 or 0.
Uses to_ruby_bool method under the hood.
Accepts optional :by keyword to rely on a different method.
Accepts optional :unknown keyword that specify what to return when object is nil.
336 337 338 339 340 |
# File 'lib/semantic_boolean.rb', line 336 def to_one_or_zero(object, by: :to_ruby_bool, unknown: false) return unknown if object.nil? public_send(by, object) ? 1 : 0 end |
.to_ruby_bool(object) ⇒ Boolean Also known as: to_bool
If performance is a concern, prefer to use !! directly.
Returns false when object is false or nil.
Returns true for all the other cases.
Just like Ruby does in the control expressions.
219 220 221 |
# File 'lib/semantic_boolean.rb', line 219 def to_ruby_bool(object) !!object end |
.to_true_or_false(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts object to true or false.
Uses to_ruby_bool method under the hood.
Accepts optional :by keyword to rely on a different method.
Accepts optional :unknown keyword that specify what to return when object is nil.
460 461 462 463 464 |
# File 'lib/semantic_boolean.rb', line 460 def to_true_or_false(object, by: :to_ruby_bool, unknown: false) return unknown if object.nil? public_send(by, object) ? true : false end |
.to_y_or_n(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts object to "y" or "n".
Uses to_ruby_bool method under the hood.
Accepts optional :by keyword to rely on a different method.
Accepts optional :unknown keyword that specify what to return when object is nil.
367 368 369 370 371 |
# File 'lib/semantic_boolean.rb', line 367 def to_y_or_n(object, by: :to_ruby_bool, unknown: false) return unknown if object.nil? public_send(by, object) ? "y" : "n" end |
.to_yes_or_no(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts object to "yes" or "no".
Uses to_ruby_bool method under the hood.
Accepts optional :by keyword to rely on a different method.
Accepts optional :unknown keyword that specify what to return when object is nil.
398 399 400 401 402 |
# File 'lib/semantic_boolean.rb', line 398 def to_yes_or_no(object, by: :to_ruby_bool, unknown: false) return unknown if object.nil? public_send(by, object) ? "yes" : "no" end |
.true?(object) ⇒ Boolean
Returns true when object is true, returns false for all the other cases.
76 77 78 79 80 |
# File 'lib/semantic_boolean.rb', line 76 def true?(object) return true if object == true false end |
Instance Method Details
#to_env_bool(object) ⇒ Boolean
Converts object to a boolean by the following logic:
- Converts
objectto a string by the#to_smethod and checks whether it is one of["t", "T", "true", "True", "TRUE", "on", "On", "ON", "y", "Y", "yes", "Yes", "YES"]. - If yes, returns
true, otherwise it convertsobjectto an integer byKernel.Integerand checks whether it is greater than zero. - If yes, returns
true, otherwise returnsfalse.
rubocop:disable Lint/SuppressedExceptionInNumberConversion
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
# File 'lib/semantic_boolean.rb', line 244 def to_env_bool(object) string = object.to_s return false if string.empty? return true if TO_ENV_BOOL_TRUE_VALUES.include?(string) integer = ::Kernel.Integer(string, exception: false) return false unless integer integer > 0 rescue ::Encoding::CompatibilityError false end |