Sha256: be9326e549ee3c0cfe063ca2e8cc3dc1a162c722a3c607c6c1c33ab133ec3982

Contents?: true

Size: 797 Bytes

Versions: 2

Compression:

Stored size: 797 Bytes

Contents

class Some
  include Option

  attr_reader :value

  def initialize(value)
    @value = value
  end

  def each &block
    value.is_a?(Array) ? value.each(&block) : block.call(value)
  end

  def none?(&block)
    block.nil? ? false : super
  end

  def value_or(default=nil)
    value
  end

  def some?(type=value.class)
    value.class == type
  end

  def & other
    other.and_option(self)
  end

  def == other
    other.is_a?(Some) && value == other.value
  end

  def | other
    self
  end

  def merge(other, &block)
    other.match do |m|
      m.some { |v| block.nil? ? Some[*value, v] : Some[block.call(value, v)] }
      m.none { self }
    end
  end

  def to_s
    "Some[#{value.inspect}]"
  end

  def self.[](*values)
    new(values.size == 1 ? values.first : values)
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
optional-0.0.5 lib/optional/some.rb
optional-0.0.4 lib/optional/some.rb