Sha256: 69db69eedf0c85cf9a1d8490357890d89164f694a9a0689135371f0411f5acd3

Contents?: true

Size: 970 Bytes

Versions: 1

Compression:

Stored size: 970 Bytes

Contents

# frozen_string_literal: true

module Fear
  # @private
  module Utils
    UNDEFINED = Object.new.freeze

    class << self
      def assert_arg_or_block!(method_name, *args)
        unless block_given? ^ !args.empty?
          raise ArgumentError, "##{method_name} accepts either one argument or block"
        end
      end

      def with_block_or_argument(method_name, arg = UNDEFINED, block = nil)
        if block.nil? ^ arg.equal?(UNDEFINED)
          yield(block || arg)
        else
          raise ArgumentError, "#{method_name} accepts either block or partial function"
        end
      end

      def assert_type!(value, *types)
        if types.none? { |type| value.is_a?(type) }
          raise TypeError, "expected `#{value.inspect}` to be of #{types.join(", ")} class"
        end
      end

      def return_or_call_proc(value)
        if value.respond_to?(:call)
          value.()
        else
          value
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fear-1.1.0 lib/fear/utils.rb