lcms-engine 0.1.0 → 0.1.2

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +17 -1
  4. data/Dockerfile +28 -0
  5. data/Gemfile +2 -1
  6. data/README.md +23 -17
  7. data/app/assets/config/lcms_engine_manifest.js +1 -8
  8. data/app/assets/javascripts/lcms/engine/admin/application.js +6 -3
  9. data/app/assets/javascripts/lcms/engine/application.js +0 -2
  10. data/app/assets/javascripts/lcms/engine/application_lti.js +0 -2
  11. data/app/assets/stylesheets/lcms/engine/components/_instruction-cards.scss +0 -3
  12. data/app/controllers/lcms/engine/admin/admin_controller.rb +4 -4
  13. data/app/helpers/lcms/engine/view_helper.rb +0 -4
  14. data/app/javascript/components/admin/association-picker/AssociationPickerItem.jsx +2 -0
  15. data/app/javascript/components/admin/association-picker/AssociationPickerResults.jsx +2 -0
  16. data/app/javascript/components/admin/association-picker/AssociationPickerWindow.jsx +1 -1
  17. data/app/javascript/components/admin/picker/pickerWindowWrapper.jsx +1 -1
  18. data/app/javascript/components/admin/resource-picker/ResourcePicker.jsx +2 -2
  19. data/app/javascript/components/paginate/PaginationBoxView.jsx +1 -1
  20. data/app/javascript/components/paginate/PaginationListView.jsx +1 -1
  21. data/app/jobs/concerns/lcms/engine/nested_resque_job.rb +1 -1
  22. data/app/jobs/lcms/engine/material_generate_job.rb +1 -1
  23. data/app/models/concerns/lcms/engine/partable.rb +27 -0
  24. data/app/models/lcms/engine/document.rb +3 -7
  25. data/app/models/lcms/engine/document_part.rb +1 -1
  26. data/app/models/lcms/engine/material.rb +2 -6
  27. data/app/presenters/lcms/engine/content_presenter.rb +9 -5
  28. data/app/presenters/lcms/engine/document_presenter.rb +7 -11
  29. data/app/presenters/lcms/engine/material_presenter.rb +1 -11
  30. data/app/services/lcms/engine/document_build_service.rb +1 -17
  31. data/app/services/lcms/engine/material_build_service.rb +3 -12
  32. data/app/views/layouts/lcms/engine/application.html.erb +0 -4
  33. data/app/views/layouts/lcms/engine/lti.html.erb +0 -4
  34. data/db/migrate/20200217160930_change_document_parts_to_polymorphic.rb +36 -0
  35. data/db/migrate/20200218144849_drop_material_parts_table.rb +7 -0
  36. data/db/schema.rb +9 -22
  37. data/docker-compose.yml +29 -0
  38. data/lcms-engine.gemspec +25 -26
  39. data/lib/doc_template/tags/base_tag.rb +1 -1
  40. data/lib/document_exporter/base.rb +1 -4
  41. data/lib/lcms/engine/engine.rb +5 -4
  42. data/lib/lcms/engine/version.rb +1 -1
  43. data/lib/lt/lcms/metadata/context.rb +1 -1
  44. data/spec/controllers/admin/admin_controller_spec.rb +31 -0
  45. data/spec/dummy/.env.docker +5 -0
  46. data/spec/dummy/config/database.yml +1 -1
  47. data/spec/dummy/config/lcms-admin.yml +3 -3
  48. data/spec/dummy/config/routes.rb +2 -0
  49. data/spec/dummy/db/schema.rb +10 -23
  50. data/spec/factories/document_parts.rb +1 -1
  51. data/spec/lib/doc_template/tags/base_tag_spec.rb +36 -0
  52. data/yarn.lock +3 -3
  53. metadata +131 -121
  54. data/app/assets/javascripts/lcms/engine/generated/translations.js +0 -40
  55. data/app/assets/javascripts/lcms/engine/pdf_js_preview.js +0 -52
  56. data/vendor/assets/javascripts/pdf.js +0 -10902
  57. data/vendor/assets/javascripts/pdf.worker.js +0 -43104
  58. data/vendor/assets/javascripts/pdfobject.js +0 -254
@@ -63,11 +63,15 @@ module Lcms
63
63
  config[:padding].map { |k, v| "#{align_type}-#{k}:#{v};" }.join
64
64
  end
65
65
 
66
- def render_content(context_type, options = {})
67
- options[:parts_index] = document_parts_index
68
- rendered_layout = DocumentRenderer::Part.call(layout_content(context_type), options)
69
- content = DocTemplate.sanitizer.clean_content(rendered_layout, context_type)
70
- Lcms::Engine::ReactMaterialsResolver.resolve(content, self)
66
+ private
67
+
68
+ def document_parts_index
69
+ @document_parts_index ||= document_parts.pluck(:placeholder, :anchor, :content, :optional)
70
+ .map { |p| [p[0], { anchor: p[1], content: p[2], optional: p[3] }] }.to_h
71
+ end
72
+
73
+ def layout_content(context_type)
74
+ layout(context_type).content
71
75
  end
72
76
  end
73
77
  end
@@ -124,6 +124,13 @@ module Lcms
124
124
  html.to_html
125
125
  end
126
126
 
127
+ def render_content(context_type, options = {})
128
+ options[:parts_index] = document_parts_index
129
+ rendered_layout = DocumentRenderer::Part.call(layout_content(context_type), options)
130
+ content = DocTemplate.sanitizer.clean_content(rendered_layout, context_type)
131
+ Lcms::Engine::ReactMaterialsResolver.resolve(content, self)
132
+ end
133
+
127
134
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
128
135
  def short_breadcrumb(join_with: ' / ', with_short_lesson: false, with_subject: true, unit_level: false)
129
136
  unless unit_level
@@ -200,17 +207,6 @@ module Lcms
200
207
  def unit
201
208
  @unit ||= resource&.parent
202
209
  end
203
-
204
- private
205
-
206
- def document_parts_index
207
- @document_parts_index ||= document_parts.pluck(:placeholder, :anchor, :content, :optional)
208
- .map { |p| [p[0], { anchor: p[1], content: p[2], optional: p[3] }] }.to_h
209
- end
210
-
211
- def layout_content(context_type)
212
- layout(context_type).content
213
- end
214
210
  end
215
211
  end
216
212
  end
@@ -4,10 +4,8 @@ module Lcms
4
4
  module Engine
5
5
  class MaterialPresenter < Lcms::Engine::ContentPresenter
6
6
  attr_accessor :document
7
- attr_reader :parsed_document
8
7
 
9
8
  delegate :short_url, :subject, to: :document
10
- delegate :parts, to: :parsed_document
11
9
 
12
10
  DEFAULT_TITLE = 'Material'
13
11
 
@@ -28,7 +26,7 @@ module Lcms
28
26
  end
29
27
 
30
28
  def content_for(context_type)
31
- layout(context_type)&.content
29
+ render_content(context_type)
32
30
  end
33
31
 
34
32
  def content_type
@@ -138,14 +136,6 @@ module Lcms
138
136
 
139
137
  private
140
138
 
141
- def document_parts_index
142
- @document_parts_index ||= parts.map { |p| [p[:placeholder], { anchor: p[:anchor], content: p[:content] }] }.to_h
143
- end
144
-
145
- def layout_content(context_type)
146
- parts.find { |p| p[:part_type] == :layout && p[:context_type] == context_type }&.dig(:content) || ''
147
- end
148
-
149
139
  def material_links
150
140
  @material_links ||= (document || @lesson).links['materials']&.dig(id.to_s)
151
141
  end
@@ -27,7 +27,7 @@ module Lcms
27
27
  @document.update! content_key => content
28
28
 
29
29
  build
30
- create_parts
30
+ @document.create_parts_for(template)
31
31
 
32
32
  ActiveSupport::Notifications.instrument EVENT_BUILT, id: document.id
33
33
 
@@ -132,22 +132,6 @@ module Lcms
132
132
  end
133
133
  end
134
134
 
135
- def create_parts
136
- template.parts.each do |part|
137
- document.document_parts.create!(
138
- active: true,
139
- anchor: part[:anchor],
140
- content: part[:content],
141
- context_type: part[:context_type],
142
- data: part[:data],
143
- materials: part[:materials],
144
- optional: part[:optional],
145
- part_type: part[:part_type],
146
- placeholder: part[:placeholder]
147
- )
148
- end
149
- end
150
-
151
135
  def document_params
152
136
  {
153
137
  activity_metadata: template.metadata_service.try(:activity_metadata),
@@ -39,7 +39,7 @@ module Lcms
39
39
  )
40
40
  )
41
41
 
42
- material.material_parts.delete_all
42
+ material.document_parts.delete_all
43
43
 
44
44
  basename = DocumentGenerator.material_presenter.new(material).material_filename
45
45
  pdf_filename = "#{basename}#{ContentPresenter::PDF_EXT}"
@@ -71,17 +71,8 @@ module Lcms
71
71
  )
72
72
  )
73
73
 
74
- material.material_parts.delete_all
75
-
76
- presenter = DocumentGenerator.material_presenter.new(material, parsed_document: template)
77
- DocTemplate.context_types.each do |context_type|
78
- material.material_parts.create!(
79
- active: true,
80
- content: presenter.render_content(context_type),
81
- context_type: context_type,
82
- part_type: :layout
83
- )
84
- end
74
+ material.document_parts.delete_all
75
+ material.create_parts_for(template)
85
76
  material
86
77
  end
87
78
 
@@ -10,13 +10,9 @@
10
10
  <%= render partial: 'lcms/engine/shared/open_graph_meta' %>
11
11
  <%= render partial: 'lcms/engine/shared/favicon' %>
12
12
  <script>document.querySelector('html').className = 'js';</script>
13
- <script>
14
- window._PDFJSworkerSrc = '<%= asset_url('pdf.worker.js') %>'
15
- </script>
16
13
  <%= stylesheet_link_tag 'lcms/engine/application', media: 'all', 'data-turbolinks-track' => 'reload' %>
17
14
  <%= javascript_include_tag '//s7.addthis.com/js/300/addthis_widget.js#async=1' %>
18
15
  <%= javascript_include_tag 'lcms/engine/application', 'data-turbolinks-track' => 'reload' %>
19
- <%= javascript_include_tag 'lcms/engine/pdf_js_preview', 'data-turbolinks-track' => 'reload' if generic_page? %>
20
16
  <%= render partial: 'lcms/engine/shared/google_analytics' %>
21
17
  <%= render partial: 'lcms/engine/shared/heap_analytics' %>
22
18
  <%= csrf_meta_tags %>
@@ -5,13 +5,9 @@
5
5
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
7
7
  <script>document.querySelector('html').className = 'js';</script>
8
- <script>
9
- window._PDFJSworkerSrc = '<%= asset_url('pdf.worker.js') %>'
10
- </script>
11
8
  <%= stylesheet_link_tag 'lcms/engine/application', media: 'all', 'data-turbolinks-track' => 'reload' %>
12
9
  <%= javascript_include_tag '//s7.addthis.com/js/300/addthis_widget.js#async=1' %>
13
10
  <%= javascript_include_tag 'lcms/engine/application_lti', 'data-turbolinks-track' => 'reload' %>
14
- <%= javascript_include_tag 'lcms/engine/pdf_js_preview', 'data-turbolinks-track' => 'reload' if generic_page? %>
15
11
  <%= csrf_meta_tags %>
16
12
  <% if content_for?(:canonical_url) %>
17
13
  <link rel=canonical href='<%= yield(:canonical_url) %>'>
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ChangeDocumentPartsToPolymorphic < Lcms::Engine::Migration
4
+ def up
5
+ add_reference :document_parts, :renderer, polymorphic: true, index: true
6
+ Lcms::Engine::DocumentPart.update_all("renderer_id = document_id, renderer_type = 'Lcms::Engine::Document'")
7
+ Lcms::Engine::MaterialPart.find_each do |material_part|
8
+ Lcms::Engine::DocumentPart.create!(
9
+ active: material_part.active,
10
+ content: material_part.content,
11
+ context_type: material_part.context_type,
12
+ part_type: material_part.part_type,
13
+ renderer_id: material_part.material_id,
14
+ renderer_type: 'Lcms::Engine::Material'
15
+ )
16
+ end
17
+ remove_column :document_parts, :document_id
18
+ end
19
+
20
+ def down
21
+ Lcms::Engine::MaterialPart.delete_all
22
+ Lcms::Engine::DocumentPart.where(renderer_type: 'Lcms::Engine::Material').find_each do |material_part|
23
+ Lcms::Engine::MaterialPart.create!(
24
+ active: material_part.active,
25
+ content: material_part.content,
26
+ context_type: material_part.context_type,
27
+ part_type: material_part.part_type,
28
+ material_id: material_part.renderer_id
29
+ )
30
+ end
31
+ Lcms::Engine::DocumentPart.where(renderer_type: 'Lcms::Engine::Material').delete_all
32
+ add_reference :document_parts, :document, index: true, foreign_key: true
33
+ Lcms::Engine::DocumentPart.update_all('document_id = renderer_id')
34
+ remove_reference :document_parts, :renderer, polymorphic: true
35
+ end
36
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DropMaterialPartsTable < Lcms::Engine::Migration
4
+ def change
5
+ drop_table :material_parts
6
+ end
7
+ end
data/db/schema.rb CHANGED
@@ -62,24 +62,25 @@ ActiveRecord::Schema.define(version: 0) do
62
62
  add_index "document_bundles", ["resource_id"], name: "index_document_bundles_on_resource_id", using: :btree
63
63
 
64
64
  create_table "document_parts", force: :cascade do |t|
65
- t.integer "document_id"
66
65
  t.text "content"
67
66
  t.string "part_type"
68
67
  t.boolean "active"
69
- t.datetime "created_at", null: false
70
- t.datetime "updated_at", null: false
68
+ t.datetime "created_at", null: false
69
+ t.datetime "updated_at", null: false
71
70
  t.string "placeholder"
72
- t.text "materials", default: [], null: false, array: true
73
- t.integer "context_type", default: 0
71
+ t.text "materials", default: [], null: false, array: true
72
+ t.integer "context_type", default: 0
74
73
  t.string "anchor"
75
- t.boolean "optional", default: false, null: false
76
- t.jsonb "data", default: {}, null: false
74
+ t.boolean "optional", default: false, null: false
75
+ t.jsonb "data", default: {}, null: false
76
+ t.integer "renderer_id"
77
+ t.string "renderer_type"
77
78
  end
78
79
 
79
80
  add_index "document_parts", ["anchor"], name: "index_document_parts_on_anchor", using: :btree
80
81
  add_index "document_parts", ["context_type"], name: "index_document_parts_on_context_type", using: :btree
81
- add_index "document_parts", ["document_id"], name: "index_document_parts_on_document_id", using: :btree
82
82
  add_index "document_parts", ["placeholder"], name: "index_document_parts_on_placeholder", using: :btree
83
+ add_index "document_parts", ["renderer_type", "renderer_id"], name: "index_document_parts_on_renderer_type_and_renderer_id", using: :btree
83
84
 
84
85
  create_table "documents", force: :cascade do |t|
85
86
  t.string "file_id"
@@ -152,18 +153,6 @@ ActiveRecord::Schema.define(version: 0) do
152
153
 
153
154
  add_index "leadership_posts", ["order", "last_name"], name: "index_leadership_posts_on_order_and_last_name", using: :btree
154
155
 
155
- create_table "material_parts", force: :cascade do |t|
156
- t.integer "material_id"
157
- t.text "content"
158
- t.integer "context_type", default: 0
159
- t.string "part_type"
160
- t.boolean "active"
161
- t.datetime "created_at", null: false
162
- t.datetime "updated_at", null: false
163
- end
164
-
165
- add_index "material_parts", ["material_id"], name: "index_material_parts_on_material_id", using: :btree
166
-
167
156
  create_table "materials", force: :cascade do |t|
168
157
  t.string "file_id", null: false
169
158
  t.string "identifier"
@@ -431,10 +420,8 @@ ActiveRecord::Schema.define(version: 0) do
431
420
 
432
421
  add_foreign_key "copyright_attributions", "resources"
433
422
  add_foreign_key "document_bundles", "resources"
434
- add_foreign_key "document_parts", "documents"
435
423
  add_foreign_key "documents_materials", "documents"
436
424
  add_foreign_key "documents_materials", "materials"
437
- add_foreign_key "material_parts", "materials"
438
425
  add_foreign_key "reading_assignment_texts", "reading_assignment_authors"
439
426
  add_foreign_key "resource_additional_resources", "resources"
440
427
  add_foreign_key "resource_additional_resources", "resources", column: "additional_resource_id"
@@ -0,0 +1,29 @@
1
+ version: '3'
2
+ services:
3
+ db:
4
+ image: postgres:11.5-alpine
5
+ ports:
6
+ - 5432:5432
7
+ volumes:
8
+ - postgres:/var/lib/postgresql/data
9
+
10
+ redis:
11
+ image: redis:5.0.5-alpine
12
+ ports:
13
+ - 6379
14
+
15
+ app:
16
+ build: .
17
+ command: bash -c "bundle install && yarn && tail -f /dev/null"
18
+ env_file:
19
+ - spec/dummy/.env.docker
20
+ environment:
21
+ REDIS_URL: redis://redis:6379/1
22
+ volumes:
23
+ - .:/app
24
+ depends_on:
25
+ - db
26
+ - redis
27
+
28
+ volumes:
29
+ postgres:
data/lcms-engine.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency 'acts-as-taggable-on', '~> 5.0'
27
27
  s.add_dependency 'acts_as_list', '~> 0.9.10'
28
28
  s.add_dependency 'addressable', '~> 2.5.1'
29
- s.add_dependency 'airbrake'
29
+ s.add_dependency 'airbrake', ' ~> 10'
30
30
  s.add_dependency 'autoprefixer-rails', '~> 6.4.0'
31
31
  s.add_dependency 'aws-sdk-rails', '~> 1.0'
32
32
  s.add_dependency 'backport_new_renderer', '~> 1.0.0'
@@ -50,20 +50,19 @@ Gem::Specification.new do |s|
50
50
  s.add_dependency 'foundation-rails', '~> 6.2.1'
51
51
  s.add_dependency 'google-api-client', '~> 0.30'
52
52
  s.add_dependency 'heap', '~> 1.0'
53
- s.add_dependency 'hiredis'
54
- s.add_dependency 'httparty'
55
- s.add_dependency 'i18n-js', '~> 3.0.2'
53
+ s.add_dependency 'hiredis', '~> 0.6'
54
+ s.add_dependency 'httparty', '~> 0.16'
56
55
  s.add_dependency 'jbuilder', '~> 2.0'
57
- s.add_dependency 'jquery-rails'
56
+ s.add_dependency 'jquery-rails', '~> 4.3'
58
57
  s.add_dependency 'js-routes', '~> 1.1.2'
59
58
  s.add_dependency 'lt-google-api', '~> 0.1'
60
59
  s.add_dependency 'lt-lcms', '~> 0.2'
61
60
  s.add_dependency 'migration_data', '~> 0.2.1'
62
- s.add_dependency 'mini_magick', '>= 4.9.4'
63
- s.add_dependency 'nested_form'
64
- s.add_dependency 'newrelic_rpm'
61
+ s.add_dependency 'mini_magick', '~> 4.9', '>= 4.9.4'
62
+ s.add_dependency 'nested_form', '~> 0.3'
63
+ s.add_dependency 'newrelic_rpm', '~> 6.9'
65
64
  s.add_dependency 'nikkou', '~> 0.0.5'
66
- s.add_dependency 'nokogiri', '>= 1.10.4'
65
+ s.add_dependency 'nokogiri', '~> 1.10', '>= 1.10.4'
67
66
  s.add_dependency 'oj', '~> 3'
68
67
  s.add_dependency 'oj_mimic_json', '~> 1.0.1'
69
68
  s.add_dependency 'pandoc-ruby', '~> 2.0.1'
@@ -71,8 +70,8 @@ Gem::Specification.new do |s|
71
70
  s.add_dependency 'pg', '0.20'
72
71
  s.add_dependency 'pg_search', '~> 2.1'
73
72
  s.add_dependency 'postgres_ext', '~> 3.0'
74
- s.add_dependency 'rack-mini-profiler'
75
- s.add_dependency 'rails', '4.2.11.1'
73
+ s.add_dependency 'rack-mini-profiler', '~> 2'
74
+ s.add_dependency 'rails', '~> 4.2.11'
76
75
  s.add_dependency 'rails-assets-classnames', '~> 2.2.3'
77
76
  s.add_dependency 'rails-assets-es6-promise', '~> 3.1.2'
78
77
  s.add_dependency 'rails-assets-eventemitter3', '~> 1.2.0'
@@ -83,13 +82,13 @@ Gem::Specification.new do |s|
83
82
  s.add_dependency 'rails-assets-selectize', '~> 0.12.1'
84
83
  s.add_dependency 'ransack', '~> 1.7.0'
85
84
  s.add_dependency 'react-rails', '~> 2.6.0'
86
- s.add_dependency 'readthis'
85
+ s.add_dependency 'readthis', '~> 2'
87
86
  s.add_dependency 'redis', '< 4'
88
- s.add_dependency 'resque'
89
- s.add_dependency 'resque-scheduler'
87
+ s.add_dependency 'resque', '~> 2'
88
+ s.add_dependency 'resque-scheduler', '~> 4.4'
90
89
  s.add_dependency 'rest-client', '~> 1.8'
91
90
  s.add_dependency 'ruby-progressbar', '~> 1.7', '>= 1.7.5'
92
- s.add_dependency 'rubyzip', '>= 1.3.0'
91
+ s.add_dependency 'rubyzip', '~> 2'
93
92
  s.add_dependency 'sanitize', '~> 5.0'
94
93
  s.add_dependency 'sass-rails', '~> 5.0'
95
94
  s.add_dependency 'simple_form', '~> 3.5'
@@ -101,19 +100,18 @@ Gem::Specification.new do |s|
101
100
  s.add_dependency 'validate_url', '~> 1.0'
102
101
  s.add_dependency 'virtus', '~> 1.0.5'
103
102
  s.add_dependency 'will_paginate', '~> 3.0.7'
104
- s.add_dependency 'will_paginate-bootstrap'
103
+ s.add_dependency 'will_paginate-bootstrap', '~> 1'
105
104
 
106
- s.add_development_dependency 'capybara-screenshot'
107
- s.add_development_dependency 'capybara-selenium'
105
+ s.add_development_dependency 'capybara-screenshot', '~> 1'
108
106
  s.add_development_dependency 'database_cleaner', '~> 1'
109
107
  s.add_development_dependency 'dotenv-rails', '~> 2.2'
110
108
  s.add_development_dependency 'email_spec', '~> 2.1'
111
- s.add_development_dependency 'factory_bot'
112
- s.add_development_dependency 'faker'
109
+ s.add_development_dependency 'factory_bot', '~> 5'
110
+ s.add_development_dependency 'faker', '~> 2.1'
113
111
  s.add_development_dependency 'guard-livereload', '~> 2.5', '>= 2.5.2'
114
- s.add_development_dependency 'mailcatcher'
112
+ s.add_development_dependency 'mailcatcher', '~> 0.7'
115
113
  s.add_development_dependency 'overcommit', '~> 0.49.1'
116
- s.add_development_dependency 'pry-byebug'
114
+ s.add_development_dependency 'pry-byebug', '~> 3.7'
117
115
  s.add_development_dependency 'pry-rails', '~> 0.3.5'
118
116
  s.add_development_dependency 'puma', '~> 3'
119
117
  s.add_development_dependency 'quiet_assets', '~> 1.1'
@@ -123,9 +121,10 @@ Gem::Specification.new do |s|
123
121
  s.add_development_dependency 'safe_attributes', '~> 1.0.10'
124
122
  s.add_development_dependency 'sdoc', '~> 0.4.0'
125
123
  s.add_development_dependency 'seedbank', '~> 0.3'
126
- s.add_development_dependency 'shoulda-matchers'
127
- s.add_development_dependency 'spring'
128
- s.add_development_dependency 'spring-commands-rspec'
129
- s.add_development_dependency 'traceroute'
124
+ s.add_development_dependency 'selenium-webdriver', '~> 3.142', '>= 3.142.7'
125
+ s.add_development_dependency 'shoulda-matchers', '~> 4.1'
126
+ s.add_development_dependency 'spring', '~> 2.1'
127
+ s.add_development_dependency 'spring-commands-rspec', '~> 1'
128
+ s.add_development_dependency 'traceroute', '~> 0.8'
130
129
  s.add_development_dependency 'webpacker', '~> 4.0.6'
131
130
  end
@@ -16,7 +16,7 @@ module DocTemplate
16
16
  def tag_with_html_regexp
17
17
  raise NotImplementedError unless const_defined?(:TAG_NAME)
18
18
 
19
- @tag_with_html_regexp ||= /\[[^\]]*#{self::TAG_NAME}[[^\:]]*:?\s?[^\]]*\]/i
19
+ @tag_with_html_regexp ||= /\[[^\]]*#{self::TAG_NAME}[[^\:,;.]]*:?\s?[^\]]*\]/i
20
20
  end
21
21
 
22
22
  def template_path_for(name)
@@ -51,10 +51,7 @@ module DocumentExporter
51
51
  def render_template(path, layout:)
52
52
  field = path.starts_with?('/') ? :file : :template
53
53
  # Using backport of Rails 5 Renderer here
54
- ApplicationController.class_eval do
55
- helper ::Lcms::Engine::Engine.helpers
56
- end
57
- ApplicationController.render(
54
+ Lcms::Engine::ApplicationController.render(
58
55
  field => path,
59
56
  layout: layout,
60
57
  locals: { document: @document, options: @options }