Module: Formidable::Rendering

Included in:
Elements::BasicElement
Defined in:
lib/formidable/rendering.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

RendererNotAssigned =
Class.new(StandardError)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#rendererObject



17
18
19
20
21
22
23
# File 'lib/formidable/rendering.rb', line 17

def renderer
  @renderer ||= begin
    renderer = self.class.default_renderer
    rendering_block = self.class.rendering_block
    renderer.new(self, &rendering_block) unless renderer.nil?
  end
end

Class Method Details

.included(klass) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/formidable/rendering.rb', line 7

def self.included(klass)
  klass.extend(ClassMethods)
  klass.extend Module.new {
    def inherited(subclass)
      subclass.renderer(default_renderer, &rendering_block)
    end
  }
end

Instance Method Details

#renderObject



25
26
27
28
29
30
31
32
33
# File 'lib/formidable/rendering.rb', line 25

def render
  if renderer.nil?
    raise RendererNotAssigned, "You have to assign renderer. You can set default_renderer via #{self.class}.renderer(renderer_class) or you can set renderer per instance via #renderer=(renderer_instance) method."
  elsif renderer && ! renderer.respond_to?(:render)
    raise RendererNotAssigned, "You assigned #{self.renderer.inspect} to the #{self.inspect}, but it doesn't respond to #render method"
  else
    renderer.render
  end
end