Class: Alephant::MultiRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/alephant/models/multi_renderer.rb

Constant Summary collapse

DEFAULT_LOCATION =
'components'

Instance Method Summary collapse

Constructor Details

#initialize(component_id, view_base_path = nil) ⇒ MultiRenderer

Returns a new instance of MultiRenderer.



5
6
7
8
9
# File 'lib/alephant/models/multi_renderer.rb', line 5

def initialize(component_id, view_base_path=nil)
  self.base_path = "#{view_base_path}/#{component_id}" unless view_base_path.nil?
  @component_id = component_id
  @logger = ::Alephant.logger
end

Instance Method Details

#base_pathObject



11
12
13
# File 'lib/alephant/models/multi_renderer.rb', line 11

def base_path
  @base_path || DEFAULT_LOCATION
end

#base_path=(path) ⇒ Object



15
16
17
# File 'lib/alephant/models/multi_renderer.rb', line 15

def base_path=(path)
  @base_path = File.directory?(path) ? path : (raise Errors::InvalidViewPath)
end

#create_instance(template_file, data) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/alephant/models/multi_renderer.rb', line 46

def create_instance(template_file, data)
  begin
    create_model(template_file, data)
  rescue Exception => e
    @logger.error("MultiRenderer.create_instance: exeception #{e.message}")
    raise Errors::ViewModelNotFound
  end
end

#render(data) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/alephant/models/multi_renderer.rb', line 19

def render(data)
  template_locations.reduce({}) do |obj, file|
    template_id = template_id_for file
    @logger.info("MultiRenderer.render: attempting to render #{template_id}")

    obj.tap do |o|
      o[template_id.to_sym] = render_template(
        template_id,
        data
      )
    end
  end
end

#render_template(template_file, data) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/alephant/models/multi_renderer.rb', line 33

def render_template(template_file, data)
  @logger.info("MultiRenderer.render_template: rendering template #{template_file} (base_path: #{base_path})")
  renderer(
    template_file,
    base_path,
    data
  ).render
end

#renderer(template_file, base_path, data) ⇒ Object



42
43
44
# File 'lib/alephant/models/multi_renderer.rb', line 42

def renderer(template_file, base_path, data)
  Renderer.new(template_file, base_path, create_instance(template_file, data))
end