class RBS::UnitTest::WithAliases::WithEnum

Public Class Methods

new(enum) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 11
      def initialize(enum) = @enum = enum

      def each(&block) = @enum.each(&block)

      def and_nil(&block)
        self.and(nil, &_ = block)
      end

      def but(*cases, &block)
        return WithEnum.new to_enum(__method__ || raise, *cases) unless block

        each do |arg|
          yield arg unless cases.any? { (_ = _1) === arg }
        end
      end

      def and(*args, &block)
        return WithEnum.new to_enum(__method__ || raise, *args) unless block

        each(&block)
        args.each do |arg|
          if WithEnum === arg # use `===` as `arg` might not have `.is_a?` on it
            arg.each(&block)
          else
            block.call(_ = arg)
          end
        end
      end
    end

    def with(*args, &block)
      return WithEnum.new to_enum(__method__ || raise, *args) unless block
      args.each(&block)
    end

    def with_int(value = 3, &block)
      return WithEnum.new to_enum(__method__ || raise, value) unless block
      yield value
      yield ToInt.new(value)
    end

    def with_float(value = 0.1)
      return WithEnum.new to_enum(__method__ || raise, value) unless block_given?
      yield value
      yield ToF.new(value)
    end

    def with_string(value = '')
      return WithEnum.new to_enum(__method__ || raise, value) unless block_given?
      yield value
      yield ToStr.new(value)
    end

    def with_array(*elements)
      return WithEnum.new to_enum(__method__ || raise, *elements) unless block_given?

      yield _ = elements
      yield ToArray.new(*elements)
    end

    def with_hash(hash = {})
      return WithEnum.new to_enum(__method__ || raise, hash) unless block_given?

      yield _ = hash
      yield ToHash.new(hash)
    end

    def with_io(io = $stdout)
      return WithEnum.new to_enum(__method__ || raise, io) unless block_given?
      yield io
      yield ToIO.new(io)
    end

    def with_path(path = "/tmp/foo.txt", &block)
      return WithEnum.new to_enum(__method__ || raise, path) unless block

      with_string(path, &block)
      block.call ToPath.new(path)
    end

    def with_encoding(encoding = Encoding::UTF_8, &block)
      return WithEnum.new to_enum(__method__ || raise, encoding) unless block

      block.call encoding
      with_string(encoding.to_s, &block)
    end

    def with_interned(value = :&, &block)
      return WithEnum.new to_enum(__method__ || raise, value) unless block

      with_string(value.to_s, &block)
      block.call value.to_sym
    end

    def with_bool(&block)
      return WithEnum.new to_enum(__method__ || raise) unless block
      yield true
      yield false
    end

    def with_boolish(&block)
      return WithEnum.new to_enum(__method__ || raise) unless block
      with_bool(&block)
      [nil, 1, Object.new, BlankSlate.new, "hello, world!"].each(&block)
    end

    alias with_untyped with_boolish

    def with_range(start, stop, exclude_end = false)
      # If you need fixed starting and stopping points, you can just do `with_range with(1), with(2)`.
      raise ArgumentError, '`start` must be from a `with` method' unless start.is_a? WithEnum
      raise ArgumentError, '`stop` must be from a `with` method' unless stop.is_a? WithEnum

      start.each do |lower|
        stop.each do |upper|
          yield CustomRange.new(lower, upper, exclude_end)

          # `Range` requires `begin <=> end` to return non-nil, but doesn't actually
          # end up using the return value of it. This is to add that in when needed.
          def lower.<=>(rhs) = :not_nil unless defined? lower.<=>

          # If `lower <=> rhs` is defined but nil, then that means we're going to be constructing
          # an illegal range (eg `3..ToInt.new(4)`). So, we need to skip yielding an invalid range
          # in that case.
          next if defined?(lower.<=>) && nil == (lower <=> upper)

          yield Range.new(lower, upper, exclude_end)
        end
      end
    end
  end
end

Public Instance Methods

and(*args, &block) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 27
def and(*args, &block)
  return WithEnum.new to_enum(__method__ || raise, *args) unless block

  each(&block)
  args.each do |arg|
    if WithEnum === arg # use `===` as `arg` might not have `.is_a?` on it
      arg.each(&block)
    else
      block.call(_ = arg)
    end
  end
end
and_nil(&block) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 15
def and_nil(&block)
  self.and(nil, &_ = block)
end
but(*cases) { |arg| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 19
def but(*cases, &block)
  return WithEnum.new to_enum(__method__ || raise, *cases) unless block

  each do |arg|
    yield arg unless cases.any? { (_ = _1) === arg }
  end
end
each(&block) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 13
  def each(&block) = @enum.each(&block)

  def and_nil(&block)
    self.and(nil, &_ = block)
  end

  def but(*cases, &block)
    return WithEnum.new to_enum(__method__ || raise, *cases) unless block

    each do |arg|
      yield arg unless cases.any? { (_ = _1) === arg }
    end
  end

  def and(*args, &block)
    return WithEnum.new to_enum(__method__ || raise, *args) unless block

    each(&block)
    args.each do |arg|
      if WithEnum === arg # use `===` as `arg` might not have `.is_a?` on it
        arg.each(&block)
      else
        block.call(_ = arg)
      end
    end
  end
end
with(*args, &block) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 41
def with(*args, &block)
  return WithEnum.new to_enum(__method__ || raise, *args) unless block
  args.each(&block)
end
with_array(*elements) { |_ = elements| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 64
def with_array(*elements)
  return WithEnum.new to_enum(__method__ || raise, *elements) unless block_given?

  yield _ = elements
  yield ToArray.new(*elements)
end
with_bool() { |true| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 105
def with_bool(&block)
  return WithEnum.new to_enum(__method__ || raise) unless block
  yield true
  yield false
end
with_boolish(&block) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 111
def with_boolish(&block)
  return WithEnum.new to_enum(__method__ || raise) unless block
  with_bool(&block)
  [nil, 1, Object.new, BlankSlate.new, "hello, world!"].each(&block)
end
with_encoding(encoding = Encoding::UTF_8, &block) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 91
def with_encoding(encoding = Encoding::UTF_8, &block)
  return WithEnum.new to_enum(__method__ || raise, encoding) unless block

  block.call encoding
  with_string(encoding.to_s, &block)
end
with_float(value = 0.1) { |value| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 52
def with_float(value = 0.1)
  return WithEnum.new to_enum(__method__ || raise, value) unless block_given?
  yield value
  yield ToF.new(value)
end
with_hash(hash = {}) { |_ = hash| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 71
def with_hash(hash = {})
  return WithEnum.new to_enum(__method__ || raise, hash) unless block_given?

  yield _ = hash
  yield ToHash.new(hash)
end
with_int(value = 3) { |value| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 46
def with_int(value = 3, &block)
  return WithEnum.new to_enum(__method__ || raise, value) unless block
  yield value
  yield ToInt.new(value)
end
with_interned(value = :&, &block) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 98
def with_interned(value = :&, &block)
  return WithEnum.new to_enum(__method__ || raise, value) unless block

  with_string(value.to_s, &block)
  block.call value.to_sym
end
with_io(io = $stdout) { |io| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 78
def with_io(io = $stdout)
  return WithEnum.new to_enum(__method__ || raise, io) unless block_given?
  yield io
  yield ToIO.new(io)
end
with_path(path = "/tmp/foo.txt", &block) click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 84
def with_path(path = "/tmp/foo.txt", &block)
  return WithEnum.new to_enum(__method__ || raise, path) unless block

  with_string(path, &block)
  block.call ToPath.new(path)
end
with_range(start, stop, exclude_end = false) { |custom_range| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 119
  def with_range(start, stop, exclude_end = false)
    # If you need fixed starting and stopping points, you can just do `with_range with(1), with(2)`.
    raise ArgumentError, '`start` must be from a `with` method' unless start.is_a? WithEnum
    raise ArgumentError, '`stop` must be from a `with` method' unless stop.is_a? WithEnum

    start.each do |lower|
      stop.each do |upper|
        yield CustomRange.new(lower, upper, exclude_end)

        # `Range` requires `begin <=> end` to return non-nil, but doesn't actually
        # end up using the return value of it. This is to add that in when needed.
        def lower.<=>(rhs) = :not_nil unless defined? lower.<=>

        # If `lower <=> rhs` is defined but nil, then that means we're going to be constructing
        # an illegal range (eg `3..ToInt.new(4)`). So, we need to skip yielding an invalid range
        # in that case.
        next if defined?(lower.<=>) && nil == (lower <=> upper)

        yield Range.new(lower, upper, exclude_end)
      end
    end
  end
end
with_string(value = '') { |value| ... } click to toggle source
# File rbs-3.4.0/lib/rbs/unit_test/with_aliases.rb, line 58
def with_string(value = '')
  return WithEnum.new to_enum(__method__ || raise, value) unless block_given?
  yield value
  yield ToStr.new(value)
end