editmode 1.3.4 → 1.4.0
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/README.md +3 -1
- data/app/controllers/editmode_controller.rb +2 -2
- data/lib/editmode.rb +30 -1
- data/lib/editmode/action_view_extensions/editmode_helper.rb +3 -2
- data/lib/editmode/chunk.rb +26 -0
- data/lib/editmode/chunk_value.rb +10 -7
- data/lib/editmode/helper.rb +2 -1
- data/lib/editmode/version.rb +1 -1
- data/lib/generators/editmode/templates/editmode.rb.erb +8 -2
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d4e2e45806e29ba1a85e9bc615297cb1e1a6e9445d50f52b003472b2a20cd6c
|
4
|
+
data.tar.gz: 1a8c556bd66f8bff8b3c59e696f1e08dc5c1b4855537c10cb7874bcb6139e05c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 537d0f6d2ef4627f99bc9ca085b022bb9c5d6b8035254bc5a4284d9a25f3e24996e6f4d1a69734cca3c72317e292505706202004c7147dbe2f7419e0266c441e
|
7
|
+
data.tar.gz: b36ac59ef4a1768c08ab526401b1e28e92fe9977c53e4bc786b850fb9f25f21968da79a992ad8321bdd4457297df687ed6a98a601b80be492101fdf7ac8bc4ea
|
data/README.md
CHANGED
@@ -119,7 +119,7 @@ Use `transformation` attribute to perform real-time image transformations to del
|
|
119
119
|
= F('Avatar', transformation: "w-200 h-200")
|
120
120
|
```
|
121
121
|
|
122
|
-
Please see complete list of [transformation parameters](https://editmode.com/docs#/imagekit_properties).
|
122
|
+
Please see the complete list of [transformation parameters](https://editmode.com/docs#/imagekit_properties).
|
123
123
|
|
124
124
|
## Caching
|
125
125
|
In order to keep your application speedy, Editmode minimizes the amount of network calls it makes by caching content where it can.
|
@@ -139,6 +139,8 @@ The editmode gem exposes a cache expiration endpoint in your application at `/ed
|
|
139
139
|
|
140
140
|
The cache expiration endpoint is currently **not** authenticated.
|
141
141
|
|
142
|
+
?> We are using a method called `delete_matched` to purge your caches when a content gets updated, and this method isn't supported in `memcached`. We highly recommend using `redis_store` or `file_store`.
|
143
|
+
|
142
144
|
## Disabling editmode.js auto-include
|
143
145
|
|
144
146
|
To disable automatic insertion for a particular controller or action you can:
|
@@ -6,14 +6,14 @@ class EditmodeController < ApplicationController
|
|
6
6
|
render status: 200, json: {:response => "success"}
|
7
7
|
elsif params[:collection]
|
8
8
|
cache_id = "collection_#{params[:identifier]}"
|
9
|
-
Rails.cache.delete_matched("
|
9
|
+
Rails.cache.delete_matched("*#{cache_id}*")
|
10
10
|
render status: 200, json: {:response => "success"}
|
11
11
|
elsif params[:variable_cache_project_id]
|
12
12
|
project_id = params[:variable_cache_project_id]
|
13
13
|
Rails.cache.delete("chunk_#{project_id}_variables")
|
14
14
|
render status: 200, json: {:response => "success"}
|
15
15
|
elsif params[:identifier]
|
16
|
-
Rails.cache.delete_matched("
|
16
|
+
Rails.cache.delete_matched("*#{params[:identifier]}*")
|
17
17
|
render status: 200, json: {:response => "success"}
|
18
18
|
else
|
19
19
|
render status: 404, json: {:response => "no identifier specified"}
|
data/lib/editmode.rb
CHANGED
@@ -8,11 +8,17 @@ require 'editmode/railtie' if defined? Rails
|
|
8
8
|
require 'editmode/engine' if defined?(Rails)
|
9
9
|
require 'editmode/monkey_patches'
|
10
10
|
require 'editmode/logger'
|
11
|
+
require 'editmode/chunk'
|
12
|
+
|
11
13
|
module Editmode
|
12
14
|
class << self
|
13
15
|
include Editmode::ActionViewExtensions::EditmodeHelper
|
14
16
|
include Editmode::Helper
|
15
17
|
|
18
|
+
def api_root_url
|
19
|
+
ENV["EDITMODE_OVERRIDE_API_URL"] || "https://api.editmode.com"
|
20
|
+
end
|
21
|
+
|
16
22
|
def project_id=(id)
|
17
23
|
config.project_id = id
|
18
24
|
end
|
@@ -52,11 +58,30 @@ module Editmode
|
|
52
58
|
puts er
|
53
59
|
end
|
54
60
|
end
|
61
|
+
|
62
|
+
def cache_all!(chunks)
|
63
|
+
chunks.each do |chunk|
|
64
|
+
project_id = chunk["project_id"]
|
65
|
+
identifier = chunk["identifier"]
|
66
|
+
content_key = chunk["content_key"]
|
67
|
+
json_data = chunk.to_json
|
68
|
+
Rails.cache.write("chunk_#{project_id}#{identifier}", json_data)
|
69
|
+
Rails.cache.write("chunk_#{project_id}#{content_key}", json_data) if content_key.present?
|
70
|
+
end
|
71
|
+
end
|
55
72
|
end
|
56
73
|
|
57
74
|
class Configuration
|
58
75
|
attr_accessor :access_token, :variable
|
59
|
-
attr_reader :project_id, :log_level
|
76
|
+
attr_reader :project_id, :log_level, :preload
|
77
|
+
|
78
|
+
def preload=(bool)
|
79
|
+
@preload = bool
|
80
|
+
if bool
|
81
|
+
chunks = Editmode::Chunk.retrieve
|
82
|
+
Editmode.cache_all!(chunks)
|
83
|
+
end
|
84
|
+
end
|
60
85
|
|
61
86
|
def logger
|
62
87
|
@logger ||= Editmode::Logger.new
|
@@ -64,6 +89,10 @@ module Editmode
|
|
64
89
|
|
65
90
|
def project_id=(id)
|
66
91
|
@project_id = id
|
92
|
+
if preload
|
93
|
+
chunks = Editmode::Chunk.retrieve(id)
|
94
|
+
Editmode.cache_all!(chunks)
|
95
|
+
end
|
67
96
|
end
|
68
97
|
|
69
98
|
def log_level=(level)
|
@@ -163,7 +163,7 @@ module Editmode
|
|
163
163
|
# prevent the page from loading.
|
164
164
|
begin
|
165
165
|
field = options[:field].presence || ""
|
166
|
-
options[:referrer] = request.url
|
166
|
+
options[:referrer] = request.present? && request.url || ""
|
167
167
|
chunk_value = Editmode::ChunkValue.new(identifier, options)
|
168
168
|
|
169
169
|
if field.present? && chunk_value.chunk_type == 'collection_item'
|
@@ -182,11 +182,12 @@ module Editmode
|
|
182
182
|
render_chunk_content(identifier, chunk_content, chunk_type, options)
|
183
183
|
|
184
184
|
rescue => error
|
185
|
+
puts error
|
185
186
|
# Show fallback content by default
|
186
187
|
return content_tag("em-span", &block) if block_given?
|
187
188
|
# Otherwise show a span with no content to
|
188
189
|
# maintain layout
|
189
|
-
content_tag("em-span", " ".html_safe)
|
190
|
+
content_tag("em-span", " ".html_safe)
|
190
191
|
end
|
191
192
|
end
|
192
193
|
alias_method :chunk, :chunk_display
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Editmode::Chunk
|
2
|
+
def initialize
|
3
|
+
end
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def retrieve(project_id = Editmode.project_id, options = {})
|
7
|
+
begin
|
8
|
+
root_url = Editmode.api_root_url
|
9
|
+
chunk_id = options[:identifier] || options[:content_key]
|
10
|
+
|
11
|
+
url = "#{root_url}/chunks/#{chunk_id}?project_id=#{project_id}"
|
12
|
+
response = HTTParty.get(url)
|
13
|
+
|
14
|
+
if chunk_id.present?
|
15
|
+
return response
|
16
|
+
else
|
17
|
+
chunks = response.try(:[], "chunks")
|
18
|
+
chunks ||= []
|
19
|
+
end
|
20
|
+
rescue => er
|
21
|
+
Rails.logger.info er
|
22
|
+
[]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/editmode/chunk_value.rb
CHANGED
@@ -133,33 +133,36 @@ module Editmode
|
|
133
133
|
def query_params
|
134
134
|
the_params = { 'project_id' => project_id }
|
135
135
|
the_params['branch_id'] = branch_id if branch_id.present?
|
136
|
-
the_params['transformation'] = @transformation if @transformation.present?
|
137
136
|
|
138
137
|
the_params
|
139
138
|
end
|
140
139
|
|
141
140
|
def get_content
|
142
141
|
if !cached?
|
143
|
-
|
144
|
-
response_received = true if
|
142
|
+
@response = HTTParty.get(url, query: query_params, headers: {referrer: @referrer})
|
143
|
+
response_received = true if @response.code == 200
|
145
144
|
end
|
146
145
|
|
147
146
|
if !cached? && !response_received
|
148
|
-
message =
|
147
|
+
message = @response.try(:[], 'message') || no_response_received(identifier)
|
149
148
|
|
150
149
|
raise message
|
151
150
|
else
|
152
|
-
Rails.cache.write(cache_identifier,
|
151
|
+
Rails.cache.write(cache_identifier, @response.to_json) if @response.present?
|
153
152
|
cached_response = Rails.cache.fetch(cache_identifier)
|
154
153
|
|
155
|
-
|
154
|
+
if cached_response.present?
|
155
|
+
@response = json?(cached_response) ? JSON.parse(cached_response) : cached_response
|
156
|
+
end
|
157
|
+
|
156
158
|
set_response_attributes!
|
157
159
|
end
|
158
160
|
end
|
159
161
|
|
160
162
|
def set_response_attributes!
|
161
|
-
@content = response['content']
|
162
163
|
@chunk_type = response['chunk_type']
|
164
|
+
|
165
|
+
@content = @chunk_type == 'image' ? set_transformation_properties!(response['content']) : response['content']
|
163
166
|
@variable_fallbacks = response['variable_fallbacks'].presence || {}
|
164
167
|
@collection_id = response["collection"]["identifier"] if chunk_type == 'collection_item'
|
165
168
|
@branch_id = response['branch_id']
|
data/lib/editmode/helper.rb
CHANGED
@@ -5,7 +5,7 @@ module Editmode
|
|
5
5
|
field, options = parse_arguments(args)
|
6
6
|
begin
|
7
7
|
chunk = Editmode::ChunkValue.new(identifier, options.merge({raw: true}))
|
8
|
-
|
8
|
+
|
9
9
|
if chunk.chunk_type == 'collection_item'
|
10
10
|
chunk.field(field)
|
11
11
|
else
|
@@ -13,6 +13,7 @@ module Editmode
|
|
13
13
|
end
|
14
14
|
rescue => er
|
15
15
|
Rails.logger.info "#{er}: We can't render content for #{identifier}"
|
16
|
+
return ""
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
data/lib/editmode/version.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
Editmode.setup do |config|
|
2
|
-
# Replace TodoProjectId with your Editmode Project ID,
|
3
|
-
# visit https://editmode.com/projects
|
4
2
|
config.project_id = "<%= @project_id %>"
|
3
|
+
|
4
|
+
# Enables logging on every API request
|
5
|
+
# config.log_level = :silence
|
6
|
+
|
7
|
+
# Preload contents - this will take all the contents
|
8
|
+
# from the project specified in config.project_id
|
9
|
+
# and store it to your Application cache.
|
10
|
+
# config.preload = true
|
5
11
|
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: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Ennis
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-24 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.rb
|
85
86
|
- lib/editmode/chunk_value.rb
|
86
87
|
- lib/editmode/engine.rb
|
87
88
|
- lib/editmode/helper.rb
|
@@ -96,7 +97,7 @@ homepage: https://github.com/tonyennis145/editmode-rails
|
|
96
97
|
licenses:
|
97
98
|
- MIT
|
98
99
|
metadata: {}
|
99
|
-
post_install_message:
|
100
|
+
post_install_message:
|
100
101
|
rdoc_options: []
|
101
102
|
require_paths:
|
102
103
|
- lib
|
@@ -111,8 +112,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
112
|
- !ruby/object:Gem::Version
|
112
113
|
version: '0'
|
113
114
|
requirements: []
|
114
|
-
rubygems_version: 3.
|
115
|
-
signing_key:
|
115
|
+
rubygems_version: 3.0.3
|
116
|
+
signing_key:
|
116
117
|
specification_version: 4
|
117
118
|
summary: Editmode allows you to turn plain text in your rails app into easily inline-editable
|
118
119
|
bits of content that can be managed by anyone with no technical knowledge
|