editmode 0.0.10.1 → 0.0.10.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/editmode_controller.rb +4 -0
- data/lib/editmode.rb +14 -28
- data/lib/editmode/action_view_extensions/editmode_helper.rb +22 -0
- data/lib/editmode/chunk_value.rb +71 -0
- data/lib/editmode/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e17da0620f2d013a83300d7984ace6b9badd0716bc3187b1125fe7497e8c99a0
|
4
|
+
data.tar.gz: 39e552edd8fc95c2ba238b0fe7575432603b4e6f7e7e46328c5ff5836987ce31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff2bd59f92ff2389577e23888d092f1097daebc95e4f6e8cd56c3ce5df1e2dd6221705849301a0b6865a3fac8709530d6198d4a04137e9496720bac6b715f376
|
7
|
+
data.tar.gz: 69e56b6950e2e8c2f1907b7fd4a2c9626cf5b4777ddceadc720a002efbc15d1a6b3ae041117841e7b8c3351c3af825d12fcd558345ac5a8d49e53e727caf235d
|
@@ -4,6 +4,10 @@ class EditmodeController < ApplicationController
|
|
4
4
|
if params[:full]
|
5
5
|
Rails.cache.clear
|
6
6
|
render status: 200, json: {:response => "success"}
|
7
|
+
elsif params[:variable_cache_project_id]
|
8
|
+
project_id = params[:variable_cache_project_id]
|
9
|
+
Rails.cache.delete("chunk_#{project_id}_variables")
|
10
|
+
render status: 200, json: {:response => "success"}
|
7
11
|
elsif params[:identifier]
|
8
12
|
Rails.cache.delete("chunk_#{params[:identifier]}")
|
9
13
|
Rails.cache.delete("chunk_#{params[:identifier]}_type")
|
data/lib/editmode.rb
CHANGED
@@ -3,12 +3,14 @@ require "editmode/version"
|
|
3
3
|
require 'editmode/script_tag'
|
4
4
|
require 'editmode/action_view_extensions/editmode_helper'
|
5
5
|
require 'editmode/auto_include_filter'
|
6
|
+
require 'editmode/chunk_value'
|
6
7
|
require 'editmode/railtie' if defined? Rails
|
7
8
|
require 'editmode/engine' if defined?(Rails)
|
8
|
-
|
9
|
+
# Todo: Implement RSPEC
|
9
10
|
module Editmode
|
10
11
|
class << self
|
11
12
|
include Editmode::ActionViewExtensions::EditmodeHelper
|
13
|
+
|
12
14
|
def project_id=(id)
|
13
15
|
config.project_id = id
|
14
16
|
end
|
@@ -22,8 +24,6 @@ module Editmode
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def config
|
25
|
-
# Todo: Instantiate in editmode initializer or base controllers
|
26
|
-
# Todo: Add a generator to create initializer an file?
|
27
27
|
@config ||= Configuration.new
|
28
28
|
end
|
29
29
|
|
@@ -32,36 +32,22 @@ module Editmode
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def chunk_value(identifier, **options)
|
35
|
-
body = options[:values].presence || {}
|
36
|
-
field_id = options[:field_id].presence
|
37
|
-
branch_id = options[:branch_id].presence
|
38
|
-
|
39
|
-
branch_params = branch_id.present? ? "branch_id=#{branch_id}" : ""
|
40
|
-
cache_identifier = "chunk_#{identifier}#{branch_id}"
|
41
|
-
url = "#{api_root_url}/chunks/#{identifier}?#{branch_params}"
|
42
|
-
|
43
35
|
begin
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
raise "No response received"
|
49
|
-
else
|
50
|
-
if field_id.present?
|
51
|
-
chunk = response["content"].detect {|f| f["custom_field_identifier"] == field_id }
|
52
|
-
chunk['content']
|
53
|
-
else
|
54
|
-
response['content']
|
55
|
-
end
|
56
|
-
end
|
57
|
-
rescue => error
|
58
|
-
# Todo: Send a log to editmode prob like sentry
|
59
|
-
return "No response received"
|
36
|
+
options.merge!(project_id: project_id)
|
37
|
+
Editmode::ChunkValue.new(identifier, **options )
|
38
|
+
rescue => er
|
39
|
+
raise er
|
60
40
|
end
|
61
41
|
end
|
62
42
|
end
|
63
43
|
|
64
44
|
class Configuration
|
65
|
-
attr_accessor :
|
45
|
+
attr_accessor :access_token, :variable
|
46
|
+
attr_reader :project_id
|
47
|
+
|
48
|
+
def project_id=(id)
|
49
|
+
@project_id = id
|
50
|
+
|
51
|
+
end
|
66
52
|
end
|
67
53
|
end
|
@@ -133,6 +133,28 @@ module Editmode
|
|
133
133
|
|
134
134
|
alias_method :chunk, :chunk_display
|
135
135
|
|
136
|
+
def variable_parse!(content, variables, values)
|
137
|
+
tokens = content.scan(/\{{(.*?)\}}/)
|
138
|
+
if tokens.any?
|
139
|
+
tokens.flatten!
|
140
|
+
tokens.each do |token|
|
141
|
+
token_value = values[token.to_sym] || variables[token] || ""
|
142
|
+
sanitized_value = ActionController::Base.helpers.sanitize(token_value)
|
143
|
+
|
144
|
+
content.gsub!("{{#{token}}}", sanitized_value)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
content
|
149
|
+
end
|
150
|
+
|
151
|
+
def no_response_received(id = "")
|
152
|
+
"Sorry, we can't find a content using this identifier: \"#{id}\""
|
153
|
+
end
|
154
|
+
|
155
|
+
def require_field_id
|
156
|
+
"Field ID or Field Name is required to retrieve a collection item"
|
157
|
+
end
|
136
158
|
end
|
137
159
|
end
|
138
160
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Editmode
|
2
|
+
class ChunkValue
|
3
|
+
include Editmode::ActionViewExtensions::EditmodeHelper
|
4
|
+
|
5
|
+
attr_accessor :identifier, :variable_values, :branch_id,
|
6
|
+
:variable_fallbacks, :chunk_type, :project_id,
|
7
|
+
:content
|
8
|
+
|
9
|
+
def initialize(identifier, **options)
|
10
|
+
@identifier = identifier
|
11
|
+
@branch_id = options[:branch_id].presence
|
12
|
+
@project_id = options[:project_id].presence
|
13
|
+
@variable_values = options[:values].presence || {}
|
14
|
+
get_content
|
15
|
+
end
|
16
|
+
|
17
|
+
def field(field = nil)
|
18
|
+
# Field ID can be a slug or field_name
|
19
|
+
if chunk_type == 'collection_item'
|
20
|
+
if field.present?
|
21
|
+
field_content = content.detect {|f| f["custom_field_identifier"] == field || f["custom_field_name"] == field }
|
22
|
+
if field_content.present?
|
23
|
+
result = field_content['content']
|
24
|
+
result = variable_parse!(result, variable_fallbacks, variable_values)
|
25
|
+
else
|
26
|
+
raise no_response_received(field)
|
27
|
+
end
|
28
|
+
else
|
29
|
+
raise require_field_id
|
30
|
+
end
|
31
|
+
else
|
32
|
+
raise "undefined method field for chunk_type: #{chunk_type}"
|
33
|
+
end
|
34
|
+
result ||= content
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
def get_content
|
39
|
+
branch_params = branch_id.present? ? "branch_id=#{branch_id}" : ""
|
40
|
+
url = "#{api_root_url}/chunks/#{identifier}?#{branch_params}"
|
41
|
+
|
42
|
+
cache_identifier = "chunk_#{identifier}#{branch_id}"
|
43
|
+
cached_content_present = Rails.cache.exist?(cache_identifier)
|
44
|
+
cached_content_present = Rails.cache.exist?("chunk_#{project_id}_variables") if cached_content_present
|
45
|
+
|
46
|
+
if !cached_content_present
|
47
|
+
response = HTTParty.get(url)
|
48
|
+
response_received = true if response.code == 200
|
49
|
+
end
|
50
|
+
|
51
|
+
if !cached_content_present && !response_received
|
52
|
+
raise no_response_received(identifier)
|
53
|
+
else
|
54
|
+
@content = Rails.cache.fetch(cache_identifier) do
|
55
|
+
response['content']
|
56
|
+
end
|
57
|
+
|
58
|
+
@chunk_type = Rails.cache.fetch("#{cache_identifier}_type") do
|
59
|
+
response['chunk_type']
|
60
|
+
end
|
61
|
+
|
62
|
+
# Since variables are defined in the project level,
|
63
|
+
# We use project_id as cache identifier
|
64
|
+
@variable_fallbacks = Rails.cache.fetch("chunk_#{project_id}_variables") do
|
65
|
+
response['variable_fallbacks']
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
data/lib/editmode/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: editmode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.10.
|
4
|
+
version: 0.0.10.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Ennis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/editmode.rb
|
83
83
|
- lib/editmode/action_view_extensions/editmode_helper.rb
|
84
84
|
- lib/editmode/auto_include_filter.rb
|
85
|
+
- lib/editmode/chunk_value.rb
|
85
86
|
- lib/editmode/engine.rb
|
86
87
|
- lib/editmode/railtie.rb
|
87
88
|
- lib/editmode/script_tag.rb
|