alchemy_cms 4.6.3 → 4.6.7

Sign up to get free protection for your applications and to get access to all the features.
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
+ ...