Sha256: 34f3a4573c129d26fb4c92caa1359b1eb7dccd7150f0d667856d2071a77ace72

Contents?: true

Size: 1.11 KB

Versions: 6

Compression:

Stored size: 1.11 KB

Contents

module Roger
  module Helpers
    # Helper to include the get_callbable method
    module GetCallable
      # Makes callable into a object that responds to call.
      #
      # @param [#call, Symbol, Class] callable If callable already responds to #call will
      #   just return callable, a Symbol will be searched for in the scope parameter, a class
      #   will be instantiated (and checked if it will respond to #call)
      # @param [Hash] map, Mapping to match symbol to a callable
      def get_callable(callable, map)
        return callable if callable.respond_to?(:call)

        callable = map[callable] if callable.is_a?(Symbol) && map.key?(callable)

        callable = callable.new if callable.is_a?(Class)

        if callable.respond_to?(:call)
          callable
        else
          error_message = "Could not resolve #{callable.inspect}. Callable must"
          error_message << "be an object that responds to #call or a symbol that resolve"
          error_message << "to such an object or a class with a #call instance method."
          raise ArgumentError, error_message
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
roger-1.10.0 lib/roger/helpers/get_callable.rb
roger-1.9.1 lib/roger/helpers/get_callable.rb
roger-1.9.0 lib/roger/helpers/get_callable.rb
roger-1.8.0 lib/roger/helpers/get_callable.rb
roger-1.7.2 lib/roger/helpers/get_callable.rb
roger-1.7.1 lib/roger/helpers/get_callable.rb