Class: Liquidbook::ThemeRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/liquidbook/theme_renderer.rb

Overview

Renders a Liquid template with mock data and Shopify-compatible tags/filters

Instance Method Summary collapse

Constructor Details

#initialize(theme_root: nil) ⇒ ThemeRenderer

Returns a new instance of ThemeRenderer.



6
7
8
9
# File 'lib/liquidbook/theme_renderer.rb', line 6

def initialize(theme_root: nil)
  @theme_root = theme_root || Liquidbook.root
  @mock_data = MockData.new(theme_root: @theme_root)
end

Instance Method Details

#render_section(name, overrides: {}) ⇒ Object

Render a section file by name

Raises:



12
13
14
15
16
17
18
# File 'lib/liquidbook/theme_renderer.rb', line 12

def render_section(name, overrides: {})
  path = File.join(@theme_root, "sections", "#{name}.liquid")
  raise Error, "Section not found: #{name}" unless File.exist?(path)

  source = File.read(path)
  render_source(source, section: true, overrides: overrides)
end

#render_snippet(name, overrides: {}) ⇒ Object

Render a snippet file by name, with optional parameter overrides

Raises:



21
22
23
24
25
26
27
# File 'lib/liquidbook/theme_renderer.rb', line 21

def render_snippet(name, overrides: {})
  path = File.join(@theme_root, "snippets", "#{name}.liquid")
  raise Error, "Snippet not found: #{name}" unless File.exist?(path)

  source = File.read(path)
  render_source(source, section: false, snippet_params: snippet_defaults(source).merge(overrides))
end

#render_source(source, section: false, snippet_params: {}, overrides: {}) ⇒ Object

Render raw Liquid source



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/liquidbook/theme_renderer.rb', line 30

def render_source(source, section: false, snippet_params: {}, overrides: {})
  parser = SchemaParser.new(source)
  template_source = parser.template_without_schema

  assigns = if section
              @mock_data.with_section(parser)
            else
              @mock_data.to_assigns
            end

  # Merge snippet @param defaults
  assigns.merge!(snippet_params)

  # Merge any overrides from the UI
  assigns.merge!(overrides)

  template = Liquid::Template.parse(template_source, environment: Liquidbook.environment)
  template.render(
    assigns,
    registers: {
      theme_root: @theme_root,
      file_system: theme_file_system
    }
  )
end

#sectionsObject

List available sections



66
67
68
# File 'lib/liquidbook/theme_renderer.rb', line 66

def sections
  list_templates("sections")
end

#snippet_params(name) ⇒ Object

Extract merged parameter definitions for a snippet. Combines TemplateAnalyzer auto-detected variables with @param metadata.



58
59
60
61
62
63
# File 'lib/liquidbook/theme_renderer.rb', line 58

def snippet_params(name)
  path = File.join(@theme_root, "snippets", "#{name}.liquid")
  return [] unless File.exist?(path)

  merged_params(File.read(path))
end

#snippetsObject

List available snippets



71
72
73
# File 'lib/liquidbook/theme_renderer.rb', line 71

def snippets
  list_templates("snippets")
end