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_bool` terms.
["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::Boolean` terms.
[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 ‘object` to boolean using exactly the same logic as `blank?` in Rails does (but with `Hash` instead of `Concurent::Map` for string encodings storage).
-
.boolean?(object) ⇒ Boolean
Returns ‘true` when `object` is `true` or `false`, returns `false` for all the other cases.
-
.false?(object) ⇒ Boolean
Returns ‘true` when `object` is `false`, returns `false` for all the other cases.
-
.present?(object) ⇒ Boolean
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).
-
.to_active_model_boolean_type(object) ⇒ Boolean?
Converts ‘object` to boolean (or `nil`) using exactly the same logic as `ActiveModel::Type::Boolean.new.cast(object)` does.
-
.to_on_or_off(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts ‘object` to `“on”` or `“off”`.
-
.to_one_or_zero(object, by: :to_ruby_bool, unknown: false) ⇒ Integer
Converts ‘object` to `1` or `0`.
-
.to_ruby_bool(object) ⇒ Boolean
(also: to_bool)
Returns ‘false` when `object` is `false` or `nil`.
-
.to_true_or_false(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts ‘object` to `true` or `false`.
-
.to_y_or_n(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts ‘object` to `“y”` or `“n”`.
-
.to_yes_or_no(object, by: :to_ruby_bool, unknown: false) ⇒ String
Converts ‘object` to `“yes”` or `“no”`.
-
.true?(object) ⇒ Boolean
Returns ‘true` when `object` is `true`, returns `false` for all the other cases.
Instance Method Summary collapse
-
#to_env_bool(object) ⇒ Boolean
Converts ‘object` to a boolean by the following logic: - Converts `object` to a string by the `#to_s` method 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 ‘object` to a string by the `#to_s` method 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 converts `object` to an integer by `Kernel.Integer` and checks whether it is greater than zero.
-
If yes, returns ‘true`, otherwise returns `false`.
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 |