Class: Liquidbook::ThemeRenderer
- Inherits:
-
Object
- Object
- Liquidbook::ThemeRenderer
- Defined in:
- lib/liquidbook/theme_renderer.rb
Overview
Renders a Liquid template with mock data and Shopify-compatible tags/filters
Instance Method Summary collapse
-
#initialize(theme_root: nil) ⇒ ThemeRenderer
constructor
A new instance of ThemeRenderer.
-
#render_section(name, overrides: {}) ⇒ Object
Render a section file by name.
-
#render_snippet(name, overrides: {}) ⇒ Object
Render a snippet file by name, with optional parameter overrides.
-
#render_source(source, section: false, snippet_params: {}, overrides: {}) ⇒ Object
Render raw Liquid source.
-
#sections ⇒ Object
List available sections.
-
#snippet_params(name) ⇒ Object
Extract merged parameter definitions for a snippet.
-
#snippets ⇒ Object
List available snippets.
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
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
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 |
#sections ⇒ Object
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 |
#snippets ⇒ Object
List available snippets
71 72 73 |
# File 'lib/liquidbook/theme_renderer.rb', line 71 def snippets list_templates("snippets") end |