Class: Arrolio::Flavor::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/arrolio/flavor/registry.rb

Overview

Flavor registry. Flavors register their pipeline class at load time; applications look up flavors by name. This enables multiple flavors to coexist without the core engine knowing about any of them.

A flavor's pipeline class must respond to:

.render(xml, io:, **opts) — render XML to PDF bytes

Example:

Arrolio::Flavor::Registry.register(:my_flavor, Arrolio::Oiml::Pipeline)
Arrolio::Flavor::Registry.for(:my_flavor).render(xml, io: io)

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.flavorsObject (readonly)

Returns the value of attribute flavors.



20
21
22
# File 'lib/arrolio/flavor/registry.rb', line 20

def flavors
  @flavors
end

Class Method Details

.for(name) ⇒ Object

Look up a registered flavor. Returns the pipeline class or raises if not found.



30
31
32
33
34
35
# File 'lib/arrolio/flavor/registry.rb', line 30

def for(name)
  key = name.to_sym
  @flavors[key] ||
    raise(ArgumentError,
          "Unknown flavor #{name.inspect}; registered: #{@flavors.keys.inspect}")
end

.namesObject

All registered flavor names.



38
39
40
# File 'lib/arrolio/flavor/registry.rb', line 38

def names
  @flavors.keys
end

.register(name, pipeline_class) ⇒ Object

Register a flavor by name. pipeline_class must respond to .render(xml, io:, **opts).



24
25
26
# File 'lib/arrolio/flavor/registry.rb', line 24

def register(name, pipeline_class)
  @flavors[name.to_sym] = pipeline_class
end

.registered?(name) ⇒ Boolean

Is a flavor registered?

Returns:

  • (Boolean)


43
44
45
# File 'lib/arrolio/flavor/registry.rb', line 43

def registered?(name)
  @flavors.key?(name.to_sym)
end

.reset!Object

Clear all registrations — used in specs.



48
49
50
# File 'lib/arrolio/flavor/registry.rb', line 48

def reset!
  @flavors.clear
end