editmode 1.2.8 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Rakefile +9 -1
- data/lib/editmode.rb +23 -2
- data/lib/editmode/action_view_extensions/editmode_helper.rb +16 -6
- data/lib/editmode/chunk_value.rb +20 -9
- data/lib/editmode/engine.rb +2 -1
- 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/railtie.rb +1 -0
- data/lib/editmode/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c2cf39ab030f4bc6d04678170c164d950a4bf947659906c6da343537f447bd4
|
4
|
+
data.tar.gz: 89a6a0f4a16d51541404f1f1c0fd8ab90e0ad799b6bc176c28c48e8f653c0064
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3815cd743139b4fd6a354c072d9bd2c8d010c8fa4aa2a6a6e04165f363430a5689d91a1228e5e3789b8d53a9f0434c4175a525bb3d7f85c4105bcecf81d1e96
|
7
|
+
data.tar.gz: fcb8a9260a0cd706ad049c2f2dfd9406c3c3bc2ac8addcb6fa74f662709d483a00e338613136959762c5f317798cde9ad9f8d48ce0077fe63cdac323ccd063d4
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
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
|
@@ -1,15 +1,25 @@
|
|
1
1
|
require 'editmode/helper'
|
2
|
+
require 'action_view'
|
3
|
+
require 'httparty'
|
2
4
|
|
3
5
|
module Editmode
|
4
6
|
module ActionViewExtensions
|
5
7
|
module EditmodeHelper
|
6
|
-
|
8
|
+
include ::ActionView::Helpers::TagHelper
|
9
|
+
include ::ActionView::Helpers::TextHelper
|
10
|
+
include ::ActionView::Helpers::AssetTagHelper
|
11
|
+
include ::ActionView::Context
|
7
12
|
include Editmode::Helper
|
8
13
|
|
14
|
+
|
9
15
|
def api_version
|
10
16
|
# Todo Add Header Version
|
11
17
|
end
|
12
18
|
|
19
|
+
def allowed_tag_attributes
|
20
|
+
[:style, :href, :title, :src, :alt, :width, :height]
|
21
|
+
end
|
22
|
+
|
13
23
|
def api_root_url
|
14
24
|
ENV["EDITMODE_OVERRIDE_API_URL"] || "https://api.editmode.com"
|
15
25
|
end
|
@@ -104,7 +114,7 @@ module Editmode
|
|
104
114
|
end
|
105
115
|
end
|
106
116
|
|
107
|
-
def render_chunk_content(chunk_identifier, chunk_content, chunk_type,options = {})
|
117
|
+
def render_chunk_content(chunk_identifier, chunk_content, chunk_type, options = {})
|
108
118
|
begin
|
109
119
|
css_class = options[:class]
|
110
120
|
cache_id = options[:cache_identifier]
|
@@ -126,17 +136,17 @@ module Editmode
|
|
126
136
|
case display_type
|
127
137
|
when "span"
|
128
138
|
if chunk_type == "rich_text"
|
129
|
-
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
|
130
140
|
chunk_content.html_safe
|
131
141
|
end
|
132
142
|
else
|
133
|
-
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
|
134
144
|
chunk_content.html_safe
|
135
145
|
end
|
136
146
|
end
|
137
147
|
when "image"
|
138
148
|
chunk_content = chunk_content.blank? || chunk_content == "/images/original/missing.png" ? 'https://www.editmode.com/upload.png' : chunk_content
|
139
|
-
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))
|
140
150
|
end
|
141
151
|
rescue => errors
|
142
152
|
puts errors
|
@@ -153,7 +163,7 @@ module Editmode
|
|
153
163
|
# prevent the page from loading.
|
154
164
|
begin
|
155
165
|
field = options[:field].presence || ""
|
156
|
-
|
166
|
+
options[:referrer] = request.url
|
157
167
|
chunk_value = Editmode::ChunkValue.new(identifier, options)
|
158
168
|
|
159
169
|
if field.present? && chunk_value.chunk_type == 'collection_item'
|
data/lib/editmode/chunk_value.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
require 'active_support'
|
3
|
+
|
1
4
|
module Editmode
|
2
5
|
class ChunkValue
|
3
6
|
include ActionView::Helpers::TagHelper
|
@@ -14,6 +17,7 @@ module Editmode
|
|
14
17
|
@identifier = identifier
|
15
18
|
@branch_id = options[:branch_id].presence
|
16
19
|
@project_id = project_id
|
20
|
+
@referrer = options[:referrer].presence || ""
|
17
21
|
@variable_values = options[:variables].presence || {}
|
18
22
|
@raw = options[:raw].present?
|
19
23
|
@skip_sanitize = options[:dangerously_skip_sanitization]
|
@@ -63,7 +67,15 @@ module Editmode
|
|
63
67
|
result.try(:html_safe)
|
64
68
|
end
|
65
69
|
|
70
|
+
def cached?
|
71
|
+
return false if @skip_cache
|
72
|
+
Rails.cache.exist?(cache_identifier)
|
73
|
+
end
|
74
|
+
|
66
75
|
private
|
76
|
+
def allowed_tag_attributes
|
77
|
+
%w(style href title src alt width height class target)
|
78
|
+
end
|
67
79
|
|
68
80
|
# Todo: Transfer to helper utils
|
69
81
|
def api_root_url
|
@@ -99,15 +111,10 @@ module Editmode
|
|
99
111
|
end
|
100
112
|
end
|
101
113
|
|
102
|
-
content = ActionController::Base.helpers.sanitize(content) unless skip_sanitize
|
114
|
+
content = ActionController::Base.helpers.sanitize(content, attributes: allowed_tag_attributes) unless skip_sanitize
|
103
115
|
return content
|
104
116
|
end
|
105
117
|
|
106
|
-
def cached?
|
107
|
-
return false if @skip_cache
|
108
|
-
Rails.cache.exist?(cache_identifier)
|
109
|
-
end
|
110
|
-
|
111
118
|
def query_params
|
112
119
|
the_params = { 'project_id' => project_id }
|
113
120
|
the_params['branch_id'] = branch_id if branch_id.present?
|
@@ -116,14 +123,15 @@ module Editmode
|
|
116
123
|
end
|
117
124
|
|
118
125
|
def get_content
|
119
|
-
|
120
126
|
if !cached?
|
121
|
-
http_response = HTTParty.get(url, query: query_params)
|
127
|
+
http_response = HTTParty.get(url, query: query_params, headers: {referrer: @referrer})
|
122
128
|
response_received = true if http_response.code == 200
|
123
129
|
end
|
124
130
|
|
125
131
|
if !cached? && !response_received
|
126
|
-
|
132
|
+
message = http_response.try(:[], 'message') || no_response_received(identifier)
|
133
|
+
|
134
|
+
raise message
|
127
135
|
else
|
128
136
|
Rails.cache.write(cache_identifier, http_response.to_json) if http_response.present?
|
129
137
|
cached_response = Rails.cache.fetch(cache_identifier)
|
@@ -141,5 +149,8 @@ module Editmode
|
|
141
149
|
@branch_id = response['branch_id']
|
142
150
|
end
|
143
151
|
|
152
|
+
def no_response_received(id = "")
|
153
|
+
"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."
|
154
|
+
end
|
144
155
|
end
|
145
156
|
end
|
data/lib/editmode/engine.rb
CHANGED
data/lib/editmode/helper.rb
CHANGED
@@ -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/railtie.rb
CHANGED
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Ennis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-05 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
|
@@ -109,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
111
|
- !ruby/object:Gem::Version
|
110
112
|
version: '0'
|
111
113
|
requirements: []
|
112
|
-
rubygems_version: 3.
|
114
|
+
rubygems_version: 3.2.4
|
113
115
|
signing_key:
|
114
116
|
specification_version: 4
|
115
117
|
summary: Editmode allows you to turn plain text in your rails app into easily inline-editable
|