Module: Designer::DesignerHelper

Defined in:
app/helpers/designer/designer_helper.rb

Instance Method Summary collapse

Instance Method Details

#designer_attachment(image_key) ⇒ Object



39
40
41
# File 'app/helpers/designer/designer_helper.rb', line 39

def designer_attachment image_key
  ActiveStorage::Attachment.joins(:blob).where(active_storage_blobs: {key: image_key}).first
end

#designer_content(text, context = {}) ⇒ Object

Render input text embeds and ERB



44
45
46
47
48
# File 'app/helpers/designer/designer_helper.rb', line 44

def designer_content text, context={}
  return if text.blank?
  ApplicationController.render inline: text,
      assigns: { _resource: designer_resource }.merge(context)
end

#designer_element_options(element) ⇒ Object



32
33
34
35
36
37
# File 'app/helpers/designer/designer_helper.rb', line 32

def designer_element_options element
  element.symbolize_keys!
  options = {}
  options.merge!(element[:values]) if element[:values]
  options.symbolize_keys
end

#designer_embed(element_id) ⇒ Object



3
4
5
6
7
8
# File 'app/helpers/designer/designer_helper.rb', line 3

def designer_embed element_id
  element = designer_resource.elements.find{|x| x['id'] == element_id }
  return "Cannot find element `#{element_id}`" unless element

  designer_render element
end

#designer_markdown(text, options = {}) ⇒ Object

Render input text as markdown



51
52
53
54
55
56
57
58
# File 'app/helpers/designer/designer_helper.rb', line 51

def designer_markdown text, options = {}
  return if text.blank?
  Kramdown::Document.new(text, {
    syntax_highlighter_opts: {
      line_numbers: nil
    }
  }.merge(options)).to_html
end

#designer_option(key) ⇒ Object



78
79
80
81
82
# File 'app/helpers/designer/designer_helper.rb', line 78

def designer_option key
  Designer.configuration[designer_resource_name][key]
rescue
  raise "Mismatch designer option `#{val}` for `#{designer_resource_name}`"
end

#designer_preview_pathObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/helpers/designer/designer_helper.rb', line 60

def designer_preview_path
  path = designer_option(:preview_path) || ':resource_name/:id'
  path_parts = path.split('/')
  path_parts.map! do |part|
    if part[0] == ':'
      param = part[1..-1]
      if params[param]
        params[param]
      else
        designer_resource.send(param)
      end
    else
      part
    end
  end
  path_parts.join('/')
end

#designer_render(element) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'app/helpers/designer/designer_helper.rb', line 10

def designer_render element
  element = element.symbolize_keys
  template_path = designer_option(:elements_template_path)
  if lookup_context.exists?(element[:template], designer_option(:elements_template_path), true)
    render "#{template_path}/#{element[:template]}", designer_element_options(element)
  elsif lookup_context.exists?(element[:template], 'designer/elements', true)
    render "designer/elements/#{element[:template]}", designer_element_options(element)
  else
    raise "Missing designer template `#{element[:template]}`"
  end
end

#designer_render_resource(resource) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'app/helpers/designer/designer_helper.rb', line 22

def designer_render_resource resource
  return unless resource&.elements
  designer_set_resource resource
  resource.elements.each_with_object('') do |element, html|
    next if element['hidden'] || element[:hidden]
    result = designer_render element
    html << result if result
  end.html_safe
end

#designer_resourceObject



92
93
94
# File 'app/helpers/designer/designer_helper.rb', line 92

def designer_resource
  @_resource || @resource
end

#designer_resource_nameObject



84
85
86
# File 'app/helpers/designer/designer_helper.rb', line 84

def designer_resource_name
  designer_resource&.model_name&.route_key || params[:resource_name]
end

#designer_set_resource(resource) ⇒ Object



88
89
90
# File 'app/helpers/designer/designer_helper.rb', line 88

def designer_set_resource resource
  @_resource = resource
end