module Charty::Backends

Public Class Methods

current() click to toggle source
# File lib/charty/backends.rb, line 11
def self.current
  @current
end
current=(backend_name) click to toggle source
# File lib/charty/backends.rb, line 15
def self.current=(backend_name)
  backend_class = Backends.find_backend_class(backend_name)
  @current = backend_class.new
end
find_backend_class(name) click to toggle source
# File lib/charty/backends.rb, line 44
def self.find_backend_class(name)
  backend = @backends[normalize_name(name)]
  unless backend
    raise BackendNotFoundError, "Backend is not found: #{name.inspect}"
  end
  backend_class = backend[:class]
  unless backend[:prepared]
    if backend_class.respond_to?(:prepare)
      begin
        backend_class.prepare
      rescue LoadError
        raise BackendLoadError, "Backend load error: #{name.inspect}"
      end
    end
    backend[:prepared] = true
  end
  backend_class
end
names() click to toggle source
# File lib/charty/backends.rb, line 33
def self.names
  @backends.keys
end
register(name, backend_class) click to toggle source
# File lib/charty/backends.rb, line 37
def self.register(name, backend_class)
  @backends[normalize_name(name)] = {
    class: backend_class,
    prepared: false,
  }
end
use(backend) { || ... } click to toggle source
# File lib/charty/backends.rb, line 20
def self.use(backend)
  if block_given?
    begin
      saved, self.current = self.current, backend
      yield
    ensure
      self.current = saved
    end
  else
    self.current = backend
  end
end

Private Class Methods

normalize_name(name) click to toggle source
# File lib/charty/backends.rb, line 63
                     def self.normalize_name(name)
  case name
  when Symbol
    name.to_s
  else
    name.to_str
  end
end