editmode 1.3.4 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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