Sha256: 087d1ca5720ebab04bb0ecd9589950647683d2d2596d28d8dbabbbca5cf319f8

Contents?: true

Size: 955 Bytes

Versions: 126

Compression:

Stored size: 955 Bytes

Contents

# frozen_string_literal: true

require "concurrent/map"

class ReeObject::IsBlank
  include Ree::FnDSL

  fn :is_blank

  BLANK_RE = /\A[[:space:]]*\z/

  ENCODED_BLANKS = Concurrent::Map.new do |h, enc|
    h[enc] = Regexp.new(BLANK_RE.source.encode(enc), BLANK_RE.options | Regexp::FIXEDENCODING)
  end

  doc(<<~DOC)
    An object is blank if it's false, empty, or a whitespace string.
    For example, +nil+, '', '   ', [], {}, and +false+ are all blank.
  DOC
  contract(Any => Bool)
  def call(obj)
    return is_string_blank?(obj) if obj.is_a?(String)
    return obj.empty? if obj.is_a?(Array) || obj.is_a?(Hash) || obj.is_a?(Set)
    return true if obj.nil?
    return true if obj == false
    return false if obj == true
    false
  end

  private

  def is_string_blank?(str)
    str.empty? ||
      begin
        BLANK_RE.match?(str)
      rescue Encoding::CompatibilityError
        ENCODED_BLANKS[str.encoding].match?(str)
      end
  end
end

Version data entries

126 entries across 126 versions & 1 rubygems

Version Path
ree_lib-1.1.1 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.1.0 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.124 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.116 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.115 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb