Class: Simple::Liquid

Inherits:
Object
  • Object
show all
Defined in:
lib/simple/liquid.rb

Defined Under Namespace

Classes: Error

Constant Summary collapse

VERSION =
'1.1.0'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(template, object = {}, filters = []) ⇒ Liquid

Returns a new instance of Liquid.



14
15
16
17
18
# File 'lib/simple/liquid.rb', line 14

def initialize(template, object = {}, filters = [])
  @template = template
  @object = deep_stringify_keys(object.to_h)
  @filters = filters
end

Instance Attribute Details

#filtersObject (readonly)

Returns the value of attribute filters.



12
13
14
# File 'lib/simple/liquid.rb', line 12

def filters
  @filters
end

#objectObject (readonly)

Returns the value of attribute object.



12
13
14
# File 'lib/simple/liquid.rb', line 12

def object
  @object
end

#templateObject (readonly)

Returns the value of attribute template.



12
13
14
# File 'lib/simple/liquid.rb', line 12

def template
  @template
end

Class Method Details

.render(template, object = {}, filters = []) ⇒ Object



20
21
22
# File 'lib/simple/liquid.rb', line 20

def self.render(template, object = {}, filters = [])
  new(template, object, filters).render
end

Instance Method Details

#liquid_templateObject



24
25
26
# File 'lib/simple/liquid.rb', line 24

def liquid_template
  @liquid_template ||= ::Liquid::Template.parse(template, error_mode: :strict)
end

#raise_if_errors!Object

Raises:



37
38
39
40
41
42
# File 'lib/simple/liquid.rb', line 37

def raise_if_errors!
  errors = liquid_template.errors
  return if errors.empty?
  messages = errors.map { |error| error.message.gsub('Liquid error:', '').strip }
  raise Simple::Liquid::Error.new(messages.join(', '))
end

#renderObject



28
29
30
31
32
33
34
35
# File 'lib/simple/liquid.rb', line 28

def render
  liquid_template.render(
    object,
    strict_variables: true,
    strict_filters: true,
    filters: filters
  ).tap { raise_if_errors! }
end