Sha256: e4e8ae6f5642ee46c56b12f715c91f2b4851cd18f6daec871c452c583ebfb25a

Contents?: true

Size: 919 Bytes

Versions: 10

Compression:

Stored size: 919 Bytes

Contents

# frozen_string_literal: true

module Kind
  module BasicObject
    def [](value, label: nil)
      STRICT.object_is_a(self, value, label)
    end

    def or_nil(value)
      return value if self === value
    end

    def or_undefined(value)
      or_nil(value) || Undefined
    end

    def or(fallback, value = UNDEFINED)
      return __or_func.(fallback) if UNDEFINED === value

      self === value ? value : fallback
    end

    def value?(value = UNDEFINED)
      return self === value if UNDEFINED != value

      @__is_value ||= ->(tc) { ->(arg) { tc === arg } }.(self)
    end

    def value(arg, default:)
      KIND.value(self, arg, self[default])
    end

    def or_null(value) # :nodoc:
      KIND.nil_or_undefined?(value) ? value : self[value]
    end

    private

      def __or_func
        @__or_func ||= ->(tc, fb, value) { tc === value ? value : tc.or_null(fb) }.curry[self]
      end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
kind-5.10.0 lib/kind/objects/basic_object.rb
kind-5.9.0 lib/kind/objects/basic_object.rb
kind-5.8.1 lib/kind/objects/basic_object.rb
kind-5.8.0 lib/kind/objects/basic_object.rb
kind-5.7.0 lib/kind/objects/basic_object.rb
kind-5.6.0 lib/kind/objects/basic_object.rb
kind-5.5.0 lib/kind/objects/basic_object.rb
kind-5.4.1 lib/kind/objects/basic_object.rb
kind-5.4.0 lib/kind/objects/basic_object.rb
kind-5.3.0 lib/kind/objects/basic_object.rb