# 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
# 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
# File lib/monkey/backend.rb, line 90 def self.preferred_backend available_backends.detect { |b| b.available? } || @backend end
# File lib/monkey/backend.rb, line 121 def self.setup setup! preferred_backend unless setup? end
# 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
# File lib/monkey/backend.rb, line 94 def self.setup? !!@setup end