Sha256: 10d285ab73200469e5665d061d5012c867b99acf8d68f225619b05789060fec8

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

#!/usr/bin/env ruby
# frozen_string_literal: true

# encoding=utf-8

# version 2023-10-02

class FalseClass
  unless defined?(blank?)
    def present?
      true
    end
  end
end

# is the value empty?
#
class String
  unless defined?(blank?)
    def blank?
      empty? || /\A[[:space:]]*\z/.freeze.match?(self)
    end
  end
end

# is the value non-empty?
#
class String
  unless defined?(present?)
    def present?
      !empty?
    end
  end
end

# is the value a non-empty string or a binary?
#
# :reek:ManualDispatch ### temp
class Object
  unless defined?(present?)
    def present?
      case self.class.to_s
      when 'FalseClass', 'TrueClass'
        true
      else
        self && (!respond_to?(:blank?) || !blank?)
      end
    end
  end
end

if $PROGRAM_NAME == __FILE__
  require 'minitest/autorun'

  class TestStringMethods < Minitest::Test
    def test_blank
      assert "".blank?
      assert " ".blank?
      assert "\t\n\r".blank?
      refute "foo".blank?
    end

    def test_present
      assert "foo".present?
      refute "".present?
    end
  end

  class TestObjectMethods < Minitest::Test
    def test_present
      assert "foo".present?
      refute "".present?
      assert Object.new.present?
      assert 123.present?
      assert true.present?
      assert false.present?
      refute nil.present?
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
markdown_exec-1.3.3.5 lib/object_present.rb
markdown_exec-1.3.3.4 lib/object_present.rb
markdown_exec-1.3.3.3 lib/object_present.rb