Sha256: feffb7880ddf8f2353b0f059e516be54a4bdd7bc9987f37ac1a17fdef4c0761d

Contents?: true

Size: 963 Bytes

Versions: 3

Compression:

Stored size: 963 Bytes

Contents

# frozen_string_literal: true

module ReSorcery
  module Maybe
    class Just
      include Fielded

      field :kind, :just, -> { :just }
      field :value, Decoder.new { true }, -> { @value }

      def initialize(value)
        @value = value
      end

      def and_then(&block)
        ArgCheck['block', block.call(@value), Just, Nothing]
      end

      def map(&block)
        Just.new(block.call(@value))
      end

      def or_else
        self
      end

      def get_or_else
        @value
      end

      def assign(name, &block)
        raise Error::NonHashAssignError, @value unless @value.is_a?(Hash)

        ArgCheck['block', block.call(@value), Just, Nothing]
          .map { |k| @value.merge(name => k) }
      end

      def ==(other)
        other.class == Just && other.instance_eval { @value } == @value
      end

      def as_json(*)
        {
          kind: :just,
          value: @value,
        }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
re_sorcery-0.3.0 lib/re_sorcery/maybe/just.rb
re_sorcery-0.2.0 lib/re_sorcery/maybe/just.rb
re_sorcery-0.1.0 lib/re_sorcery/maybe/just.rb