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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1dc05bbec2b009d428193136bed21d4691a02b7aa21ce14d791d0b903cc4776d
4
- data.tar.gz: f3eccd293ed87c3f3b6755ff87bb129cdf9a202fb205d453dd968d23b97f527c
3
+ metadata.gz: e17da0620f2d013a83300d7984ace6b9badd0716bc3187b1125fe7497e8c99a0
4
+ data.tar.gz: 39e552edd8fc95c2ba238b0fe7575432603b4e6f7e7e46328c5ff5836987ce31
5
5
  SHA512:
6
- metadata.gz: 9935316b3dc3bbd2f170f1797c7b04dc1b83f23e1161ecc77a07fde824fae2fc1f0cf57742d8942fc6da1d831dc96ed1703ebfbd7dff886f0838a73adc26d7b3
7
- data.tar.gz: d52d827d63a9db3046072c62add60d934b30833374593db1e97706b729b1b4b20cc34c17cd064d988c985df94cdac4a416451486820e11e824a0950e2359effe
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")
@@ -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
- response = HTTParty.get(url, query: body)
45
- response_received = true if response.code == 200
46
-
47
- if !response_received
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 :project_id, :access_token
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
@@ -1,3 +1,3 @@
1
1
  module Editmode
2
- VERSION = "0.0.10.1"
2
+ VERSION = "0.0.10.12"
3
3
  end
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.1
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-21 00:00:00.000000000 Z
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