class CiteProc::Engine

@abstract

Attributes

default[W]
subclasses[R]
type[R]
version[R]
processor[RW]

Public Class Methods

autodetect(options = {}) click to toggle source

Returns the best available engine class or nil.

# File lib/citeproc/engine.rb, line 44
def autodetect(options = {})
  load('citeproc-ruby') if subclasses.empty?

  subclasses.detect { |e|
    !options.has_key?(:engine) || e.name == options[:engine] and
    !options.has_key?(:name) || e.name == options[:name]
  } || subclasses.first
end
available() click to toggle source

Returns a list of all available engine names.

# File lib/citeproc/engine.rb, line 61
def available
  subclasses.map(&:engine_name)
end
default() click to toggle source
# File lib/citeproc/engine.rb, line 25
def default
  @default ||= autodetect or warn 'no citeproc engine found'
end
detect(name) { |subclasses| ... } click to toggle source

Returns the engine class for the given name or nil. If no suitable class is found and a block is given, executes the block and returns the result. The list of available engines will be passed to the block.

# File lib/citeproc/engine.rb, line 32
def detect(name)
  subclasses.detect { |e| e.name == name } ||
    block_given? ? yield(subclasses) : nil
end
detect!(name, &block) click to toggle source

Loads the engine with the given name and returns the engine class.

# File lib/citeproc/engine.rb, line 38
def detect!(name, &block)
  load(name)
  block_given? ? detect(name, &block) : detect(name)
end
engine_name() click to toggle source
# File lib/citeproc/engine.rb, line 65
def engine_name
  @name ||= name.gsub(/::/, '-').downcase # returns class name as fallback
end
inherited(subclass) click to toggle source
# File lib/citeproc/engine.rb, line 19
def inherited(subclass)
  subclass.public_class_method :new
  @subclasses << subclass
  @subclasses = subclasses.sort_by { |engine| -1 * engine.priority }
end
load(name) click to toggle source

Loads the engine by requiring the engine name.

# File lib/citeproc/engine.rb, line 54
def load(name)
  require name.gsub(/-/,'/')
rescue LoadError
  warn "failed to load #{name} engine: try to gem install #{name}"
end
new(processor = nil) { |self| ... } click to toggle source
# File lib/citeproc/engine.rb, line 78
def initialize(processor = nil)
  @processor = processor
  yield self if block_given?
end
priority() click to toggle source
# File lib/citeproc/engine.rb, line 69
def priority
  @priority ||= 0
end

Public Instance Methods

append() click to toggle source
# File lib/citeproc/engine.rb, line 93
def append
  raise NotImplementedByEngine
end
bibliography() click to toggle source
# File lib/citeproc/engine.rb, line 97
def bibliography
  raise NotImplementedByEngine
end
inspect() click to toggle source
# File lib/citeproc/engine.rb, line 113
def inspect
  "#<CiteProc::Engine #{name}-#{type}-#{version}>"
end
process() click to toggle source
# File lib/citeproc/engine.rb, line 89
def process
  raise NotImplementedByEngine
end
render() click to toggle source
# File lib/citeproc/engine.rb, line 101
def render
  raise NotImplementedByEngine
end
update_items() click to toggle source
# File lib/citeproc/engine.rb, line 105
def update_items
  raise NotImplementedByEngine
end
update_uncited_items() click to toggle source
# File lib/citeproc/engine.rb, line 109
def update_uncited_items
  raise NotImplementedByEngine
end