Module: Editmode::ActionViewExtensions::EditmodeHelper

Included in:
Editmode, ChunkValue
Defined in:
lib/editmode/action_view_extensions/editmode_helper.rb

Instance Method Summary collapse

Instance Method Details

#api_root_urlObject



11
12
13
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 11

def api_root_url
  ENV["EDITMODE_OVERRIDE_API_URL"] || "https://api.editmode.com"
end

#api_versionObject



7
8
9
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 7

def api_version
  # Todo Add Header Version
end

#chunk_collection(collection_identifier, **options) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 15

def chunk_collection(collection_identifier, **options)
  branch_params = params[:em_branch_id].present? ? "branch_id=#{params[:em_branch_id]}" : ""
  branch_id = params[:em_branch_id].presence
  tags = options[:tags].presence || []
  limit = options[:limit].presence

  begin 
    url_params = { 
      :collection_identifier => collection_identifier,
      :branch_id => branch_id,
      :limit => limit,
      :tags => tags
    }.to_query

    url = URI(api_root_url)
    url.path = '/chunks'
    url.query = url_params

    response = HTTParty.get(url)

    raise "No response received" unless response.code == 200
    chunks = response["chunks"]

    return chunks
  rescue => error
    puts error 
    return []
  end
end

#chunk_display(label, identifier, options = {}, &block) ⇒ Object Also known as: chunk



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 107

def chunk_display(label,identifier,options={},&block)
  branch_id = params[:em_branch_id]
  # This method should never show an error. 
  # If anything goes wrong fetching content
  # We should just show blank content, not
  # prevent the page from loading.
  begin
    branch_params = branch_id.present? ? "branch_id=#{branch_id}" : ""
    cache_identifier = "chunk_#{identifier}#{branch_id}"
    url = "#{api_root_url}/chunks/#{identifier}?#{branch_params}"
    cached_content_present = Rails.cache.exist?(cache_identifier)

    if !cached_content_present
      response = HTTParty.get(url)
      response_received = true if response.code == 200
    end

    if !cached_content_present && !response_received
      raise "No response received"
    else
      
      chunk_content = Rails.cache.fetch(cache_identifier) do  
        response['content']
      end

      chunk_type = Rails.cache.fetch("#{cache_identifier}_type") do  
        response['chunk_type']
      end

      render_chunk_content(identifier,chunk_content,chunk_type, options)

    end

  rescue => error
    # Show fallback content by default
    return ("em-span", &block) if block_given?
    # Otherwise show a span with no content to 
    # maintain layout
    ("em-span", "&nbsp".html_safe) 
  end

end

#chunk_field_value(parent_chunk_object, custom_field_identifier, options = {}) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 45

def chunk_field_value(parent_chunk_object, custom_field_identifier,options={})

  begin 
    chunk_identifier = parent_chunk_object["identifier"]
    custom_field_item = parent_chunk_object["content"].detect {|f| f["custom_field_identifier"] == custom_field_identifier }
  
    if custom_field_item.present?
      render_chunk_content(
        custom_field_item["identifier"],
        custom_field_item["content"],
        custom_field_item["chunk_type"],
        { parent_identifier: chunk_identifier }.merge(options)
      )
    end
  rescue => errors
    puts errors
    (:span, "&nbsp".html_safe) 
  end

end

#no_response_received(id = "") ⇒ Object



167
168
169
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 167

def no_response_received(id = "")
  "Sorry, we can't find a chunk using this identifier: \"#{id}\". This can happen if you've deleted a chunk on editmode.com or if your local cache is out of date. If it persists, try running Rails.cache clear."
end

#render_chunk_content(chunk_identifier, chunk_content, chunk_type, options = {}) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 66

def render_chunk_content(chunk_identifier,chunk_content,chunk_type,options={})

  begin 
    # Always sanitize the content!!
    chunk_content = ActionController::Base.helpers.sanitize(chunk_content)
    
    css_class = options[:class]

    if chunk_type == "image"
      display_type = "image"
    else 
      display_type = options[:display_type] || "span"
    end

    chunk_data = { :chunk => chunk_identifier, :chunk_editable => false, :chunk_type => chunk_type }

    if options[:parent_identifier].present?
      chunk_data.merge!({parent_identifier: options[:parent_identifier]})
    end

    case display_type
    when "span"
      if chunk_type == "rich_text"
        ("em-span", :class => "editmode-richtext-editor #{css_class}", :data => chunk_data.merge!({:chunk_editable => true}) ) do
          chunk_content.html_safe
        end
      else
        ("em-span", :class => css_class, :data => chunk_data.merge!({:chunk_editable => true}) ) do
          chunk_content
        end
      end
    when "image"
      image_tag(chunk_content, :data => chunk_data, :class => css_class) 
    end
  rescue => errors
    puts errors
    ("em-span", "&nbsp".html_safe) 
  end

end

#require_field_idObject



171
172
173
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 171

def require_field_id
  "Field ID or Field Name is required to retrieve a collection item"
end

#variable_parse!(content, variables, values) ⇒ Object



152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/editmode/action_view_extensions/editmode_helper.rb', line 152

def variable_parse!(content, variables, values)
  tokens = content.scan(/\{{(.*?)\}}/)
  if tokens.any?
    tokens.flatten! 
    tokens.each do |token|
      token_value = values[token.to_sym] || variables[token] || ""
      sanitized_value = ActionController::Base.helpers.sanitize(token_value)

      content.gsub!("{{#{token}}}", sanitized_value)
    end
  end

  content
end