module Occi::Core::Helpers::Renderable

Introduces rendering capabilities to every receiver class. Short-hand `to_<format>` methods are automatically generated for every available rendering `format`. The renderability is evaluated in runtime, when calling `render` or one of the `to_<format>` methods.

@author Boris Parak <parak@cesnet.cz>

Constants

RENDERER_FACTORY_CLASS

Default renderer factory class

Public Class Methods

extended(base) click to toggle source

Allows calling `.extend(Renderable)` on instances. Does not allow class-based extension, will raise a `RuntimeError` error.

@example

o = Object.new
o.extend Renderable
o.to_text  # => String

@param base [Class, Object] class or object being extended

# File lib/occi/core/helpers/renderable.rb, line 72
def self.extended(base)
  base.is_a?(Class) ? raise("#{self} cannot extend #{base}") : included(base.class)
end
included(base) click to toggle source

Adds available rendering formats as `to_<format>` methods on the receiver.

@example

class Test
  include Occi::Core::Helpers::Renderable
end

t = Test.new
t.to_text   # => String

@param base [Class] class receiving this module

# File lib/occi/core/helpers/renderable.rb, line 56
def self.included(base)
  renderer_factory.formats.each do |format|
    base.logger.debug "Adding support for format #{format} to #{base}" if base.respond_to?(:logger)
    base.send(:define_method, "to_#{format}", proc { render(format) })
  end
end
renderer_factory() click to toggle source

Returns pre-constructed instance of the active renderer factory providing access to registered renderers.

@return [Object] instance of the renderer factory

# File lib/occi/core/helpers/renderable.rb, line 80
def self.renderer_factory
  renderer_factory_class.instance
end
renderer_factory_class() click to toggle source

Provides access to the default renderer factory class.

@return [Class] renderer factory class

# File lib/occi/core/helpers/renderable.rb, line 87
def self.renderer_factory_class
  RENDERER_FACTORY_CLASS
end

Public Instance Methods

render(format, options = {}) click to toggle source

Renders the receiver into the specified over-the-wire `format`. `format` is automatically injected into `options` and these are then passed (unmodified) to the underlying renderer. See documentation of a specific renderer for details.

@example

render 'text' # => String
render 'json' # => String
render 'headers' # => Hash

@param format [String] over-the-wire format, mandatory @param options [Hash] options passed to the underlying renderer @return [Object] output of the chosen renderer

# File lib/occi/core/helpers/renderable.rb, line 28
def render(format, options = {})
  options[:format] = format
  logger.debug "#{self.class} is being rendered to #{format} with #{options.inspect}" if respond_to?(:logger)
  renderer_for(format).render(self, options)
end
renderer_factory() click to toggle source

Instance proxy to `renderer_factory` instance, see `Renderable::renderer_factory`.

# File lib/occi/core/helpers/renderable.rb, line 40
def renderer_factory
  Renderable.renderer_factory
end
renderer_for(format) click to toggle source

Instance delegate for `RendererFactory#renderer_for`, see `RendererFactory`.

# File lib/occi/core/helpers/renderable.rb, line 35
def renderer_for(format)
  renderer_factory.renderer_for(format)
end