Class: LiquidResponse::ViewHelper::LiquidBuffer

Inherits:
Object
  • Object
show all
Defined in:
lib/liquid_response/view_helper.rb

Defined Under Namespace

Classes: LiquidVariable

Instance Method Summary collapse

Constructor Details

#initializeLiquidBuffer

Returns a new instance of LiquidBuffer.



41
42
43
# File 'lib/liquid_response/view_helper.rb', line 41

def initialize
  @lines = []
end

Instance Method Details

#assign_liquid(variable, value) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/liquid_response/view_helper.rb', line 59

def assign_liquid(variable, value)
  LiquidVariable.validate_name!(variable)

  if value.is_a?(Hash)
    value = "null | default: #{liquid_arguments(value, variable)}"
  else
    value = liquid_value(value, variable)
  end

  line "{% assign #{variable} = #{value} %}"
end

#line(liquid_line) ⇒ Object



45
46
47
48
# File 'lib/liquid_response/view_helper.rb', line 45

def line(liquid_line)
  @lines << liquid_line
  nil
end

#liquid_arguments(assigns, _base_name = nil) ⇒ Object



71
72
73
# File 'lib/liquid_response/view_helper.rb', line 71

def liquid_arguments(assigns, _base_name = nil)
  assigns.map { |k, v| "#{k}: #{liquid_value(v, k.to_s)}" }.join(", ")
end

#liquid_value(value, variable_name = nil) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/liquid_response/view_helper.rb', line 75

def liquid_value(value, variable_name = nil)
  if value.respond_to?(:as_liquid)
    value = value.as_liquid
  elsif value.respond_to?(:serializable_hash)
    value = value.serializable_hash
  end

  value = case value
  when String, Numeric, TrueClass, FalseClass, NilClass, Date, Time, Symbol
    value.to_json
  when LiquidVariable
    value.name
  when Hash
    assign_name = LiquidVariable.random("h_#{variable_name}").name
    assign_liquid(assign_name, value)
    assign_name
  else
    raise UnsupportedValueError.new(value, variable_name)
  end
  value.html_safe
end

#render_liquid(name, **assigns) ⇒ Object



54
55
56
57
# File 'lib/liquid_response/view_helper.rb', line 54

def render_liquid(name, **assigns)
  assigns_liquid = ", #{liquid_arguments(assigns)}" unless assigns.blank?
  line "{% render #{name.to_s.to_json}#{assigns_liquid} %}"
end

#to_sObject



50
51
52
# File 'lib/liquid_response/view_helper.rb', line 50

def to_s
  @lines.join("\n").html_safe
end