Class: Molecule::Renderer

Inherits:
ActionView::PartialRenderer
  • Object
show all
Defined in:
lib/molecule/renderer.rb

Instance Method Summary collapse

Instance Method Details

#find_template(path, locals) ⇒ Object

turn off partial renaming



56
57
58
59
# File 'lib/molecule/renderer.rb', line 56

def find_template(path, locals)
  prefixes = path.include?(?/) ? [] : @lookup_context.prefixes
  @lookup_context.find_template(path, prefixes, false, locals, @details)
end

#molecule_force_set_member(object, member, value) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/molecule/renderer.rb', line 47

def molecule_force_set_member object, member, value
  if object.respond_to?("#{member}=")
    object.public_send("#{member}=", value)
  else
    object.instance_variable_set("@#{member}", value)
  end
end

#molecule_prefixObject

path for current molecule



71
72
73
# File 'lib/molecule/renderer.rb', line 71

def molecule_prefix
  "#{@options[:molecule].to_s}/views"
end

#molecule_template_pathObject

molecules path



66
67
68
# File 'lib/molecule/renderer.rb', line 66

def molecule_template_path
  Rails.root.join('app', 'molecules')
end

#molecule_view_pathsObject



61
62
63
# File 'lib/molecule/renderer.rb', line 61

def molecule_view_paths
  ::ActionView::PathSet.new([molecule_template_path])
end

#partial_path(object = nil, view = nil) ⇒ Object

default template entrypoint



76
77
78
# File 'lib/molecule/renderer.rb', line 76

def partial_path object = nil, view = nil
  'index'
end

#render(context, &block) ⇒ Object

narrow template lookup path to the provided molecule



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/molecule/renderer.rb', line 9

def render context, &block
  @@stack ||= ::Molecule::Stack.new
  with_member_override(:view_paths, molecule_view_paths) do
    with_member_override(:prefixes, [molecule_prefix]) do
      with_dependency_check(@options[:molecule]) do
        with_new_molecule(@options[:molecule]) do
          result = super(@options[:molecule], context, block).body
        end
      end
    end
  end
end

#with_dependency_check(name, &block) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/molecule/renderer.rb', line 31

def with_dependency_check name, &block
  if !@@stack.empty? && ::Molecule.config.verify_children?
    unless @@stack.current_molecule.has_child?(name.to_s)
      raise "requested molecule (#{name}) is not configured as a child of current molecule (#{@@stack.current_molecule.name})"
    end
  end
  yield
end

#with_member_override(member, override, &block) ⇒ Object

override a member of lookup_context



23
24
25
26
27
28
29
# File 'lib/molecule/renderer.rb', line 23

def with_member_override member, override, &block
  old_value = @lookup_context.public_send(member)
  molecule_force_set_member(@lookup_context, member, override)
  yield
ensure
  molecule_force_set_member(@lookup_context, member, old_value)
end

#with_new_molecule(name) ⇒ Object



40
41
42
43
44
45
# File 'lib/molecule/renderer.rb', line 40

def with_new_molecule name
  @@stack.push(::Molecule::Molecule.read(name))
  yield
ensure
  @@stack.pop
end