editmode 1.2.9 → 1.3.4
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 +14 -0
- data/lib/editmode.rb +23 -2
- data/lib/editmode/action_view_extensions/editmode_helper.rb +9 -5
- data/lib/editmode/chunk_value.rb +24 -5
- data/lib/editmode/helper.rb +1 -1
- data/lib/editmode/logger.rb +28 -0
- data/lib/editmode/monkey_patches.rb +17 -0
- data/lib/editmode/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b84d630e273ea3949b9ff1f5f0bd69f5dcf546ff33e15e92e766cd623b269ae
|
4
|
+
data.tar.gz: ce10b6c6fe4d46052f303ab4aeaddde7da8c230ae6c03a299e06e0c42f3d1d93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24ffa6158c7b3c0d22fb4c546b521ec48a51fc2f579575608168cd7a321f103e439c6dc26bf33599483daf957215481b92b5a96bd1e9133e6342bcbba950ddad
|
7
|
+
data.tar.gz: f4d684b4d7713dee4853e304f9a61371eb982e9ce9841fbe283670c5c42176bfdd35847482dd698136e71c598a61e545be8c569f9f1177cb397984f197016e04
|
data/README.md
CHANGED
@@ -107,6 +107,20 @@ e("cnk_16e04a02d577afb610ce", "Email Content", variables: variable_values)
|
|
107
107
|
| item_class | string | `optional` Class name(s) that will be added along with "chunks-collection-item--wrapper" to all collection items |
|
108
108
|
|
109
109
|
|
110
|
+
### Working with Image Transformation
|
111
|
+
Use `transformation` attribute to perform real-time image transformations to deliver perfect images to the end-users.
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
# This chunk should render an image with 200 x 200 dimension
|
115
|
+
= E('id-of-some-image', transformation: "w-200 h-200")
|
116
|
+
|
117
|
+
# For image inside a collection
|
118
|
+
= c('some-collection-id') do
|
119
|
+
= F('Avatar', transformation: "w-200 h-200")
|
120
|
+
```
|
121
|
+
|
122
|
+
Please see complete list of [transformation parameters](https://editmode.com/docs#/imagekit_properties).
|
123
|
+
|
110
124
|
## Caching
|
111
125
|
In order to keep your application speedy, Editmode minimizes the amount of network calls it makes by caching content where it can.
|
112
126
|
|
data/lib/editmode.rb
CHANGED
@@ -6,7 +6,8 @@ require 'editmode/auto_include_filter'
|
|
6
6
|
require 'editmode/chunk_value'
|
7
7
|
require 'editmode/railtie' if defined? Rails
|
8
8
|
require 'editmode/engine' if defined?(Rails)
|
9
|
-
|
9
|
+
require 'editmode/monkey_patches'
|
10
|
+
require 'editmode/logger'
|
10
11
|
module Editmode
|
11
12
|
class << self
|
12
13
|
include Editmode::ActionViewExtensions::EditmodeHelper
|
@@ -20,6 +21,18 @@ module Editmode
|
|
20
21
|
config.project_id
|
21
22
|
end
|
22
23
|
|
24
|
+
def logger
|
25
|
+
config.logger
|
26
|
+
end
|
27
|
+
|
28
|
+
def log_level
|
29
|
+
config.log_level
|
30
|
+
end
|
31
|
+
|
32
|
+
def log_level=(level)
|
33
|
+
config.log_level = level
|
34
|
+
end
|
35
|
+
|
23
36
|
def access_token
|
24
37
|
config.access_token
|
25
38
|
end
|
@@ -43,11 +56,19 @@ module Editmode
|
|
43
56
|
|
44
57
|
class Configuration
|
45
58
|
attr_accessor :access_token, :variable
|
46
|
-
attr_reader :project_id
|
59
|
+
attr_reader :project_id, :log_level
|
60
|
+
|
61
|
+
def logger
|
62
|
+
@logger ||= Editmode::Logger.new
|
63
|
+
end
|
47
64
|
|
48
65
|
def project_id=(id)
|
49
66
|
@project_id = id
|
67
|
+
end
|
50
68
|
|
69
|
+
def log_level=(level)
|
70
|
+
@log_level = level
|
71
|
+
logger.log_level = level
|
51
72
|
end
|
52
73
|
end
|
53
74
|
end
|
@@ -16,6 +16,10 @@ module Editmode
|
|
16
16
|
# Todo Add Header Version
|
17
17
|
end
|
18
18
|
|
19
|
+
def allowed_tag_attributes
|
20
|
+
[:style, :href, :title, :src, :alt, :width, :height]
|
21
|
+
end
|
22
|
+
|
19
23
|
def api_root_url
|
20
24
|
ENV["EDITMODE_OVERRIDE_API_URL"] || "https://api.editmode.com"
|
21
25
|
end
|
@@ -110,7 +114,7 @@ module Editmode
|
|
110
114
|
end
|
111
115
|
end
|
112
116
|
|
113
|
-
def render_chunk_content(chunk_identifier, chunk_content, chunk_type,options = {})
|
117
|
+
def render_chunk_content(chunk_identifier, chunk_content, chunk_type, options = {})
|
114
118
|
begin
|
115
119
|
css_class = options[:class]
|
116
120
|
cache_id = options[:cache_identifier]
|
@@ -132,17 +136,17 @@ module Editmode
|
|
132
136
|
case display_type
|
133
137
|
when "span"
|
134
138
|
if chunk_type == "rich_text"
|
135
|
-
content = content_tag("em-span", :class => "editmode-richtext-editor #{css_class}", :data => chunk_data.merge!({:chunk_editable => true}) ) do
|
139
|
+
content = content_tag("em-span", :class => "editmode-richtext-editor #{css_class}", :data => chunk_data.merge!({:chunk_editable => true}), **options.slice(*allowed_tag_attributes) ) do
|
136
140
|
chunk_content.html_safe
|
137
141
|
end
|
138
142
|
else
|
139
|
-
content_tag("em-span", :class => css_class, :data => chunk_data.merge!({:chunk_editable => true}) ) do
|
143
|
+
content_tag("em-span", :class => css_class, :data => chunk_data.merge!({:chunk_editable => true}), **options.slice(*allowed_tag_attributes) ) do
|
140
144
|
chunk_content.html_safe
|
141
145
|
end
|
142
146
|
end
|
143
147
|
when "image"
|
144
148
|
chunk_content = chunk_content.blank? || chunk_content == "/images/original/missing.png" ? 'https://www.editmode.com/upload.png' : chunk_content
|
145
|
-
image_tag(chunk_content, :data => chunk_data, :class => css_class)
|
149
|
+
image_tag(chunk_content, :data => chunk_data, :class => css_class, **options.slice(*allowed_tag_attributes))
|
146
150
|
end
|
147
151
|
rescue => errors
|
148
152
|
puts errors
|
@@ -159,7 +163,7 @@ module Editmode
|
|
159
163
|
# prevent the page from loading.
|
160
164
|
begin
|
161
165
|
field = options[:field].presence || ""
|
162
|
-
|
166
|
+
options[:referrer] = request.url
|
163
167
|
chunk_value = Editmode::ChunkValue.new(identifier, options)
|
164
168
|
|
165
169
|
if field.present? && chunk_value.chunk_type == 'collection_item'
|
data/lib/editmode/chunk_value.rb
CHANGED
@@ -9,7 +9,7 @@ module Editmode
|
|
9
9
|
attr_accessor :identifier, :variable_values, :branch_id,
|
10
10
|
:variable_fallbacks, :chunk_type, :project_id,
|
11
11
|
:url, :collection_id, :cache_identifier,
|
12
|
-
:response
|
12
|
+
:response, :transformation
|
13
13
|
|
14
14
|
attr_writer :content
|
15
15
|
|
@@ -17,10 +17,12 @@ module Editmode
|
|
17
17
|
@identifier = identifier
|
18
18
|
@branch_id = options[:branch_id].presence
|
19
19
|
@project_id = project_id
|
20
|
+
@referrer = options[:referrer].presence || ""
|
20
21
|
@variable_values = options[:variables].presence || {}
|
21
22
|
@raw = options[:raw].present?
|
22
23
|
@skip_sanitize = options[:dangerously_skip_sanitization]
|
23
24
|
@skip_cache = options[:skip_cache]
|
25
|
+
@transformation = options[:transformation]
|
24
26
|
|
25
27
|
@url = "#{api_root_url}/chunks/#{identifier}"
|
26
28
|
@cache_identifier = set_cache_identifier(identifier)
|
@@ -39,7 +41,7 @@ module Editmode
|
|
39
41
|
if field.present?
|
40
42
|
field_chunk = field_chunk(field)
|
41
43
|
if field_chunk.present?
|
42
|
-
result = field_chunk['content']
|
44
|
+
result = field_chunk['chunk_type'] == 'image' ? set_transformation_properties!(field_chunk['content']) : field_chunk['content']
|
43
45
|
result = variable_parse!(result, variable_fallbacks, variable_values, @raw, @skip_sanitize)
|
44
46
|
else
|
45
47
|
raise no_response_received(field)
|
@@ -72,6 +74,23 @@ module Editmode
|
|
72
74
|
end
|
73
75
|
|
74
76
|
private
|
77
|
+
def set_transformation_properties!(url)
|
78
|
+
if transformation.present? && url.present?
|
79
|
+
transformation.gsub!(" ", ",")
|
80
|
+
transformation.gsub!(/\s/, '')
|
81
|
+
|
82
|
+
uri = URI(url)
|
83
|
+
uri.query = [uri.query, "tr=#{transformation}"].compact.join("&")
|
84
|
+
|
85
|
+
url = uri.to_s
|
86
|
+
end
|
87
|
+
|
88
|
+
url
|
89
|
+
end
|
90
|
+
|
91
|
+
def allowed_tag_attributes
|
92
|
+
%w(style href title src alt width height class target)
|
93
|
+
end
|
75
94
|
|
76
95
|
# Todo: Transfer to helper utils
|
77
96
|
def api_root_url
|
@@ -107,21 +126,21 @@ module Editmode
|
|
107
126
|
end
|
108
127
|
end
|
109
128
|
|
110
|
-
content = ActionController::Base.helpers.sanitize(content) unless skip_sanitize
|
129
|
+
content = ActionController::Base.helpers.sanitize(content, attributes: allowed_tag_attributes) unless skip_sanitize
|
111
130
|
return content
|
112
131
|
end
|
113
132
|
|
114
133
|
def query_params
|
115
134
|
the_params = { 'project_id' => project_id }
|
116
135
|
the_params['branch_id'] = branch_id if branch_id.present?
|
136
|
+
the_params['transformation'] = @transformation if @transformation.present?
|
117
137
|
|
118
138
|
the_params
|
119
139
|
end
|
120
140
|
|
121
141
|
def get_content
|
122
|
-
|
123
142
|
if !cached?
|
124
|
-
http_response = HTTParty.get(url, query: query_params)
|
143
|
+
http_response = HTTParty.get(url, query: query_params, headers: {referrer: @referrer})
|
125
144
|
response_received = true if http_response.code == 200
|
126
145
|
end
|
127
146
|
|
data/lib/editmode/helper.rb
CHANGED
@@ -17,7 +17,7 @@ module Editmode
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def render_custom_field_raw(label, options={})
|
20
|
-
e(@custom_field_chunk["identifier"], label, options.merge({response: @custom_field_chunk}))
|
20
|
+
e(@custom_field_chunk["identifier"], label, options.merge({response: @custom_field_chunk}))
|
21
21
|
end
|
22
22
|
alias_method :f, :render_custom_field_raw
|
23
23
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
|
3
|
+
module Editmode
|
4
|
+
class Logger
|
5
|
+
attr_accessor :httparty_subscription
|
6
|
+
|
7
|
+
def log_level=(level)
|
8
|
+
if level == :normal
|
9
|
+
# Add more subscription here
|
10
|
+
enable_httparty!
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def enable_httparty!
|
15
|
+
@httparty_subscription = ActiveSupport::Notifications.subscribe('request.httparty') do |name, start, ending, transaction_id, payload|
|
16
|
+
event = ActiveSupport::Notifications::Event.new(name, start, ending, transaction_id, payload)
|
17
|
+
Rails.logger.info " HTTParty -- " + "#{event.payload[:method]} #{event.payload[:url]} (Duration: #{event.duration}ms)"
|
18
|
+
Thread.current[:http_runtime] ||= 0
|
19
|
+
Thread.current[:http_runtime] += event.duration
|
20
|
+
payload[:http_runtime] = event.duration
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def unsubscribe(subscriber)
|
25
|
+
ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber.present?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
# Support logging on httparty requests
|
4
|
+
module HTTParty
|
5
|
+
class Request
|
6
|
+
alias_method :_original_perform, :perform
|
7
|
+
def perform(&block)
|
8
|
+
payload = {
|
9
|
+
method: http_method.const_get(:METHOD),
|
10
|
+
url: uri
|
11
|
+
}
|
12
|
+
ActiveSupport::Notifications.instrument 'request.httparty', payload do
|
13
|
+
_original_perform(&block)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
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: 1.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Ennis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -85,6 +85,8 @@ files:
|
|
85
85
|
- lib/editmode/chunk_value.rb
|
86
86
|
- lib/editmode/engine.rb
|
87
87
|
- lib/editmode/helper.rb
|
88
|
+
- lib/editmode/logger.rb
|
89
|
+
- lib/editmode/monkey_patches.rb
|
88
90
|
- lib/editmode/railtie.rb
|
89
91
|
- lib/editmode/script_tag.rb
|
90
92
|
- lib/editmode/version.rb
|