comfortable_media_surfer 3.0.0 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +1 -0
  3. data/.github/workflows/coveralls.yml +13 -1
  4. data/.github/workflows/rubyonrails.yml +15 -3
  5. data/.gitignore +4 -0
  6. data/.rubocop.yml +4 -1
  7. data/CHANGELOG.md +59 -0
  8. data/CONTRIBUTING.md +4 -2
  9. data/Gemfile +6 -2
  10. data/README.md +60 -25
  11. data/app/assets/builds/.keep +0 -0
  12. data/app/assets/config/manifest.js +1 -0
  13. data/app/assets/javascripts/comfy/admin/cms/application.js +21 -36
  14. data/app/assets/javascripts/comfy/admin/cms/base.js +6 -5
  15. data/app/assets/javascripts/comfy/admin/cms/codemirror.js +22 -10
  16. data/app/assets/javascripts/comfy/admin/cms/diff.js +7 -5
  17. data/app/assets/javascripts/comfy/admin/cms/file_link.js +17 -11
  18. data/app/assets/javascripts/comfy/admin/cms/file_upload.js +67 -41
  19. data/app/assets/javascripts/comfy/admin/cms/files_modal.js +20 -13
  20. data/app/assets/javascripts/comfy/admin/cms/sortable_list.js +28 -19
  21. data/app/assets/javascripts/comfy/admin/cms/timepicker.js +20 -12
  22. data/app/assets/javascripts/comfy/admin/cms/wysiwyg.js +39 -20
  23. data/app/assets/javascripts/comfy/vendor/diff/pretty_text_diff.js +30 -18
  24. data/app/assets/javascripts/comfy/vendor/redactor/definedlinks.js +31 -34
  25. data/app/assets/javascripts/comfy/vendor/redactor/filemanager.js +77 -62
  26. data/app/assets/javascripts/comfy/vendor/redactor/i18n/hr.js +78 -76
  27. data/app/assets/javascripts/comfy/vendor/redactor/i18n/nb.js +76 -74
  28. data/app/assets/javascripts/comfy/vendor/redactor/i18n/pl.js +77 -75
  29. data/app/assets/javascripts/comfy/vendor/redactor/imagemanager.js +66 -55
  30. data/app/assets/javascripts/comfy/vendor/redactor/table.js +346 -335
  31. data/app/assets/javascripts/comfy/vendor/redactor/video.js +69 -64
  32. data/app/assets/javascripts/comfy/vendor/redactor.js +2 -0
  33. data/app/assets/stylesheets/comfy/admin/cms/application.sass +2 -2
  34. data/app/assets/stylesheets/comfy/admin/cms/codemirror_overrides.sass +1 -1
  35. data/app/helpers/comfy/admin/cms_helper.rb +2 -2
  36. data/comfortable_media_surfer.gemspec +6 -8
  37. data/config/application.rb +1 -1
  38. data/config/environments/development.rb +11 -10
  39. data/config/environments/production.rb +0 -6
  40. data/config/puma.rb +43 -0
  41. data/gemfiles/7.1.gemfile +3 -2
  42. data/gemfiles/7.2.gemfile +3 -2
  43. data/gemfiles/{6.1.gemfile → 8.0.gemfile} +3 -2
  44. data/lib/comfortable_media_surfer/engine.rb +3 -8
  45. data/lib/comfortable_media_surfer/extensions/has_revisions.rb +1 -1
  46. data/lib/comfortable_media_surfer/render_methods.rb +7 -7
  47. data/lib/comfortable_media_surfer/version.rb +1 -1
  48. data/lib/generators/comfy/scaffold/scaffold_generator.rb +1 -1
  49. data/lib/tasks/cms_assets.rake +19 -0
  50. data/package-lock.json +379 -0
  51. data/package.json +23 -0
  52. data/rakelib/create_release.rake +17 -17
  53. metadata +16 -152
  54. data/app/assets/javascripts/comfy/vendor/Moxie.swf +0 -0
  55. data/app/assets/javascripts/comfy/vendor/Moxie.xap +0 -0
  56. data/app/assets/javascripts/comfy/vendor/bootstrap.bundle.min.js +0 -7
  57. data/app/assets/javascripts/comfy/vendor/bootstrap.bundle.min.js.map +0 -1
  58. data/app/assets/javascripts/comfy/vendor/codemirror/addon/edit/closetag.js +0 -169
  59. data/app/assets/javascripts/comfy/vendor/codemirror/mode/css/css.js +0 -832
  60. data/app/assets/javascripts/comfy/vendor/codemirror/mode/htmlmixed/htmlmixed.js +0 -152
  61. data/app/assets/javascripts/comfy/vendor/codemirror/mode/javascript/javascript.js +0 -875
  62. data/app/assets/javascripts/comfy/vendor/codemirror/mode/markdown/markdown.js +0 -861
  63. data/app/assets/javascripts/comfy/vendor/codemirror/mode/xml/xml.js +0 -394
  64. data/app/assets/javascripts/comfy/vendor/codemirror.js +0 -9653
  65. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ar.js +0 -52
  66. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/bg.js +0 -65
  67. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/bn.js +0 -65
  68. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ca.js +0 -83
  69. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/cs.js +0 -70
  70. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/cy.js +0 -92
  71. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/da.js +0 -71
  72. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/de.js +0 -70
  73. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/default.js +0 -80
  74. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/eo.js +0 -73
  75. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/es.js +0 -69
  76. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/et.js +0 -73
  77. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fa.js +0 -68
  78. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fi.js +0 -69
  79. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fr.js +0 -75
  80. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/gr.js +0 -74
  81. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/he.js +0 -57
  82. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hi.js +0 -65
  83. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hr.js +0 -66
  84. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hu.js +0 -72
  85. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/id.js +0 -61
  86. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/it.js +0 -70
  87. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ja.js +0 -57
  88. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ko.js +0 -60
  89. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/lt.js +0 -72
  90. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/lv.js +0 -67
  91. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/mk.js +0 -69
  92. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/mn.js +0 -67
  93. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ms.js +0 -68
  94. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/my.js +0 -69
  95. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/nl.js +0 -75
  96. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/no.js +0 -73
  97. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pa.js +0 -65
  98. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pl.js +0 -68
  99. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pt-BR.js +0 -66
  100. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pt.js +0 -66
  101. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ro.js +0 -69
  102. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ru.js +0 -66
  103. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/si.js +0 -65
  104. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sk.js +0 -70
  105. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sl.js +0 -70
  106. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sq.js +0 -65
  107. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sr.js +0 -69
  108. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sv.js +0 -70
  109. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/th.js +0 -72
  110. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/tr.js +0 -66
  111. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/uk.js +0 -66
  112. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/vn.js +0 -66
  113. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/zh-CN.js +0 -61
  114. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/zh-TW.js +0 -61
  115. data/app/assets/javascripts/comfy/vendor/moxie.min.js +0 -16
  116. data/app/assets/javascripts/comfy/vendor/plupload.dev.js +0 -2497
  117. data/app/assets/javascripts/comfy/vendor/sortable.min.js +0 -5
  118. data/app/assets/stylesheets/comfy/vendor/codemirror.css +0 -346
  119. data/app/assets/stylesheets/comfy/vendor/flatpickr.min.css +0 -13
  120. data/config/initializers/assets.rb +0 -14
  121. data/gemfiles/7.0.gemfile +0 -31
@@ -1,77 +1,82 @@
1
- if (!RedactorPlugins) var RedactorPlugins = {};
2
-
3
- (function($)
4
- {
5
- RedactorPlugins.video = function()
6
- {
7
- return {
8
- reUrlYoutube: /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/ig,
9
- reUrlVimeo: /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,
10
- getTemplate: function()
11
- {
12
- return String()
13
- + '<section id="redactor-modal-video-insert">'
14
- + '<label>' + this.lang.get('video_html_code') + '</label>'
15
- + '<textarea id="redactor-insert-video-area" style="height: 160px;"></textarea>'
16
- + '</section>';
17
- },
18
- init: function()
19
- {
20
- var button = this.button.addAfter('image', 'video', this.lang.get('video'));
21
- this.button.addCallback(button, this.video.show);
22
- },
23
- show: function()
24
- {
25
- this.modal.addTemplate('video', this.video.getTemplate());
1
+ import jQuery from "jquery";
26
2
 
27
- this.modal.load('video', this.lang.get('video'), 700);
28
- this.modal.createCancelButton();
3
+ if (!RedactorPlugins) var RedactorPlugins = {};
29
4
 
30
- var button = this.modal.createActionButton(this.lang.get('insert'));
31
- button.on('click', this.video.insert);
5
+ (function ($) {
6
+ RedactorPlugins.video = function () {
7
+ return {
8
+ reUrlYoutube:
9
+ /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/gi,
10
+ reUrlVimeo: /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,
11
+ getTemplate: function () {
12
+ return (
13
+ String() +
14
+ '<section id="redactor-modal-video-insert">' +
15
+ "<label>" +
16
+ this.lang.get("video_html_code") +
17
+ "</label>" +
18
+ '<textarea id="redactor-insert-video-area" style="height: 160px;"></textarea>' +
19
+ "</section>"
20
+ );
21
+ },
22
+ init: function () {
23
+ var button = this.button.addAfter(
24
+ "image",
25
+ "video",
26
+ this.lang.get("video")
27
+ );
28
+ this.button.addCallback(button, this.video.show);
29
+ },
30
+ show: function () {
31
+ this.modal.addTemplate("video", this.video.getTemplate());
32
32
 
33
- this.selection.save();
34
- this.modal.show();
33
+ this.modal.load("video", this.lang.get("video"), 700);
34
+ this.modal.createCancelButton();
35
35
 
36
- $('#redactor-insert-video-area').focus();
36
+ var button = this.modal.createActionButton(this.lang.get("insert"));
37
+ button.on("click", this.video.insert);
37
38
 
38
- },
39
- insert: function()
40
- {
41
- var data = $('#redactor-insert-video-area').val();
39
+ this.selection.save();
40
+ this.modal.show();
42
41
 
43
- if (!data.match(/<iframe|<video/gi))
44
- {
45
- data = this.clean.stripTags(data);
42
+ $("#redactor-insert-video-area").focus();
43
+ },
44
+ insert: function () {
45
+ var data = $("#redactor-insert-video-area").val();
46
46
 
47
- // parse if it is link on youtube & vimeo
48
- var iframeStart = '<iframe style="width: 500px; height: 281px;" src="',
49
- iframeEnd = '" frameborder="0" allowfullscreen></iframe>';
47
+ if (!data.match(/<iframe|<video/gi)) {
48
+ data = this.clean.stripTags(data);
50
49
 
51
- if (data.match(this.video.reUrlYoutube))
52
- {
53
- data = data.replace(this.video.reUrlYoutube, iframeStart + '//www.youtube.com/embed/$1' + iframeEnd);
54
- }
55
- else if (data.match(this.video.reUrlVimeo))
56
- {
57
- data = data.replace(this.video.reUrlVimeo, iframeStart + '//player.vimeo.com/video/$2' + iframeEnd);
58
- }
59
- }
50
+ // parse if it is link on youtube & vimeo
51
+ var iframeStart =
52
+ '<iframe style="width: 500px; height: 281px;" src="',
53
+ iframeEnd = '" frameborder="0" allowfullscreen></iframe>';
60
54
 
61
- this.selection.restore();
62
- this.modal.close();
55
+ if (data.match(this.video.reUrlYoutube)) {
56
+ data = data.replace(
57
+ this.video.reUrlYoutube,
58
+ iframeStart + "//www.youtube.com/embed/$1" + iframeEnd
59
+ );
60
+ } else if (data.match(this.video.reUrlVimeo)) {
61
+ data = data.replace(
62
+ this.video.reUrlVimeo,
63
+ iframeStart + "//player.vimeo.com/video/$2" + iframeEnd
64
+ );
65
+ }
66
+ }
63
67
 
64
- var current = this.selection.getBlock() || this.selection.getCurrent();
68
+ this.selection.restore();
69
+ this.modal.close();
65
70
 
66
- if (current) $(current).after(data);
67
- else
68
- {
69
- this.insert.html(data);
70
- }
71
+ var current = this.selection.getBlock() || this.selection.getCurrent();
71
72
 
72
- this.code.sync();
73
- }
73
+ if (current) $(current).after(data);
74
+ else {
75
+ this.insert.html(data);
76
+ }
74
77
 
75
- };
76
- };
77
- })(jQuery);
78
+ this.code.sync();
79
+ },
80
+ };
81
+ };
82
+ })(jQuery);
@@ -13,6 +13,8 @@
13
13
  fixes and tweaks annotated with "COMFY FIX"
14
14
  */
15
15
 
16
+ import jQuery from 'jquery';
17
+
16
18
  (function($)
17
19
  {
18
20
 
@@ -1,9 +1,9 @@
1
1
  @import "comfy/vendor/bootstrap/bootstrap"
2
2
 
3
- @import "comfy/vendor/codemirror"
3
+ @import "codemirror/lib/codemirror"
4
4
  @import "comfy/vendor/fontawesome"
5
5
  @import "comfy/vendor/redactor"
6
- @import "comfy/vendor/flatpickr.min"
6
+ @import "flatpickr/dist/flatpickr.min"
7
7
 
8
8
  @import "comfy/admin/cms/codemirror_overrides"
9
9
  @import "comfy/admin/cms/redactor_overrides"
@@ -15,5 +15,5 @@ body#comfy
15
15
  .CodeMirror-focused
16
16
  border-color: rgba(82, 168, 236, 0.8)
17
17
  outline: 0
18
- outline: thin dotted \9
18
+ outline: "thin dotted \9"
19
19
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6)
@@ -4,11 +4,11 @@ module Comfy
4
4
  module Admin
5
5
  module CmsHelper
6
6
  # Wrapper around Comfy::FormBuilder
7
- def comfy_form_with(**options, &block)
7
+ def comfy_form_with(**options, &)
8
8
  form_options = options.merge(builder: ComfortableMediaSurfer::FormBuilder)
9
9
  form_options[:bootstrap] = { layout: :horizontal }
10
10
  form_options[:local] = true
11
- bootstrap_form_with(**form_options, &block)
11
+ bootstrap_form_with(**form_options, &)
12
12
  end
13
13
 
14
14
  def comfy_admin_partial(path, params = {})
@@ -9,29 +9,27 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['Oleg Khabarov', 'Andrew vonderLuft', 'ShakaCode']
10
10
  spec.email = ['justin@shakacode.com']
11
11
  spec.homepage = 'https://github.com/shakacode/comfortable-media-surfer'
12
- spec.summary = 'Rails 6.1-7.1+ CMS Engine'
13
- spec.description = 'ComfortableMediaSurfer is a powerful Rails 6.1-7.1+ CMS Engine'
12
+ spec.summary = 'Rails 7.0+ CMS Engine'
13
+ spec.description = 'ComfortableMediaSurfer is a powerful Rails 7.0+ CMS Engine'
14
14
  spec.license = 'MIT'
15
15
 
16
+ spec.post_install_message = 'Please run rake comfy:compile_assets to compile assets.'
17
+
16
18
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
19
  f.match(%r{^(test|doc)/})
18
20
  end
19
21
 
20
- spec.required_ruby_version = '>= 3.0.0'
22
+ spec.required_ruby_version = '>= 3.2.0'
21
23
  spec.metadata['rubygems_mfa_required'] = 'true'
22
24
 
23
25
  spec.add_dependency 'active_link_to', '~> 1.0', '>= 1.0.5'
24
26
  spec.add_dependency 'comfy_bootstrap_form', '~> 4.0', '>= 4.0.0'
25
27
  spec.add_dependency 'haml-rails', '~> 2.1', '>= 2.1.0'
26
28
  spec.add_dependency 'image_processing', '~> 1.2', '>= 1.12.2'
27
- spec.add_dependency 'jquery-rails', '~> 4.6', '>= 4.6.0'
28
29
  spec.add_dependency 'kaminari', '~> 1.2', '>= 1.2.2'
29
30
  spec.add_dependency 'kramdown', '~> 2.4', '>= 2.4.0'
30
31
  spec.add_dependency 'mimemagic', '~> 0.4', '>= 0.4.3'
31
32
  spec.add_dependency 'mini_magick', '~> 4.12', '>= 4.12.0'
32
- spec.add_dependency 'rails', '>= 6.1.0'
33
+ spec.add_dependency 'rails', '>= 7.0.0'
33
34
  spec.add_dependency 'rails-i18n', '>= 6.0.0'
34
- spec.add_dependency 'sassc-rails', '~> 2.1', '>= 2.1.2'
35
- spec.add_dependency 'sprockets-rails', '~> 3.4', '>= 3.4.2'
36
- spec.add_development_dependency "gem-release"
37
35
  end
@@ -17,7 +17,7 @@ module ComfortableMediaSurfer
17
17
  if Gem::Version.new(Rails.version) >= Gem::Version.new('7.1.0')
18
18
  config.active_record.default_column_serializer = YAML
19
19
  config.active_record.before_committed_on_all_records = false
20
- config.active_record.commit_transaction_on_non_local_return = false
20
+ # config.active_record.commit_transaction_on_non_local_return = false # deprecated in Rails 8
21
21
  config.active_record.run_after_transaction_callbacks_in_order_defined = false
22
22
  config.active_support.message_serializer = :json
23
23
  config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = true
@@ -16,22 +16,19 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
16
16
  # Show full error reports.
17
17
  config.consider_all_requests_local = true
18
18
 
19
- # Enable server timing
19
+ # Enable server timing.
20
20
  config.server_timing = true
21
21
 
22
- # Enable/disable caching. By default caching is disabled.
23
- # Run rails dev:cache to toggle caching.
22
+ # Enable/disable Action Controller caching. By default Action Controller caching is disabled.
23
+ # Run rails dev:cache to toggle Action Controller caching.
24
24
  if Rails.root.join('tmp/caching-dev.txt').exist?
25
25
  config.action_controller.perform_caching = true
26
26
  config.action_controller.enable_fragment_cache_logging = true
27
27
 
28
28
  config.cache_store = :memory_store
29
- config.public_file_server.headers = {
30
- 'Cache-Control' => "public, max-age=#{2.days.to_i}"
31
- }
29
+ config.public_file_server.headers = { 'cache-control' => "public, max-age=#{2.days.to_i}" }
32
30
  else
33
31
  config.action_controller.perform_caching = false
34
-
35
32
  config.cache_store = :null_store
36
33
  end
37
34
 
@@ -41,8 +38,12 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
41
38
  # Don't care if the mailer can't send.
42
39
  config.action_mailer.raise_delivery_errors = false
43
40
 
41
+ # Make template changes take effect immediately.
44
42
  config.action_mailer.perform_caching = false
45
43
 
44
+ # Set localhost to be used by links generated in mailer templates.
45
+ config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
46
+
46
47
  # Print deprecation notices to the Rails logger.
47
48
  config.active_support.deprecation = :log
48
49
 
@@ -61,9 +62,6 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
61
62
  # Highlight code that enqueued background job in logs.
62
63
  config.active_job.verbose_enqueue_logs = true
63
64
 
64
- # Suppress logger output for asset requests.
65
- config.assets.quiet = true
66
-
67
65
  # Raises error for missing translations.
68
66
  # config.i18n.raise_on_missing_translations = true
69
67
 
@@ -77,4 +75,7 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
77
75
  # Raise error when a before_action's only/except options reference missing actions
78
76
  config.action_controller.raise_on_missing_callback_actions = true
79
77
  end
78
+
79
+ # Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
80
+ # config.generators.apply_rubocop_autocorrect_after_generate!
80
81
  end
@@ -25,12 +25,6 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
25
25
  # Enable static file serving from the `/public` folder (turn off if using NGINX/Apache for it).
26
26
  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
27
27
 
28
- # Compress CSS using a preprocessor.
29
- # config.assets.css_compressor = :sass
30
-
31
- # Do not fallback to assets pipeline if a precompiled asset is missed.
32
- config.assets.compile = false
33
-
34
28
  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
35
29
  # config.asset_host = "http://assets.example.com"
36
30
 
data/config/puma.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This configuration file will be evaluated by Puma. The top-level methods that
4
+ # are invoked here are part of Puma's configuration DSL. For more information
5
+ # about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html.
6
+ #
7
+ # Puma starts a configurable number of processes (workers) and each process
8
+ # serves each request in a thread from an internal thread pool.
9
+ #
10
+ # You can control the number of workers using ENV["WEB_CONCURRENCY"]. You
11
+ # should only set this value when you want to run 2 or more workers. The
12
+ # default is already 1.
13
+ #
14
+ # The ideal number of threads per worker depends both on how much time the
15
+ # application spends waiting for IO operations and on how much you wish to
16
+ # prioritize throughput over latency.
17
+ #
18
+ # As a rule of thumb, increasing the number of threads will increase how much
19
+ # traffic a given process can handle (throughput), but due to CRuby's
20
+ # Global VM Lock (GVL) it has diminishing returns and will degrade the
21
+ # response time (latency) of the application.
22
+ #
23
+ # The default is set to 3 threads as it's deemed a decent compromise between
24
+ # throughput and latency for the average Rails application.
25
+ #
26
+ # Any libraries that use a connection pool or another resource pool should
27
+ # be configured to provide at least as many connections as the number of
28
+ # threads. This includes Active Record's `pool` parameter in `database.yml`.
29
+ threads_count = ENV.fetch('RAILS_MAX_THREADS', 3)
30
+ threads threads_count, threads_count
31
+
32
+ # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
33
+ port ENV.fetch('PORT', 3000)
34
+
35
+ # Allow puma to be restarted by `bin/rails restart` command.
36
+ plugin :tmp_restart
37
+
38
+ # Run the Solid Queue supervisor inside of Puma for single-server deployments
39
+ plugin :solid_queue if ENV['SOLID_QUEUE_IN_PUMA']
40
+
41
+ # Specify the PID file. Defaults to tmp/pids/server.pid in development.
42
+ # In other environments, only set the PID file if requested.
43
+ pidfile ENV['PIDFILE'] if ENV['PIDFILE']
data/gemfiles/7.1.gemfile CHANGED
@@ -5,13 +5,14 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
5
 
6
6
  gemspec path: '../'
7
7
 
8
- gem 'rails', '~> 7.1.0', '>= 7.1.1'
8
+ gem 'rails', '~> 7.1.0', '>= 7.1.5.1'
9
9
 
10
10
  group :development, :test do
11
11
  gem 'autoprefixer-rails', '~> 10.4.16.0'
12
12
  gem 'byebug', '~> 11.1.0', platforms: %i[mri mingw x64_mingw]
13
13
  gem 'image_processing', '>= 1.12.0'
14
- gem 'sqlite3', '~> 1.6.7'
14
+ gem 'propshaft', '~> 1.1.0'
15
+ gem 'sqlite3', '>= 2.1'
15
16
  end
16
17
 
17
18
  group :test do
data/gemfiles/7.2.gemfile CHANGED
@@ -5,13 +5,14 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
5
 
6
6
  gemspec path: '../'
7
7
 
8
- gem 'rails', '~> 7.2.0', '>= 7.2.2'
8
+ gem 'rails', '~> 7.2.0', '>= 7.2.2.1'
9
9
 
10
10
  group :development, :test do
11
11
  gem 'autoprefixer-rails', '~> 10.4.16.0'
12
12
  gem 'byebug', '~> 11.1.0', platforms: %i[mri mingw x64_mingw]
13
13
  gem 'image_processing', '>= 1.12.0'
14
- gem 'sqlite3', '~> 1.6.7'
14
+ gem 'propshaft', '~> 1.1.0'
15
+ gem 'sqlite3', '>= 2.1'
15
16
  end
16
17
 
17
18
  group :test do
@@ -5,13 +5,14 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
5
 
6
6
  gemspec path: '../'
7
7
 
8
- gem 'rails', '~> 6.1.0'
8
+ gem 'rails', '~> 8.0.1'
9
9
 
10
10
  group :development, :test do
11
11
  gem 'autoprefixer-rails', '~> 10.4.16.0'
12
12
  gem 'byebug', '~> 11.1.0', platforms: %i[mri mingw x64_mingw]
13
13
  gem 'image_processing', '>= 1.12.0'
14
- gem 'sqlite3', '~> 1.6.7'
14
+ gem 'propshaft', '~> 1.1.0'
15
+ gem 'sqlite3', '>= 2.1'
15
16
  end
16
17
 
17
18
  group :test do
@@ -6,18 +6,13 @@ require 'rails-i18n'
6
6
  require 'comfy_bootstrap_form'
7
7
  require 'active_link_to'
8
8
  require 'kramdown'
9
- require 'jquery-rails'
10
9
  require 'haml-rails'
11
- require 'sassc-rails'
12
10
 
13
11
  module ComfortableMediaSurfer
14
12
  class Engine < ::Rails::Engine
15
- initializer 'comfortable_media_surfer.setup_assets' do
16
- ::ComfortableMediaSurfer::Engine.config.assets.precompile += %w[
17
- comfy/admin/cms/application.js
18
- comfy/admin/cms/application.css
19
- comfy/admin/cms/lib/redactor-font.eot
20
- ]
13
+ initializer 'comfortable_media_surfer.setup_assets' do |app|
14
+ app.config.assets.paths << root.join('app/assets/builds')
15
+ app.config.assets.precompile += %w[comfy/admin/cms/application.js comfy/admin/cms/application.css]
21
16
  end
22
17
 
23
18
  config.to_prepare do
@@ -31,7 +31,7 @@ module ComfortableMediaSurfer::Extensions::HasRevisions
31
31
  return if new_record?
32
32
 
33
33
  if (respond_to?(:fragments_attributes_changed) && fragments_attributes_changed) ||
34
- !(changed & revision_fields).empty?
34
+ !!changed.intersect?(revision_fields)
35
35
  self.revision_data = revision_fields.each_with_object({}) do |field, c|
36
36
  c[field] = send("#{field}_was")
37
37
  end
@@ -33,7 +33,7 @@ module ComfortableMediaSurfer::RenderMethods
33
33
  # it by passing :cms_site parameter with site's slug. For example:
34
34
  # render cms_page: '/path/to/page', cms_site: 'default'
35
35
  #
36
- def render(options = {}, locals = {}, &block)
36
+ def render(options = {}, locals = {}, &)
37
37
  return super unless options.is_a?(Hash)
38
38
 
39
39
  if (site_identifier = options.delete(:cms_site)) && !(@cms_site = Comfy::Cms::Site.find_by_identifier(site_identifier))
@@ -47,15 +47,15 @@ module ComfortableMediaSurfer::RenderMethods
47
47
  end
48
48
 
49
49
  if page_path
50
- render_cms_page(page_path, options, locals, &block)
50
+ render_cms_page(page_path, options, locals, &)
51
51
  elsif layout_identifier
52
- render_cms_layout(layout_identifier, options, locals, &block)
52
+ render_cms_layout(layout_identifier, options, locals, &)
53
53
  else
54
54
  super
55
55
  end
56
56
  end
57
57
 
58
- def render_cms_page(path, options = {}, locals = {}, &block)
58
+ def render_cms_page(path, options = {}, locals = {}, &)
59
59
  path.gsub!(%r{^/#{@cms_site.path}}, '') if @cms_site.path.present?
60
60
 
61
61
  unless (@cms_page = @cms_site.pages.find_by_full_path(path))
@@ -77,10 +77,10 @@ module ComfortableMediaSurfer::RenderMethods
77
77
  options[:layout] ||= cms_app_layout.blank? ? nil : cms_app_layout
78
78
  options[:inline] = @cms_page.render
79
79
 
80
- render(options, locals, &block)
80
+ render(options, locals, &)
81
81
  end
82
82
 
83
- def render_cms_layout(identifier, options = {}, locals = {}, &block)
83
+ def render_cms_layout(identifier, options = {}, locals = {}, &)
84
84
  unless (@cms_layout = @cms_site.layouts.find_by_identifier(identifier))
85
85
  raise ComfortableMediaSurfer::MissingLayout, identifier
86
86
  end
@@ -97,7 +97,7 @@ module ComfortableMediaSurfer::RenderMethods
97
97
  options[:layout] ||= cms_app_layout.blank? ? nil : cms_app_layout
98
98
  options[:inline] = cms_page.render
99
99
 
100
- render(options, locals, &block)
100
+ render(options, locals, &)
101
101
  end
102
102
  end
103
103
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ComfortableMediaSurfer
4
- VERSION = '3.0.0'
4
+ VERSION = '3.1.1'
5
5
  end
@@ -16,7 +16,7 @@ module Comfy
16
16
 
17
17
  argument :model_args, type: :array, default: [], banner: 'attribute:type'
18
18
 
19
- def initialize(*args, &block)
19
+ def initialize(*args, &)
20
20
  super
21
21
  @model_attrs = []
22
22
  model_args.each do |arg|
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :comfy do
4
+ desc 'Compile SCSS and JS assets for propshaft.'
5
+ task :compile_assets do
6
+ puts 'Compiling assets...'
7
+ dir = File.expand_path("#{__dir__}/..")
8
+ Dir.chdir(dir) do
9
+ unless system('npm install')
10
+ puts 'Error: Failed to install npm packages.'
11
+ exit(-1)
12
+ end
13
+ unless system('npm run build && npm run build:css')
14
+ puts 'Error: Failed to compile assets'
15
+ exit(-1)
16
+ end
17
+ end
18
+ end
19
+ end