module Rujure::Helpers

Constants

NSPUBLICS
SYMBOL

Public Class Methods

handle_arguments(arguments) click to toggle source
# File lib/rujure/helpers.rb, line 28
def self.handle_arguments(arguments)
  arguments.map do |argument|
    case argument
    when ::Symbol then SYMBOL.invoke(argument.to_s)
    when ::Proc   then Rujure::ProcIFn.new(argument)
    else argument
    end
  end
end
handle_return_value(value) click to toggle source
# File lib/rujure/helpers.rb, line 38
def self.handle_return_value(value)
  case value
  when ::Java::ClojureLang::Symbol then value.to_s.to_sym
  when Rujure::ProcIFn             then value.proc
  else value
  end
end

Public Instance Methods

include_clojure_namespace(namespace, options={}) click to toggle source
# File lib/rujure/helpers.rb, line 3
def include_clojure_namespace(namespace, options={})
  functions = options.fetch(:functions, nil)
  auto_conversion = options.fetch(:auto_conversion, true)

  Rujure.require(namespace)
  NSPUBLICS.invoke(SYMBOL.invoke(namespace.to_s)).each do |function_name, function|
    function_name = function_name.to_s
    next if functions && !functions.include?(function_name)
    method_name = function_name.gsub('-', '_')

    if auto_conversion
      define_method method_name do |*args|
        arguments = Rujure::Helpers.handle_arguments(args)
        value = function.invoke(*arguments)
        Rujure::Helpers.handle_return_value(value)
      end
    else
      define_method method_name do |*args|
        function.invoke(*args)
      end
    end
    module_function method_name
  end
end