module Monkey::Backend

Attributes

available_backends[R]
backend[R]

Public Class Methods

backend=(backend) click to toggle source
Alias for: setup!
detect_backend(backend_or_name) click to toggle source
# File lib/monkey/backend.rb, line 125
def self.detect_backend(backend_or_name)
  return backend_or_name if backend_or_name.respond_to? :setup
  detected = available_backends.detect do |backend|
    [backend.backend_name.to_s, backend.backend_path.to_s, backend.name.to_s].include? backend_or_name.to_s
  end
  raise ArgumentError, "cannot detect backend #{backend_or_name.inspect}" unless detected
  detected
end
new(backend_name, backend_path = nil, &block) click to toggle source
# File lib/monkey/backend.rb, line 77
def self.new(backend_name, backend_path = nil, &block)
  mod = eval "module #{backend_name}; self; end"
  mod.extend AbstractBackend
  backend_path ||= backend_name.to_s.downcase
  mod.backend_name, mod.backend_path = backend_name.to_s, backend_path.to_s
  available_backends << mod
  if block
    eigenclass = class << mod; self; end
    eigenclass.class_eval(&block)
  end
  mod
end
preferred_backend() click to toggle source
# File lib/monkey/backend.rb, line 90
def self.preferred_backend
  available_backends.detect { |b| b.available? } || @backend
end
setup() click to toggle source
# File lib/monkey/backend.rb, line 121
def self.setup
  setup! preferred_backend unless setup?
end
setup!(backend) click to toggle source
# File lib/monkey/backend.rb, line 98
def self.setup!(backend)
  if backend
    @setup = true
    @backend = detect_backend(backend)
    @backend.setup
    @backend
  else
    available_backends.each do |backend|
      begin
        return setup!(backend)
      rescue LoadError => error
        @load_error ||= error
        @backend = nil
      end
    end  
    raise @load_error
  end
end
Also aliased as: backend=
setup?() click to toggle source
# File lib/monkey/backend.rb, line 94
def self.setup?
  !!@setup
end