module Ramda::Internal::CurriedMethod

Curried Method

Public Instance Methods

curried(name, &block) click to toggle source
# File lib/ramda/internal/curried_method.rb, line 8
def curried(name, &block)
  define_method(name, &curried_method_body(name, block.arity, &block))
end
Also aliased as: curried_method
curried_method(name, &block)
Alias for: curried
curried_method_body(name, arity, &block) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/ramda/internal/curried_method.rb, line 15
def curried_method_body(name, arity, &block)
  Ramda::Internal::FunctionWithArity.call(arity) do |*args|
    begin
      if args.index(Ramda.__)
        replace_placeholder(args, &block).curry
      else
        result = args.empty? ? block : block.call(*args)
        debug_log(name, args, result) if ::Ramda::DEBUG_MODE
        result
      end
    rescue StandardError => e
      ::Ramda.exception_handler.call(e, name)
    end
  end.curry
end
debug_log(name, args, result) click to toggle source
# File lib/ramda/internal/curried_method.rb, line 42
def debug_log(name, args, result)
  puts "-> #{name}(#{args.join(', ')}) # #{result}"
end
replace_placeholder(basic_args, &block) click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/ramda/internal/curried_method.rb, line 32
def replace_placeholder(basic_args, &block)
  Ramda::Internal::FunctionWithArity.call(basic_args.count(Ramda.__)) do |*new_args|
    cloned_args = basic_args.dup
    new_args.each { |arg| cloned_args[cloned_args.index(Ramda.__)] = arg }
    result = block.call(*cloned_args)
    debug_log(name, cloned_args, result) if ::Ramda::DEBUG_MODE
    result
  end
end