alchemy_cms 6.1.5 → 6.1.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: a020fff31bc399c4927b5f6c4757d3f8ec8c24b76e42d6f352a5687e1feb0924
4
- data.tar.gz: ae7367b2543dbfde31a5a7f09418e68bb94e2d40626eebd650aca7f14d5bd0cb
3
+ metadata.gz: c206131e66f00492aae9a12eb8529e2eea17003d80ce3e5180d11c582ba792be
4
+ data.tar.gz: 92758271855a8dc77a9a280c19f7f68a15379642e96224508b0b47f977ebc0eb
5
5
  SHA512:
6
- metadata.gz: 7c572d21fa3d5adb4de20649bfe1e8fa127805a82b2852f310ed6dd850797094e7cbbac5c8d5e8061600d88e54548f14753a543c8af6dc2cd0c227bb45e22818
7
- data.tar.gz: 0e75de36f74f9b1c7c37cf12785c154dc2ed987e377fe355a9b98c3821f63302a60f8ee03e06e6bc84e04703a20d8f200236f4370ecbb6f599c0c89f3bb10389
6
+ metadata.gz: 5276f7cd7996f2df21360bc33fe37daa1b3752d45379c784a0713f76406eea4a4de439a26468eec3f5f57462ba6af07b3fbf380021c53dc3bf29e9991bb1f531
7
+ data.tar.gz: f4c3965d47c54c7035531de68c7ae05ac69bb11cb5f402ba00b1716cb59d90cb03bbb29d22efc926b01968e71aeaaf5e802de4f444ca378baed11464f9538c42
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.1.7 (2023-07-07)
4
+
5
+ - [6.1] Add task(s) to visualize element and page usage [#2514](https://github.com/AlchemyCMS/alchemy_cms/pull/2514) ([tvdeyen](https://github.com/tvdeyen))
6
+
7
+ ## 6.1.6 (2023-06-30)
8
+
9
+ - [6.1] Allow to create element with warning in definition [#2508](https://github.com/AlchemyCMS/alchemy_cms/pull/2508) ([tvdeyen](https://github.com/tvdeyen))
10
+ - [6.1] Allow authors to link to all pages again [#2505](https://github.com/AlchemyCMS/alchemy_cms/pull/2505) ([tvdeyen](https://github.com/tvdeyen))
11
+ - install generator: Add option to force patched babel config [#2495](https://github.com/AlchemyCMS/alchemy_cms/pull/2495) ([tvdeyen](https://github.com/tvdeyen))
12
+ - Remove memory leak in ingredients migrator [#2493](https://github.com/AlchemyCMS/alchemy_cms/pull/2493) ([tvdeyen](https://github.com/tvdeyen))
13
+
3
14
  ## 6.1.5 (2023-05-26)
4
15
 
5
16
  - [6.1] Fix page seeder [#2482](https://github.com/AlchemyCMS/alchemy_cms/pull/2482) ([tvdeyen](https://github.com/tvdeyen))
data/Rakefile CHANGED
@@ -48,7 +48,7 @@ namespace :alchemy do
48
48
  bin/rake db:create && \
49
49
  bin/rake db:environment:set && \
50
50
  bin/rake db:migrate:reset && \
51
- bin/rails g alchemy:install --skip --skip-demo-files --auto-accept --skip-db-create && \
51
+ bin/rails g alchemy:install --skip --skip-demo-files --auto-accept --skip-db-create --force-babel-config && \
52
52
  yarn link @alchemy_cms/admin && \
53
53
  RAILS_ENV=test bin/webpack && \
54
54
  cd -
@@ -8,9 +8,7 @@ module Alchemy
8
8
  # Returns all pages as json object
9
9
  #
10
10
  def index
11
- language = Alchemy::Language.find_by(id: params[:language_id]) || Alchemy::Language.current
12
11
  @pages = Alchemy::Page.accessible_by(current_ability, :index)
13
- @pages = @pages.where(language: language)
14
12
  @pages = @pages.includes(*page_includes)
15
13
  @pages = @pages.ransack(params[:q]).result
16
14
 
@@ -46,6 +46,7 @@ module Alchemy
46
46
  "compact",
47
47
  "message",
48
48
  "deprecated",
49
+ "warning",
49
50
  ].freeze
50
51
 
51
52
  # All Elements that share the same page version and parent element and are fixed or not are considered a list.
@@ -45,8 +45,8 @@ module Alchemy
45
45
  e.public? && !e.restricted?
46
46
  end
47
47
 
48
- can :read, Alchemy::Page, Alchemy::Page.published.not_restricted do |p|
49
- p.public? && !p.restricted?
48
+ can :read, Alchemy::Page, Alchemy::Page.published.not_restricted.from_current_site do |p|
49
+ p.public? && !p.restricted? && p.site == Alchemy::Site.current
50
50
  end
51
51
  end
52
52
  end
@@ -72,8 +72,8 @@ module Alchemy
72
72
  e.public?
73
73
  end
74
74
 
75
- can :read, Alchemy::Page, Alchemy::Page.published do |p|
76
- p.public?
75
+ can :read, Alchemy::Page, Alchemy::Page.published.from_current_site do |p|
76
+ p.public? && p.site == Alchemy::Site.current
77
77
  end
78
78
  end
79
79
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alchemy
4
+ module Tasks
5
+ module Usage
6
+ extend self
7
+
8
+ def elements_count_by_name
9
+ res = Alchemy::Element.all
10
+ .select("name, COUNT(*) AS count")
11
+ .group(:name)
12
+ .order("count DESC, name ASC")
13
+ .map { |e| {"name" => e.name, "count" => e.count} }
14
+ Alchemy::Element.definitions.reject { |definition| res.map { |e| e["name"] }.include? definition["name"] }.sort_by { |d| d["name"] }.each do |definition|
15
+ res << {"name" => definition["name"], "count" => 0}
16
+ end
17
+ res
18
+ end
19
+
20
+ def pages_count_by_type
21
+ res = Alchemy::Page.all
22
+ .select("page_layout, COUNT(*) AS count")
23
+ .group(:page_layout)
24
+ .order("count DESC, page_layout ASC")
25
+ .map { |p| {"page_layout" => p.page_layout, "count" => p.count} }
26
+ Alchemy::PageLayout.all.reject { |page_layout| res.map { |p| p["page_layout"] }.include? page_layout["name"] }.sort_by { |d| d["name"] }.each do |page_layout|
27
+ res << {"page_layout" => page_layout["name"], "count" => 0}
28
+ end
29
+ res
30
+ end
31
+ end
32
+ end
33
+ end
@@ -8,28 +8,27 @@ module Alchemy::Upgrader::Tasks
8
8
 
9
9
  no_tasks do
10
10
  def create_ingredients(verbose: !Rails.env.test?)
11
- Alchemy::Deprecation.silence do
12
- elements_with_ingredients = Alchemy::ElementDefinition.all.select { |d| d.key?(:ingredients) }
13
- if ENV["ONLY"]
14
- elements_with_ingredients = elements_with_ingredients.select { |d| d[:name].in? ENV["ONLY"].split(",") }
15
- end
16
- # eager load all elements that have ingredients defined but no ingredient records yet.
17
- all_elements = Alchemy::Element
18
- .named(elements_with_ingredients.map { |d| d[:name] })
19
- .preload(contents: :essence)
20
- .left_outer_joins(:ingredients).where(alchemy_ingredients: { id: nil })
21
- .to_a
22
- elements_with_ingredients.map do |element_definition|
23
- elements = all_elements.select { |e| e.name == element_definition[:name] }
24
- if elements.any?
25
- puts "-- Creating ingredients for #{elements.count} #{element_definition[:name]}(s)" if verbose
26
- elements.each do |element|
27
- MigrateElementIngredients.call(element)
28
- print "." if verbose
11
+ Rails.logger.silence do
12
+ Alchemy::Deprecation.silence do
13
+ elements_with_ingredients = Alchemy::ElementDefinition.all.select { |d| d.key?(:ingredients) }
14
+ if ENV["ONLY"]
15
+ elements_with_ingredients = elements_with_ingredients.select { |d| d[:name].in? ENV["ONLY"].split(",") }
16
+ end
17
+ elements_with_ingredients.each do |element_definition|
18
+ elements = Alchemy::Element
19
+ .named(element_definition[:name])
20
+ .left_outer_joins(:ingredients).where(alchemy_ingredients: { id: nil })
21
+ count = elements.count
22
+ if count.positive?
23
+ puts "-- Creating ingredients for #{elements.count} #{element_definition[:name]}(s)" if verbose
24
+ elements.preload(contents: :essence).find_each.with_index(1) do |element, index|
25
+ MigrateElementIngredients.call(element)
26
+ puts "\e[H\e[2J #{index}/#{count}" if verbose
27
+ end
28
+ puts "\n" if verbose
29
+ elsif verbose
30
+ puts "-- No #{element_definition[:name]} elements found for migration."
29
31
  end
30
- puts "\n" if verbose
31
- elsif verbose
32
- puts "-- No #{element_definition[:name]} elements found for migration."
33
32
  end
34
33
  end
35
34
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "6.1.5"
4
+ VERSION = "6.1.7"
5
5
 
6
6
  def self.version
7
7
  VERSION
@@ -0,0 +1,64 @@
1
+ module.exports = function (api) {
2
+ var validEnv = ["development", "test", "production"]
3
+ var currentEnv = api.env()
4
+ var isDevelopmentEnv = api.env("development")
5
+ var isProductionEnv = api.env("production")
6
+ var isTestEnv = api.env("test")
7
+
8
+ if (!validEnv.includes(currentEnv)) {
9
+ throw new Error(
10
+ "Please specify a valid `NODE_ENV` or " +
11
+ '`BABEL_ENV` environment variables. Valid values are "development", ' +
12
+ '"test", and "production". Instead, received: ' +
13
+ JSON.stringify(currentEnv) +
14
+ "."
15
+ )
16
+ }
17
+
18
+ return {
19
+ presets: [
20
+ isTestEnv && [
21
+ "@babel/preset-env",
22
+ {
23
+ targets: {
24
+ node: "current"
25
+ }
26
+ }
27
+ ],
28
+ (isProductionEnv || isDevelopmentEnv) && [
29
+ "@babel/preset-env",
30
+ {
31
+ forceAllTransforms: true,
32
+ useBuiltIns: "entry",
33
+ corejs: 3,
34
+ modules: false,
35
+ exclude: ["transform-typeof-symbol"]
36
+ }
37
+ ]
38
+ ].filter(Boolean),
39
+ plugins: [
40
+ "babel-plugin-macros",
41
+ "@babel/plugin-syntax-dynamic-import",
42
+ isTestEnv && "babel-plugin-dynamic-import-node",
43
+ "@babel/plugin-transform-destructuring",
44
+ [
45
+ "@babel/plugin-proposal-object-rest-spread",
46
+ {
47
+ useBuiltIns: true
48
+ }
49
+ ],
50
+ [
51
+ "@babel/plugin-transform-runtime",
52
+ {
53
+ helpers: false
54
+ }
55
+ ],
56
+ [
57
+ "@babel/plugin-transform-regenerator",
58
+ {
59
+ async: false
60
+ }
61
+ ]
62
+ ].filter(Boolean)
63
+ }
64
+ }
@@ -23,6 +23,11 @@ module Alchemy
23
23
  default: false,
24
24
  desc: "Skip running the webpacker installer."
25
25
 
26
+ class_option :force_babel_config,
27
+ type: :boolean,
28
+ default: false,
29
+ desc: "Force installing a patched babel config."
30
+
26
31
  class_option :skip_db_create,
27
32
  type: :boolean,
28
33
  default: false,
@@ -113,6 +118,13 @@ module Alchemy
113
118
  end
114
119
  end
115
120
 
121
+ # We need to force the babel.config.js file, because webpacker has an invalid one
122
+ def copy_babel_config
123
+ if options[:force_babel_config]
124
+ copy_file "babel.config.js", app_root.join("babel.config.js"), force: true
125
+ end
126
+ end
127
+
116
128
  def add_npm_package
117
129
  run "yarn add @alchemy_cms/admin@~#{Alchemy.version}"
118
130
  end
@@ -0,0 +1,40 @@
1
+ require "alchemy/tasks/usage"
2
+
3
+ namespace :alchemy do
4
+ desc "List Alchemy elements and pages usage"
5
+ task usage: [:page_usage, :element_usage]
6
+
7
+ desc "List Alchemy elements usage"
8
+ task page_usage: :environment do
9
+ include ActionView::Helpers::NumberHelper
10
+ puts "\n Alchemy pages usage"
11
+ results = Alchemy::Tasks::Usage.pages_count_by_type
12
+ if results.any?
13
+ puts " ----------------------"
14
+ puts "\n"
15
+ results.each do |row|
16
+ puts " #{number_with_delimiter(row["count"])} 𝗑 #{row["page_layout"]}"
17
+ end
18
+ puts "\n = #{number_with_delimiter(Alchemy::Page.count)} pages in total."
19
+ else
20
+ puts " > No pages found!"
21
+ end
22
+ end
23
+
24
+ desc "List Alchemy elements usage"
25
+ task element_usage: :environment do
26
+ include ActionView::Helpers::NumberHelper
27
+ puts "\n Alchemy elements usage"
28
+ results = Alchemy::Tasks::Usage.elements_count_by_name
29
+ if results.any?
30
+ puts " ----------------------"
31
+ puts "\n"
32
+ results.each do |row|
33
+ puts " #{number_with_delimiter(row["count"])} 𝗑 #{row["name"]}"
34
+ end
35
+ puts "\n = #{number_with_delimiter(Alchemy::Element.count)} elements in total."
36
+ else
37
+ puts " > No elements found!"
38
+ end
39
+ end
40
+ end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alchemy_cms/admin",
3
- "version": "6.1.5",
3
+ "version": "6.1.7",
4
4
  "description": "AlchemyCMS",
5
5
  "browser": "package/admin.js",
6
6
  "files": [
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: 6.1.5
4
+ version: 6.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2023-05-26 00:00:00.000000000 Z
16
+ date: 2023-07-07 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: actionmailer
@@ -1333,6 +1333,7 @@ files:
1333
1333
  - lib/alchemy/shell.rb
1334
1334
  - lib/alchemy/taggable.rb
1335
1335
  - lib/alchemy/tasks/tidy.rb
1336
+ - lib/alchemy/tasks/usage.rb
1336
1337
  - lib/alchemy/test_support.rb
1337
1338
  - lib/alchemy/test_support/config_stubbing.rb
1338
1339
  - lib/alchemy/test_support/essence_shared_examples.rb
@@ -1393,6 +1394,7 @@ files:
1393
1394
  - lib/generators/alchemy/install/files/all.js
1394
1395
  - lib/generators/alchemy/install/files/application.html.erb
1395
1396
  - lib/generators/alchemy/install/files/article.scss
1397
+ - lib/generators/alchemy/install/files/babel.config.js
1396
1398
  - lib/generators/alchemy/install/install_generator.rb
1397
1399
  - lib/generators/alchemy/install/templates/dragonfly.rb.tt
1398
1400
  - lib/generators/alchemy/install/templates/elements.yml.tt
@@ -1424,6 +1426,7 @@ files:
1424
1426
  - lib/tasks/alchemy/thumbnails.rake
1425
1427
  - lib/tasks/alchemy/tidy.rake
1426
1428
  - lib/tasks/alchemy/upgrade.rake
1429
+ - lib/tasks/alchemy/usage.rake
1427
1430
  - package.json
1428
1431
  - package/admin.js
1429
1432
  - package/src/__tests__/i18n.spec.js
@@ -1525,7 +1528,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1525
1528
  version: '0'
1526
1529
  requirements:
1527
1530
  - ImageMagick (libmagick), v6.6 or greater.
1528
- rubygems_version: 3.4.12
1531
+ rubygems_version: 3.4.15
1529
1532
  signing_key:
1530
1533
  specification_version: 4
1531
1534
  summary: A powerful, userfriendly and flexible CMS for Rails