editmode 1.2.6 → 1.3.1

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: 84c4ada25fc650fcb7f2a9b9c8322562bda944bd1180815e60bf3f3ef7534d94
4
- data.tar.gz: 246e38a66ff7fb77ca953ef0e222720defdc72447eac982bdf5e39c7c0b34a0f
3
+ metadata.gz: 392f282609e410c8656791b6120245b8b4c790ed8ba102d6dfe1c5d2062acd6f
4
+ data.tar.gz: 94246ddabf9aadcdf65ceab231e83a6704a7d89f39ce5039685b7f44ea4e18c9
5
5
  SHA512:
6
- metadata.gz: 9c891c169c1759113a86a6cf8daa6f7910b676e5296b036784cf37a2dec35f6d82b3237d8284027ecb3bb6126c9e168de5dcbceedc8f6829161bd6a7b844cb25
7
- data.tar.gz: a674897c9c9a1c5ef04f95fb378982343557dd14f03e4b5e55a6093cbf470b56ef663aa7c3bed30bb7e475c53b5a4ee3b1164143bc7e1e83e545cb8ef74feeac
6
+ metadata.gz: 7a1f7f6442b1109fedbd94be59a08c0658d3aa6d9570a5e21f36a32da45c6befacdab23da75670618034c95ceace95262e440807ccafc0c847544b96600497be
7
+ data.tar.gz: b89dc6f25b53ef930ed66c752947a539157cd4cda959a8288366431cb2ea0987ac7d5af6e3b5ab0a5ee49e341046fc47877133ade9c1fa05a8ba0a833add5368
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in chunks.gemspec
4
+ gem 'pry-rails'
5
+ gem 'rails', '~> 5.2.0'
4
6
  gemspec
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
2
3
 
4
+ task :test do
5
+ Dir['test/*_test.rb'].each do |testfile|
6
+ load testfile
7
+ end
8
+ end
9
+
10
+ task :default => :test
@@ -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
- require 'httparty'
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'
@@ -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,9 +17,11 @@ 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]
24
+ @skip_cache = options[:skip_cache]
20
25
 
21
26
  @url = "#{api_root_url}/chunks/#{identifier}"
22
27
  @cache_identifier = set_cache_identifier(identifier)
@@ -62,6 +67,11 @@ module Editmode
62
67
  result.try(:html_safe)
63
68
  end
64
69
 
70
+ def cached?
71
+ return false if @skip_cache
72
+ Rails.cache.exist?(cache_identifier)
73
+ end
74
+
65
75
  private
66
76
 
67
77
  # Todo: Transfer to helper utils
@@ -81,7 +91,6 @@ module Editmode
81
91
  end
82
92
 
83
93
  def variable_parse!(content, variables = {}, values = {}, raw = true, skip_sanitize=false)
84
- content = ActionController::Base.helpers.sanitize(content) unless skip_sanitize
85
94
  tokens = content.scan(/\{{(.*?)\}}/)
86
95
  if tokens.any?
87
96
  tokens.flatten!
@@ -99,11 +108,8 @@ module Editmode
99
108
  end
100
109
  end
101
110
 
102
- content
103
- end
104
-
105
- def cached?
106
- Rails.cache.exist?(cache_identifier)
111
+ content = ActionController::Base.helpers.sanitize(content) unless skip_sanitize
112
+ return content
107
113
  end
108
114
 
109
115
  def query_params
@@ -115,16 +121,17 @@ module Editmode
115
121
 
116
122
  def get_content
117
123
  if !cached?
118
- http_response = HTTParty.get(url, query: query_params)
124
+ http_response = HTTParty.get(url, query: query_params, headers: {referrer: @referrer})
119
125
  response_received = true if http_response.code == 200
120
126
  end
121
127
 
122
128
  if !cached? && !response_received
123
- raise no_response_received(identifier)
129
+ message = http_response.try(:[], 'message') || no_response_received(identifier)
130
+
131
+ raise message
124
132
  else
125
- cached_response = Rails.cache.fetch(cache_identifier) do
126
- http_response.to_json
127
- end
133
+ Rails.cache.write(cache_identifier, http_response.to_json) if http_response.present?
134
+ cached_response = Rails.cache.fetch(cache_identifier)
128
135
 
129
136
  @response = json?(cached_response) ? JSON.parse(cached_response) : cached_response
130
137
  set_response_attributes!
@@ -139,5 +146,8 @@ module Editmode
139
146
  @branch_id = response['branch_id']
140
147
  end
141
148
 
149
+ def no_response_received(id = "")
150
+ "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."
151
+ end
142
152
  end
143
153
  end
@@ -1,4 +1,5 @@
1
- require 'editmode/chunk_value'
1
+ require 'rails/engine'
2
+ require 'action_controller'
2
3
  require 'editmode/helper'
3
4
 
4
5
  module Editmode
@@ -5,34 +5,17 @@ module Editmode
5
5
  field, options = parse_arguments(args)
6
6
  begin
7
7
  chunk = Editmode::ChunkValue.new(identifier, options.merge({raw: true}))
8
- render_noneditable_chunk(chunk, field, options)
8
+
9
+ if chunk.chunk_type == 'collection_item'
10
+ chunk.field(field)
11
+ else
12
+ chunk.content
13
+ end
9
14
  rescue => er
10
- puts er
15
+ Rails.logger.info "#{er}: We can't render content for #{identifier}"
11
16
  end
12
17
  end
13
18
 
14
- def render_noneditable_chunk(chunk, field=nil, options=nil)
15
- return render_collection_item(chunk, field, options) if chunk.chunk_type == 'collection_item'
16
-
17
- render_content(chunk, options)
18
- end
19
-
20
- def render_collection_item(chunk, field=nil, options=nil)
21
- return render_image(chunk.field(field), options[:class]) if chunk.field_chunk(field)['chunk_type'] == 'image'
22
-
23
- chunk.field(field)
24
- end
25
-
26
- def render_content(chunk, options=nil)
27
- return render_image(chunk.content, options[:class]) if chunk.chunk_type == 'image'
28
-
29
- chunk.content
30
- end
31
-
32
- def render_image(content, css_class=nil)
33
- image_tag(content, class: css_class)
34
- end
35
-
36
19
  def render_custom_field_raw(label, options={})
37
20
  e(@custom_field_chunk["identifier"], label, options.merge({response: @custom_field_chunk}))
38
21
  end
@@ -50,4 +33,4 @@ module Editmode
50
33
  return field, options
51
34
  end
52
35
  end
53
- end
36
+ end
@@ -1,3 +1,4 @@
1
+ require 'rails/railtie'
1
2
  module Editmode
2
3
  class Railtie < Rails::Railtie
3
4
  initializer "editmode" do |app|
@@ -1,3 +1,3 @@
1
1
  module Editmode
2
- VERSION = "1.2.6"
2
+ VERSION = "1.3.1"
3
3
  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.2.6
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Ennis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-18 00:00:00.000000000 Z
11
+ date: 2021-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []
112
- rubygems_version: 3.0.8
112
+ rubygems_version: 3.2.4
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: Editmode allows you to turn plain text in your rails app into easily inline-editable