editmode 0.0.9.39 → 0.0.9.111

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: 5efc7a653779c9512a8d0e280f41f2e95bfedfd09eb242ff755a3cfdb5c7ac7e
4
- data.tar.gz: 8d1503bd4bc148b966abd4f662153015130d9297210f1a2eab5ea5ee6f9cd602
3
+ metadata.gz: cbecf78a24885247f80796ce982265a69506f3fc04ccf666663fa6398f9ab32d
4
+ data.tar.gz: 303b3219bfebcb4f319ec21eac3f036da0ccfeccb502390f460122df6c426777
5
5
  SHA512:
6
- metadata.gz: 58b77302710392b9fd1fd01d15e719e24cd1abbe21c38cd041050a479d5717c8a670024c0a0877719e72d5bba49e72aa56092523b2e1dfc23ec1040cca7aef66
7
- data.tar.gz: 8cc0ca43f7a1de0e4719e962e5d52692e1f413561092853d675eb960487e08a8bd48125da3a3eab526925bbf0251c25ab9f4de56cade9d948e93ffa45a68a21d
6
+ metadata.gz: 89215dc64c872980e04a77cb8c7cc56eb615cecf816c6718a9859ce70fed46fbcf8073580630a9ed4d6afc37679cc326156d620ee8e730af3aaa2e72a57d40db
7
+ data.tar.gz: d65542f04585308788f00d2add18774d242395069be3e0a7d7d421c8665f27ac8ea59e84f981b9398c2b6919060c37cd6c4b3b1967afdb35c45b64139b2bb902
@@ -1,10 +1,12 @@
1
1
  class EditmodeController < ApplicationController
2
2
 
3
3
  def clear_cache
4
-
5
- Rails.cache.delete("bit_#{params[:identifier]}")
6
-
7
- if params[:identifier]
4
+ if params[:full]
5
+ Rails.cache.clear
6
+ render status: 200, json: {:response => "success"}
7
+ elsif params[:identifier]
8
+ Rails.cache.delete("chunk_#{params[:identifier]}")
9
+ Rails.cache.delete("chunk_#{params[:identifier]}_type")
8
10
  render status: 200, json: {:response => "success"}
9
11
  else
10
12
  render status: 404, json: {:response => "no identifier specified"}
@@ -1,111 +1,138 @@
1
1
  module EditModeRails
2
-
3
2
  module ActionViewExtensions
4
3
  module EditModeHelper
5
4
 
6
5
  require 'httparty'
7
6
 
8
7
  def api_version
9
- "v1"
8
+ # Todo Add Header Version
10
9
  end
11
10
 
12
11
  def api_root_url
13
- ENV["EDITMODE_OVERRIDE_API_URL"] || "https://www.editmode.app/api"
12
+ ENV["EDITMODE_OVERRIDE_API_URL"] || "https://api.editmode.com"
14
13
  end
15
14
 
16
- def versioned_api_url
17
- "#{api_root_url}/#{api_version}"
18
- end
19
-
20
15
  def chunk_collection(collection_identifier,has_tags=[])
16
+ branch_params = params[:em_branch_id].present? ? "branch_id=#{params[:em_branch_id]}" : ""
21
17
  begin
22
- url = "#{versioned_api_url}/chunks?collection_identifier=#{collection_identifier}"
18
+ url = "#{api_root_url}/chunks?collection_identifier=#{collection_identifier}&#{branch_params}"
23
19
  response = HTTParty.get(url)
20
+ raise "No response received" unless response.code == 200
24
21
  chunks = response["chunks"]
25
22
  return chunks
26
23
  rescue => error
27
24
  puts error
28
- []
25
+ return []
29
26
  end
30
27
  end
31
28
 
32
- def chunk_property(chunk_info,custom_field_identifier=nil,options={})
33
-
34
- chunk_identifier = chunk_info["identifier"]
29
+ def chunk_field_value(parent_chunk_object, custom_field_identifier,options={})
35
30
 
36
- if custom_field_identifier
37
- custom_field_info = chunk_info["custom_fields"].select{|custom_field| custom_field["custom_field_identifier"] == custom_field_identifier }[0]
38
- if custom_field_info.present?
39
- chunk_display("",chunk_identifier,options,custom_field_info)
31
+ begin
32
+ chunk_identifier = parent_chunk_object["identifier"]
33
+ custom_field_item = parent_chunk_object["content"].detect {|f| f["custom_field_identifier"] == custom_field_identifier }
34
+
35
+ if custom_field_item.present?
36
+ render_chunk_content(
37
+ custom_field_item["identifier"],
38
+ custom_field_item["content"],
39
+ custom_field_item["chunk_type"],
40
+ { parent_identifier: chunk_identifier }.merge(options)
41
+ )
40
42
  end
41
- else
42
- chunk_display("",chunk_identifier,options)
43
+ rescue => errors
44
+ puts errors
45
+ content_tag(:span, "&nbsp".html_safe)
43
46
  end
47
+
44
48
  end
45
49
 
46
- def chunk_display(label,identifier,options={},custom_field_info={})
47
-
48
- begin
49
- if custom_field_info.present?
50
- chunk_content = custom_field_info["value"]
51
- else
52
- chunk_content = Rails.cache.fetch("bit_#{identifier}") do
53
- url = "#{versioned_api_url}/bits/#{identifier}"
54
- response = HTTParty.get(url)
55
- chunk_content = response['content']
56
- end
57
- end
50
+ def render_chunk_content(chunk_identifier,chunk_content,chunk_type,options={})
58
51
 
59
- display_type = options[:display_type] || "span"
52
+ begin
53
+ # Always sanitize the content!!
54
+ chunk_content = ActionController::Base.helpers.sanitize(chunk_content)
55
+
60
56
  css_class = options[:css_class]
61
- content_type = "plain"
62
-
63
- # Simple check to see if returned chunk contains html. Regex will need to be improved
64
- if /<[a-z][\s\S]*>/i.match(chunk_content)
65
- content_type = "rich"
66
- chunk_content = sanitize chunk_content.html_safe
67
- elsif chunk_content.include? "\n"
68
- content_type = "rich"
69
- renderer = Redcarpet::Render::HTML.new(no_links: true, hard_wrap: true)
70
- markdown = Redcarpet::Markdown.new(renderer, extensions = {})
71
- chunk_content = markdown.render(chunk_content).html_safe
57
+
58
+ if chunk_type == "image"
59
+ display_type = "image"
60
+ else
61
+ display_type = options[:display_type] || "span"
72
62
  end
73
63
 
74
- additional_data_properties = custom_field_info.present? ? { :custom_field_identifier => custom_field_info["custom_field_identifier"] } : {}
64
+ chunk_data = { :chunk => chunk_identifier, :chunk_editable => false }
65
+
66
+ if options[:parent_identifier].present?
67
+ chunk_data.merge!({parent_identifier: options[:parent_identifier]})
68
+ end
75
69
 
76
70
  case display_type
77
71
  when "span"
78
- if content_type == "rich"
79
- content_tag(:span, :class => css_class, :data => {:chunk => identifier, :chunk_editable => false}.merge(additional_data_properties) ) do
80
- chunk_content
72
+ if chunk_type == "rich_text"
73
+ content_tag("em-span", :class => css_class, :data => chunk_data ) do
74
+ chunk_content.html_safe
81
75
  end
82
76
  else
83
- content_tag(:span, :class => css_class, :data => {:chunk => identifier, :chunk_editable => true}.merge(additional_data_properties)) do
77
+ content_tag("em-span", :class => css_class, :data => chunk_data.merge!({:chunk_editable => true}) ) do
84
78
  chunk_content
85
79
  end
86
80
  end
87
- when "raw"
88
- chunk_content
81
+ when "image"
82
+ image_tag(chunk_content, :data => chunk_data, :class => css_class)
89
83
  end
90
- rescue => error
91
- puts error
92
- end
84
+ rescue => errors
85
+ puts errors
86
+ content_tag("em-span", "&nbsp".html_safe)
87
+ end
93
88
 
94
89
  end
95
90
 
96
- def bit(label,identifier,options={})
97
- chunk_display(label,identifier)
98
- end
91
+ def chunk_display(label,identifier,options={},&block)
92
+ branch_id = params[:em_branch_id]
93
+ # This method should never show an error.
94
+ # If anything goes wrong fetching content
95
+ # We should just show blank content, not
96
+ # prevent the page from loading.
97
+ begin
98
+ branch_params = branch_id.present? ? "branch_id=#{branch_id}" : ""
99
+ cache_identifier = "chunk_#{identifier}#{branch_id}"
100
+ url = "#{api_root_url}/chunks/#{identifier}?#{branch_params}"
101
+ cached_content_present = Rails.cache.exist?(cache_identifier)
102
+
103
+ if !cached_content_present
104
+ response = HTTParty.get(url)
105
+ response_received = true if response.code == 200
106
+ end
99
107
 
100
- def chunk(label,identifier,options={})
101
- chunk_display(label,identifier)
102
- end
108
+ if !cached_content_present && !response_received
109
+ raise "No response received"
110
+ else
111
+
112
+ chunk_content = Rails.cache.fetch(cache_identifier) do
113
+ response['content']
114
+ end
115
+
116
+ chunk_type = Rails.cache.fetch("#{cache_identifier}_type") do
117
+ response['chunk_type']
118
+ end
119
+
120
+ render_chunk_content(identifier,chunk_content,chunk_type, options)
121
+
122
+ end
123
+
124
+ rescue => error
125
+ # Show fallback content by default
126
+ return content_tag("em-span", &block) if block_given?
127
+ # Otherwise show a span with no content to
128
+ # maintain layout
129
+ content_tag("em-span", "&nbsp".html_safe)
130
+ end
103
131
 
104
- def raw_chunk(label,identifier,options={})
105
- chunk_display(label,identifier,options.merge(:display_type => "raw"))
106
132
  end
107
-
133
+
134
+ alias_method :chunk, :chunk_display
135
+
108
136
  end
109
137
  end
110
-
111
138
  end
@@ -41,7 +41,7 @@ module EditModeRails
41
41
  end
42
42
 
43
43
  def html_content_type?
44
- response.content_type == 'text/html'
44
+ response.content_type.try(:include?,'text/html')
45
45
  end
46
46
 
47
47
  def response_has_closing_body_tag?
@@ -17,6 +17,7 @@ module EditModeRails
17
17
  def output
18
18
 
19
19
  str = <<-EDITMODE_SCRIPT
20
+ <script>window.chunksProjectIdentifier = '#{Editmode.project_id}'</script>
20
21
  <script src="#{script_url}" async ></script>
21
22
  EDITMODE_SCRIPT
22
23
 
@@ -25,7 +26,7 @@ module EditModeRails
25
26
  end
26
27
 
27
28
  def script_url
28
- ENV["EDITMODE_OVERRIDE_SCRIPT_URL"] || "https://www.editmode.app/assets/chunks.js"
29
+ ENV["EDITMODE_OVERRIDE_SCRIPT_URL"] || "https://static.editmode.com/editmode@1.0.0/dist/editmode.js"
29
30
  end
30
31
 
31
32
  end
@@ -1,3 +1,3 @@
1
1
  module EditModeRails
2
- VERSION = "0.0.9.39"
2
+ VERSION = "0.0.9.111"
3
3
  end
@@ -1,14 +1,63 @@
1
1
  require "active_support/dependencies"
2
-
3
2
  require "editmode-rails/version"
4
-
5
3
  require 'editmode-rails/script_tag'
6
4
  require 'editmode-rails/action_view_extensions/editmode_helper'
7
5
  require 'editmode-rails/auto_include_filter'
8
6
  require 'editmode-rails/railtie' if defined? Rails
7
+ require 'editmode-rails/engine' if defined?(Rails)
8
+
9
+ class Editmode
10
+ class << self
11
+ include ::EditModeRails::ActionViewExtensions::EditModeHelper
12
+ def project_id
13
+ @config.project_id
14
+ end
15
+
16
+ def access_token
17
+ @config.access_token
18
+ end
19
+
20
+ def config
21
+ # Todo: Instantiate in editmode initializer or base controllers
22
+ # Todo: Add a generator to create initializer an file?
23
+ @config ||= Configuration.new
24
+ end
25
+
26
+ def setup
27
+ yield config
28
+ end
29
+
30
+ def chunk_value(identifier, **options)
31
+ body = options[:values].presence || {}
32
+ field_id = options[:field_id].presence
33
+ branch_id = options[:branch_id].presence
34
+
35
+ branch_params = branch_id.present? ? "branch_id=#{branch_id}" : ""
36
+ cache_identifier = "chunk_#{identifier}#{branch_id}"
37
+ url = "#{api_root_url}/chunks/#{identifier}?#{branch_params}"
38
+
39
+ begin
40
+ response = HTTParty.get(url, query: body)
41
+ response_received = true if response.code == 200
9
42
 
10
- module EditModeRails
11
- # Your code goes here...
12
- end
43
+ if !response_received
44
+ raise "No response received"
45
+ else
46
+ if field_id.present?
47
+ chunk = response["content"].detect {|f| f["custom_field_identifier"] == field_id }
48
+ chunk['content']
49
+ else
50
+ response['content']
51
+ end
52
+ end
53
+ rescue => error
54
+ # Todo: Send a log to editmode prob like sentry
55
+ return "No response received"
56
+ end
57
+ end
58
+ end
13
59
 
14
- require 'editmode-rails/engine' if defined?(Rails)
60
+ class Configuration
61
+ attr_accessor :project_id, :access_token
62
+ end
63
+ 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: 0.0.9.39
4
+ version: 0.0.9.111
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-02-28 00:00:00.000000000 Z
11
+ date: 2020-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  requirements: []
108
- rubygems_version: 3.0.3
108
+ rubygems_version: 3.0.8
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: Editmode allows you to turn plain text in your rails app into easily inline-editable