alchemy_cms 4.6.3 → 4.6.7

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.

Potentially problematic release.


This version of alchemy_cms might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 35defab4a613fba87ec24e3ba3e9b6f6a9a079282703618c670f0ef3398caf38
4
- data.tar.gz: 7e4b5c160ecfac06634f9720e4927d70e0517c9b2affa23efd14167c975b8433
3
+ metadata.gz: ca89899748d18f70ee78b29698acf1bf9a768a938ef9bc6b95183eda42fb0e7b
4
+ data.tar.gz: e8fcc703a6dce815bea12d6af8f9e0307fcf38589a41fb12b96fe223ce09c793
5
5
  SHA512:
6
- metadata.gz: 1c111055665890647aa60caa158644c1405ba53343f2cc6188b6184746d15353a49124fe49a6d493cfcddce43ab2fe2c433bdfd77b6dbe7fdede4191e96d661f
7
- data.tar.gz: 490f3afb8151c0e2e76cc62cc9e7e5bc3c8051b92515ee9c19ed8e757bba235e8b9d675d83c11e1331b3445c61568525a6c1b66e21a8702d8061f41e845db7b4
6
+ metadata.gz: 6f653e26248ed2a01b92fcc6b7ded6b4eac3e057b25ad84830a6ba2ca3fa3df8c1d1af722c281bcb89ab273f4a07f5556822e0e27b40ca89d2057a4a9337e174
7
+ data.tar.gz: 96404109c54eb6c3c12e46bcc925725ccd352041437f895359f8b11e4b10abe93abd039e040868b0bbf5a5716865bcbbcc0662c3e20fd4d5ce636e8a0c5aa465
data/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## 4.6.7 (2022-01-23)
2
+
3
+ - fix(CellsMigration): Do not autogenerate nested elements
4
+ - make the admin error tracker customizable
5
+
6
+ ## 4.6.6 (2021-11-24)
7
+
8
+ - Give overlay picture spec more time to load images
9
+ - Stay below dragonfly 1.4
10
+ - Adjust tinymce skin assets urls again
11
+ - Fix userstamp spec
12
+
13
+ ## 4.6.5 (2021-11-17)
14
+
15
+ - Set stampable user_class_name without root identifier ([tvdeyen](https://github.com/tvdeyen))
16
+
17
+ ## 4.6.4 (2021-11-15)
18
+
19
+ - Use relative path for tinymce font-face ([tvdeyen](https://github.com/tvdeyen))
20
+ - make the fixed element upgrader more robust ([darkswoop](https://github.com/darkswoop))
21
+ - don't use existing element names when migrating from cells ([darkswoop](https://github.com/darkswoop))
22
+ - enhance regexp in partial name upgrader ([darkswoop](https://github.com/darkswoop))
23
+
1
24
  ## 4.6.3 (2020-05-06)
2
25
 
3
26
  - Use symbols in polymorphic routes for resources [#2087](https://github.com/AlchemyCMS/alchemy_cms/pull/2087) ([tvdeyen](https://github.com/tvdeyen))
data/alchemy_cms.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
23
23
  gem.add_runtime_dependency 'awesome_nested_set', ['~> 3.1']
24
24
  gem.add_runtime_dependency 'cancancan', ['>= 2.1', '< 4.0']
25
25
  gem.add_runtime_dependency 'coffee-rails', ['~> 4.0', '< 5.0']
26
- gem.add_runtime_dependency 'dragonfly', ['~> 1.0', '>= 1.0.7']
26
+ gem.add_runtime_dependency 'dragonfly', ['>= 1.0.7', '< 1.4']
27
27
  gem.add_runtime_dependency 'dragonfly_svg', ['~> 0.0.4']
28
28
  gem.add_runtime_dependency 'gutentag', ['~> 2.2', '>= 2.2.1']
29
29
  gem.add_runtime_dependency 'handlebars_assets', ['~> 0.23']
@@ -30,7 +30,7 @@ td,th {
30
30
 
31
31
  .mce-object {
32
32
  border: 1px dotted #3a3a3a;
33
- background: #d5d5d5 url(img/object.gif) no-repeat center;
33
+ background: #d5d5d5 url('tinymce/skins/alchemy/fonts/img/object.gif') no-repeat center;
34
34
  }
35
35
 
36
36
  .mce-pagebreak {
@@ -55,7 +55,7 @@ td,th {
55
55
  width: 9px!important;
56
56
  height: 9px!important;
57
57
  border: 1px dotted #3a3a3a;
58
- background: #d5d5d5 url(img/anchor.gif) no-repeat center;
58
+ background: #d5d5d5 url('tinymce/skins/alchemy/fonts/img/anchor.gif') no-repeat center;
59
59
  }
60
60
 
61
61
  .mce-nbsp {
@@ -77,7 +77,7 @@ hr {
77
77
  }
78
78
 
79
79
  .mce-spellchecker-word {
80
- background: url(img/wline.gif) repeat-x bottom left;
80
+ background: url('tinymce/skins/alchemy/fonts/img/wline.gif') repeat-x bottom left;
81
81
  cursor: default;
82
82
  }
83
83
 
@@ -1561,23 +1561,23 @@ i.mce-i-resize {
1561
1561
  opacity: 0.6;
1562
1562
  filter: alpha(opacity=60);
1563
1563
  zoom: 1;
1564
- background: #fff url('img/loader.gif') no-repeat center center;
1564
+ background: #fff url('tinymce/skins/alchemy/fonts/img/loader.gif') no-repeat center center;
1565
1565
  }
1566
1566
 
1567
1567
  @font-face {
1568
1568
  font-family: 'tinymce';
1569
- src: url('fonts/tinymce.woff') format('woff'),
1570
- url('fonts/tinymce.ttf') format('truetype'),
1571
- url('fonts/tinymce.svg#tinymce') format('svg');
1569
+ src: url('tinymce/skins/alchemy/fonts/tinymce.woff') format('woff'),
1570
+ url('tinymce/skins/alchemy/fonts/tinymce.ttf') format('truetype'),
1571
+ url('tinymce/skins/alchemy/fonts/tinymce.svg#tinymce') format('svg');
1572
1572
  font-weight: normal;
1573
1573
  font-style: normal;
1574
1574
  }
1575
1575
 
1576
1576
  @font-face {
1577
1577
  font-family: 'tinymce-small';
1578
- src: url('fonts/tinymce-small.woff') format('woff'),
1579
- url('fonts/tinymce-small.ttf') format('truetype'),
1580
- url('fonts/tinymce-small.svg#tinymce') format('svg');
1578
+ src: url('tinymce/skins/alchemy/fonts/tinymce-small.woff') format('woff'),
1579
+ url('tinymce/skins/alchemy/fonts/tinymce-small.ttf') format('truetype'),
1580
+ url('tinymce/skins/alchemy/fonts/tinymce-small.svg#tinymce') format('svg');
1581
1581
  font-weight: normal;
1582
1582
  font-style: normal;
1583
1583
  }
@@ -42,9 +42,7 @@ module Alchemy
42
42
  def exception_handler(error)
43
43
  exception_logger(error)
44
44
  show_error_notice(error)
45
- if defined?(Airbrake)
46
- notify_airbrake(error) unless Rails.env.development? || Rails.env.test?
47
- end
45
+ notify_error_tracker(error)
48
46
  end
49
47
 
50
48
  # Displays an error notice in the Alchemy backend.
@@ -167,6 +165,14 @@ module Alchemy
167
165
  site
168
166
  end
169
167
  end
168
+
169
+ def notify_error_tracker(exception)
170
+ if ::Alchemy::ErrorTracking.notification_handler.respond_to?(:call)
171
+ ::Alchemy::ErrorTracking.notification_handler.call(exception)
172
+ else
173
+ Rails.logger.warn("To use the Alchemy::ErrorTracking.notification_handler, it must respond to #call.")
174
+ end
175
+ end
170
176
  end
171
177
  end
172
178
  end
@@ -28,7 +28,7 @@ module Alchemy
28
28
  after_assign { |f| write_attribute(:file_mime_type, f.mime_type) }
29
29
  end
30
30
 
31
- stampable stamper_class_name: Alchemy.user_class_name
31
+ stampable stamper_class_name: Alchemy.user_class.name
32
32
 
33
33
  has_many :essence_files, class_name: 'Alchemy::EssenceFile', foreign_key: 'attachment_id'
34
34
  has_many :contents, through: :essence_files
@@ -28,7 +28,7 @@ module Alchemy
28
28
  belongs_to :element, touch: true, inverse_of: :contents
29
29
  has_one :page, through: :element
30
30
 
31
- stampable stamper_class_name: Alchemy.user_class_name
31
+ stampable stamper_class_name: Alchemy.user_class.name
32
32
 
33
33
  acts_as_list scope: [:element_id]
34
34
 
@@ -58,7 +58,7 @@ module Alchemy
58
58
  #
59
59
  acts_as_list scope: [:page_id, :fixed, :parent_element_id]
60
60
 
61
- stampable stamper_class_name: Alchemy.user_class_name
61
+ stampable stamper_class_name: Alchemy.user_class.name
62
62
 
63
63
  has_many :contents, -> { order(:position) }, dependent: :destroy, inverse_of: :element
64
64
 
@@ -5,7 +5,7 @@ module Alchemy
5
5
  VALID_URL_REGEX = /\A(\/|\D[a-z\+\d\.\-]+:)/
6
6
 
7
7
  acts_as_nested_set scope: "language_id", touch: true
8
- stampable stamper_class_name: Alchemy.user_class_name
8
+ stampable stamper_class_name: Alchemy.user_class.name
9
9
 
10
10
  belongs_to :site, class_name: "Alchemy::Site"
11
11
  belongs_to :language, class_name: "Alchemy::Language"
@@ -85,7 +85,7 @@ module Alchemy
85
85
 
86
86
  acts_as_nested_set(dependent: :destroy)
87
87
 
88
- stampable stamper_class_name: Alchemy.user_class_name
88
+ stampable stamper_class_name: Alchemy.user_class.name
89
89
 
90
90
  belongs_to :language, optional: true
91
91
 
@@ -74,7 +74,7 @@ module Alchemy
74
74
  case_sensitive: false,
75
75
  message: Alchemy.t("not a valid image")
76
76
 
77
- stampable stamper_class_name: Alchemy.user_class_name
77
+ stampable stamper_class_name: Alchemy.user_class.name
78
78
 
79
79
  scope :named, ->(name) {
80
80
  where("#{table_name}.name LIKE ?", "%#{name}%")
@@ -28,5 +28,12 @@ module Alchemy
28
28
  config.after_initialize do
29
29
  require_relative './userstamp'
30
30
  end
31
+
32
+ initializer "alchemy.error_tracking" do
33
+ if defined?(Airbrake)
34
+ require_relative "error_tracking/airbrake_handler"
35
+ Alchemy::ErrorTracking.notification_handler = Alchemy::ErrorTracking::AirbrakeHandler
36
+ end
37
+ end
31
38
  end
32
39
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alchemy
4
+ module ErrorTracking
5
+ class AirbrakeHandler < BaseHandler
6
+ def self.call(exception)
7
+ return if ["development", "test"].include?(Rails.env)
8
+
9
+ notify_airbrake(exception)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alchemy
4
+ module ErrorTracking
5
+ class BaseHandler
6
+ def self.call(exception)
7
+ # implement your own notification method
8
+ end
9
+ end
10
+
11
+ mattr_accessor :notification_handler
12
+ @@notification_handler = BaseHandler
13
+ end
14
+ end
@@ -48,7 +48,7 @@ module Alchemy #:nodoc:
48
48
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
49
49
  attr_writer :validation_errors
50
50
  include Alchemy::Essence::InstanceMethods
51
- stampable stamper_class_name: Alchemy.user_class_name
51
+ stampable stamper_class_name: Alchemy.user_class.name
52
52
  validate :validate_ingredient, on: :update, if: -> { validations.any? }
53
53
 
54
54
  has_one :content, as: :essence, class_name: "Alchemy::Content", inverse_of: :essence
@@ -1,5 +1,6 @@
1
1
  require_relative 'tasks/picture_gallery_upgrader'
2
2
  require_relative 'tasks/picture_gallery_migration'
3
+ require_relative 'tasks/fixed_element_name_finder'
3
4
  require_relative 'tasks/cells_upgrader'
4
5
  require_relative 'tasks/cells_migration'
5
6
  require_relative 'tasks/element_partial_name_variable_updater'
@@ -8,6 +8,7 @@ module Alchemy::Upgrader::Tasks
8
8
  def migrate_cells
9
9
  if ActiveRecord::Base.connection.data_source_exists?('alchemy_cells')
10
10
  cells = Cell.all
11
+ @fixed_element_name_finder = FixedElementNameFinder.new
11
12
 
12
13
  if cells.any?
13
14
  cells.each do |cell|
@@ -26,10 +27,11 @@ module Alchemy::Upgrader::Tasks
26
27
  def migrate_cell!(cell)
27
28
  # bust element definitions insta cache
28
29
  Alchemy::Element.instance_variable_set('@definitions', nil)
29
- fixed_element = Alchemy::Element.find_or_initialize_by(fixed: true, name: cell.name, page: cell.page)
30
+ fixed_element = Alchemy::Element.find_or_initialize_by(fixed: true, name: @fixed_element_name_finder.call(cell.name), page: cell.page)
30
31
  elements = Alchemy::Element.where(cell_id: cell.id).order(position: :asc)
31
32
 
32
33
  if fixed_element.new_record?
34
+ fixed_element.autogenerate_nested_elements = false
33
35
  fixed_element.save!
34
36
  Alchemy::Element.acts_as_list_no_update do
35
37
  elements.update_all(parent_element_id: fixed_element.id)
@@ -72,12 +72,13 @@ module Alchemy::Upgrader::Tasks
72
72
 
73
73
  def convert_cell_config
74
74
  puts '-- Converting cells into unique fixed nestable elements.'
75
+ fixed_element_name_finder = FixedElementNameFinder.new
75
76
 
76
77
  YAML.load_file(cells_config_file).each do |cell|
77
78
  append_to_file Rails.root.join('config', 'alchemy', 'elements.yml') do
78
79
  <<-CELL.strip_heredoc
79
80
 
80
- - name: #{cell['name']}
81
+ - name: #{fixed_element_name_finder.call(cell['name'])}
81
82
  fixed: true
82
83
  unique: true
83
84
  nestable_elements: [#{cell['elements'].join(', ')}]
@@ -128,8 +129,25 @@ module Alchemy::Upgrader::Tasks
128
129
  puts "-- Update render_cell calls"
129
130
  Dir.glob("#{alchemy_views_folder}/**/*").each do |view|
130
131
  next if File.directory?(view)
131
- gsub_file(view, /render_cell[\(\s]?([:'"]?[a-z_]+['"]?)\)?/, 'render_elements(only: \1, fixed: true)')
132
- gsub_file(view, /render_elements[\(\s](.*):?from_cell:?\s?(=>)?\s?(['"][a-z_]+['"])\)?/, 'render_elements(\1only: \3, fixed: true)')
132
+ # <%= render_cell 'test' %>
133
+ # <%= render_cell('test') %>
134
+ # <%= render_cell("test", options: true) %>
135
+ content = File.binread(view)
136
+ content.gsub!(/render_cell([\s(]+)(['":])(\w+)([^\w])(.*?)/) do
137
+ element_name = CellNameMigrator.call($3)
138
+ "render_elements#{$1}only: #{$2}#{element_name}#{$4}, fixed: true#{$5}"
139
+ end
140
+
141
+ # <%= render_elements from_cell: 'page_intro' %>
142
+ # <%= render_elements testing: 'blubb', from_cell: :page_intro %>
143
+ # <%= render_elements from_cell: "page_intro", testing: 'blubb' %>
144
+ # <%= render_elements(from_cell: "page_intro", testing: 'blubb') %>
145
+ # <%= render_elements(testing: 'blubb', from_cell: "page_intro") %>
146
+ content.gsub!(/render_elements(.*?)from_cell[:\s=>]+([:'"])(\w+)(['"]?)(.*)/) do
147
+ element_name = CellNameMigrator.call($3)
148
+ "render_elements#{$1}only: #{$2}#{element_name}#{$4}, fixed: true#{$5}"
149
+ end
150
+ File.open(view, "wb") { |file| file.write(content) }
133
151
  end
134
152
  end
135
153
 
@@ -11,10 +11,14 @@ module Alchemy::Upgrader::Tasks
11
11
  puts "-- Update element views local variable to partial name"
12
12
  Dir.glob("#{elements_view_folder}/*_view.*").each do |view|
13
13
  variable_name = File.basename(view).gsub(/^_([\w-]*)\..*$/, '\1')
14
- gsub_file(view, /cache\(?element([,\s\w:\-,=>'"\?\/]*)\)?/, "cache(#{variable_name}\\1)")
15
- gsub_file(view, /render_essence_view_by_name\(?element([,\s\w:\-,=>'"\?\/]*)\)?/, "render_essence_view_by_name(#{variable_name}\\1)")
16
- gsub_file(view, /element_view_for\(?element([,\s\w:\-,=>'"\?\/]*)\)?/, "element_view_for(#{variable_name}\\1)")
17
- gsub_file(view, /element\.([\w\?]+)/, "#{variable_name}.\\1")
14
+ %w[
15
+ cache
16
+ render_essence_view_by_name
17
+ element_view_for
18
+ ].each do |method_name|
19
+ gsub_file(view, /#{method_name}([\s(]+)element([^\w])/, "#{method_name}\\1#{variable_name}\\2")
20
+ end
21
+ gsub_file(view, /([\s(%={]+)element([^\w:"'])/, "\\1#{variable_name}\\2")
18
22
  end
19
23
  end
20
24
  end
@@ -0,0 +1,31 @@
1
+ module Alchemy::Upgrader::Tasks
2
+ class FixedElementNameFinder
3
+
4
+ def call(cell_name)
5
+ return cell_name if fixed_elements.include?(cell_name)
6
+ return "#{cell_name}_elements" if unfixed_elements.include?(cell_name)
7
+ cell_name
8
+ end
9
+
10
+ private
11
+
12
+ def fixed_elements
13
+ @_fixed_element_names ||= begin
14
+ definitions.select { |element| element['fixed'] }.map { |element| element['name'] }
15
+ end
16
+ end
17
+
18
+ def unfixed_elements
19
+ @_unfixed_elements ||= begin
20
+ definitions.reject { |element| element['fixed'] }.map { |element| element['name'] }
21
+ end
22
+ end
23
+
24
+ def definitions
25
+ @_definitions ||= begin
26
+ elements_file_path = Rails.root.join('config', 'alchemy', 'elements.yml')
27
+ YAML.load_file(elements_file_path)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -7,6 +7,6 @@
7
7
  if Alchemy.user_class < ActiveRecord::Base
8
8
  Alchemy.user_class.class_eval do
9
9
  model_stamper
10
- stampable stamper_class_name: Alchemy.user_class_name
10
+ stampable stamper_class_name: Alchemy.user_class.name
11
11
  end
12
12
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "4.6.3"
4
+ VERSION = "4.6.7"
5
5
 
6
6
  def self.version
7
7
  VERSION
data/lib/alchemy_cms.rb CHANGED
@@ -35,6 +35,7 @@ require_relative 'alchemy/configuration_methods'
35
35
  require_relative 'alchemy/controller_actions'
36
36
  require_relative 'alchemy/deprecation'
37
37
  require_relative 'alchemy/elements_finder'
38
+ require_relative 'alchemy/error_tracking'
38
39
  require_relative 'alchemy/errors'
39
40
  require_relative 'alchemy/essence'
40
41
  require_relative 'alchemy/filetypes'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.3
4
+ version: 4.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -10,10 +10,10 @@ authors:
10
10
  - Hendrik Mans
11
11
  - Carsten Fregin
12
12
  - Martin Meyerhoff
13
- autorequire:
13
+ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2021-05-06 00:00:00.000000000 Z
16
+ date: 2022-01-23 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: active_model_serializers
@@ -107,22 +107,22 @@ dependencies:
107
107
  name: dragonfly
108
108
  requirement: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - "~>"
111
- - !ruby/object:Gem::Version
112
- version: '1.0'
113
110
  - - ">="
114
111
  - !ruby/object:Gem::Version
115
112
  version: 1.0.7
113
+ - - "<"
114
+ - !ruby/object:Gem::Version
115
+ version: '1.4'
116
116
  type: :runtime
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: '1.0'
123
120
  - - ">="
124
121
  - !ruby/object:Gem::Version
125
122
  version: 1.0.7
123
+ - - "<"
124
+ - !ruby/object:Gem::Version
125
+ version: '1.4'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: dragonfly_svg
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -1056,6 +1056,8 @@ files:
1056
1056
  - lib/alchemy/deprecation.rb
1057
1057
  - lib/alchemy/elements_finder.rb
1058
1058
  - lib/alchemy/engine.rb
1059
+ - lib/alchemy/error_tracking.rb
1060
+ - lib/alchemy/error_tracking/airbrake_handler.rb
1059
1061
  - lib/alchemy/errors.rb
1060
1062
  - lib/alchemy/essence.rb
1061
1063
  - lib/alchemy/filetypes.rb
@@ -1110,6 +1112,7 @@ files:
1110
1112
  - lib/alchemy/upgrader/tasks/cells_upgrader.rb
1111
1113
  - lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb
1112
1114
  - lib/alchemy/upgrader/tasks/element_views_updater.rb
1115
+ - lib/alchemy/upgrader/tasks/fixed_element_name_finder.rb
1113
1116
  - lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb
1114
1117
  - lib/alchemy/upgrader/tasks/picture_gallery_migration.rb
1115
1118
  - lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb
@@ -1244,8 +1247,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1244
1247
  version: '0'
1245
1248
  requirements:
1246
1249
  - ImageMagick (libmagick), v6.6 or greater.
1247
- rubygems_version: 3.1.4
1248
- signing_key:
1250
+ rubygems_version: 3.1.6
1251
+ signing_key:
1249
1252
  specification_version: 4
1250
1253
  summary: A powerful, userfriendly and flexible CMS for Rails 5
1251
1254
  test_files: []
1255
+ ...