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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b84d630e273ea3949b9ff1f5f0bd69f5dcf546ff33e15e92e766cd623b269ae
4
- data.tar.gz: ce10b6c6fe4d46052f303ab4aeaddde7da8c230ae6c03a299e06e0c42f3d1d93
3
+ metadata.gz: 9d4e2e45806e29ba1a85e9bc615297cb1e1a6e9445d50f52b003472b2a20cd6c
4
+ data.tar.gz: 1a8c556bd66f8bff8b3c59e696f1e08dc5c1b4855537c10cb7874bcb6139e05c
5
5
  SHA512:
6
- metadata.gz: 24ffa6158c7b3c0d22fb4c546b521ec48a51fc2f579575608168cd7a321f103e439c6dc26bf33599483daf957215481b92b5a96bd1e9133e6342bcbba950ddad
7
- data.tar.gz: f4d684b4d7713dee4853e304f9a61371eb982e9ce9841fbe283670c5c42176bfdd35847482dd698136e71c598a61e545be8c569f9f1177cb397984f197016e04
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("#{cache_id}*")
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("#{params[:identifier]}")
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", "&nbsp".html_safe)
190
+ content_tag("em-span", "&nbsp".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
@@ -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
- http_response = HTTParty.get(url, query: query_params, headers: {referrer: @referrer})
144
- response_received = true if http_response.code == 200
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 = http_response.try(:[], 'message') || no_response_received(identifier)
147
+ message = @response.try(:[], 'message') || no_response_received(identifier)
149
148
 
150
149
  raise message
151
150
  else
152
- Rails.cache.write(cache_identifier, http_response.to_json) if http_response.present?
151
+ Rails.cache.write(cache_identifier, @response.to_json) if @response.present?
153
152
  cached_response = Rails.cache.fetch(cache_identifier)
154
153
 
155
- @response = json?(cached_response) ? JSON.parse(cached_response) : cached_response
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']
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module Editmode
2
- VERSION = "1.3.4"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -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.3.4
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-10 00:00:00.000000000 Z
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.2.4
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