alchemy_cms 5.0.0.beta2 → 5.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +9 -17
- data/CHANGELOG.md +17 -1
- data/Gemfile +1 -1
- data/README.md +3 -3
- data/Rakefile +11 -10
- data/app/assets/stylesheets/alchemy/navigation.scss +1 -0
- data/app/assets/stylesheets/alchemy/tags.scss +2 -2
- data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +2 -0
- data/app/helpers/alchemy/url_helper.rb +2 -2
- data/app/models/alchemy/attachment.rb +4 -1
- data/app/models/alchemy/essence_file.rb +1 -1
- data/app/models/alchemy/essence_picture.rb +1 -1
- data/app/models/alchemy/essence_picture_view.rb +5 -1
- data/app/models/alchemy/picture/url.rb +4 -2
- data/app/serializers/alchemy/page_tree_serializer.rb +4 -4
- data/app/views/alchemy/admin/pictures/show.html.erb +1 -1
- data/app/views/alchemy/admin/resources/index.html.erb +21 -22
- data/app/views/alchemy/admin/sites/_form.html.erb +2 -2
- data/app/views/alchemy/essences/_essence_file_view.html.erb +1 -1
- data/lib/alchemy/config.rb +5 -3
- data/lib/alchemy/deprecation.rb +1 -1
- data/lib/alchemy/install/tasks.rb +41 -0
- data/lib/alchemy/resource.rb +2 -2
- data/lib/alchemy/version.rb +1 -1
- data/lib/generators/alchemy/install/install_generator.rb +60 -1
- data/lib/tasks/alchemy/install.rake +5 -49
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d6a2d7c3149b60f8beaeb06b0cd5b8042f4c8df1f6bf3f9599d3563b98195fb
|
4
|
+
data.tar.gz: 18e8ece0618b97099513220ba3368d120bd171c23a3847d7872d1aa4ff19f11e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 298f71d8ae111b2ce297523f44832bb7ef268dda68e5297df41a1a6bea250ddbe0f90ea9370ac0b0c8095c64ffdfab0463b4a7289a8afa2a48ff4a9df1e84414
|
7
|
+
data.tar.gz: c02cd508bbd728d2553716964b24958dd1c25a8cbba1c5c77ba3293df67c0d4c4246e732d20b9d704b4c289a92204626d6722383015c1f7c0e84be0f22ade17b
|
data/.github/workflows/ci.yml
CHANGED
@@ -43,14 +43,14 @@ jobs:
|
|
43
43
|
MYSQL_ROOT_PASSWORD: password
|
44
44
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5
|
45
45
|
steps:
|
46
|
-
- uses: actions/checkout@
|
46
|
+
- uses: actions/checkout@v2.3.4
|
47
47
|
- name: Set up Ruby
|
48
|
-
uses: actions/setup-ruby@v1
|
48
|
+
uses: actions/setup-ruby@v1.1.2
|
49
49
|
with:
|
50
50
|
ruby-version: ${{ matrix.ruby }}
|
51
51
|
- name: Restore apt cache
|
52
52
|
id: apt-cache
|
53
|
-
uses: actions/cache@
|
53
|
+
uses: actions/cache@v2.1.3
|
54
54
|
with:
|
55
55
|
path: /home/runner/apt/cache
|
56
56
|
key: ${{ runner.os }}-apt-${{ matrix.database }}
|
@@ -75,7 +75,7 @@ jobs:
|
|
75
75
|
gem install bundler
|
76
76
|
- name: Restore Ruby Gems cache
|
77
77
|
id: cache
|
78
|
-
uses: actions/cache@
|
78
|
+
uses: actions/cache@v2.1.3
|
79
79
|
with:
|
80
80
|
path: vendor/bundle
|
81
81
|
key: ${{ runner.os }}-bundle-${{ matrix.ruby }}-${{ matrix.rails }}-${{ matrix.database }}-${{ hashFiles('**/Gemfile') }}
|
@@ -87,7 +87,7 @@ jobs:
|
|
87
87
|
bundle install --jobs 4 --retry 3 --path vendor/bundle
|
88
88
|
- name: Restore node modules cache
|
89
89
|
id: yarn-cache
|
90
|
-
uses: actions/cache@
|
90
|
+
uses: actions/cache@v2.1.3
|
91
91
|
with:
|
92
92
|
path: spec/dummy/node_modules
|
93
93
|
key: ${{ runner.os }}-yarn-dummy-${{ hashFiles('./package.json') }}
|
@@ -97,12 +97,12 @@ jobs:
|
|
97
97
|
run: |
|
98
98
|
bundle exec rake alchemy:spec:prepare
|
99
99
|
- name: Run tests & publish code coverage
|
100
|
-
uses: paambaati/codeclimate-action@v2.5
|
100
|
+
uses: paambaati/codeclimate-action@v2.7.5
|
101
101
|
env:
|
102
102
|
CC_TEST_REPORTER_ID: bca4349e32f97919210ac8a450b04904b90683fcdd57d65a22c0f5065482bc22
|
103
103
|
with:
|
104
104
|
coverageCommand: bundle exec rspec
|
105
|
-
- uses: actions/upload-artifact@
|
105
|
+
- uses: actions/upload-artifact@main
|
106
106
|
if: failure()
|
107
107
|
with:
|
108
108
|
name: Screenshots
|
@@ -112,9 +112,9 @@ jobs:
|
|
112
112
|
env:
|
113
113
|
NODE_ENV: test
|
114
114
|
steps:
|
115
|
-
- uses: actions/checkout@
|
115
|
+
- uses: actions/checkout@v2.3.4
|
116
116
|
- name: Restore node modules cache
|
117
|
-
uses: actions/cache@
|
117
|
+
uses: actions/cache@v2.1.3
|
118
118
|
with:
|
119
119
|
path: node_modules
|
120
120
|
key: ${{ runner.os }}-yarn-${{ hashFiles('./package.json') }}
|
@@ -124,11 +124,3 @@ jobs:
|
|
124
124
|
run: yarn install
|
125
125
|
- name: Run jest
|
126
126
|
run: yarn jest
|
127
|
-
- name: Run jest & publish code coverage
|
128
|
-
uses: paambaati/codeclimate-action@v2.5.7
|
129
|
-
env:
|
130
|
-
CC_TEST_REPORTER_ID: bca4349e32f97919210ac8a450b04904b90683fcdd57d65a22c0f5065482bc22
|
131
|
-
with:
|
132
|
-
coverageLocations:
|
133
|
-
./coverage/lcov.info:lcov
|
134
|
-
coverageCommand: yarn jest --collectCoverage --coverageDirectory=coverage
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
|
-
## 5.0.
|
1
|
+
## 5.0.2 (2020-12-18)
|
2
2
|
|
3
|
+
- Fix page sorting [#1984](https://github.com/AlchemyCMS/alchemy_cms/pull/1984) ([tvdeyen](https://github.com/tvdeyen))
|
4
|
+
|
5
|
+
## 5.0.1 (2020-09-29)
|
6
|
+
|
7
|
+
- Better image alt text support [#1940](https://github.com/AlchemyCMS/alchemy_cms/pull/1940) ([tvdeyen](https://github.com/tvdeyen))
|
8
|
+
|
9
|
+
## 5.0.0 (2020-07-17)
|
10
|
+
|
11
|
+
- Do not convert JPEG images into JPG [#1904](https://github.com/AlchemyCMS/alchemy_cms/pull/1904) ([tvdeyen](https://github.com/tvdeyen))
|
12
|
+
- Do not enable image cropper if file is missing [#1903](https://github.com/AlchemyCMS/alchemy_cms/pull/1903) ([tvdeyen](https://github.com/tvdeyen))
|
13
|
+
- Always show original image as zoomed image [#1902](https://github.com/AlchemyCMS/alchemy_cms/pull/1902) ([tvdeyen](https://github.com/tvdeyen))
|
14
|
+
- Rename Attachment#urlname into slug [#1848](https://github.com/AlchemyCMS/alchemy_cms/pull/1848) ([tvdeyen](https://github.com/tvdeyen))
|
15
|
+
- Deprecate toolbar helper ([tvdeyen](https://github.com/tvdeyen))
|
16
|
+
- Deprecate redirect_to_public_child ([tvdeyen](https://github.com/tvdeyen))
|
17
|
+
- Add --auto-accept option to installer ([tvdeyen](https://github.com/tvdeyen))
|
18
|
+
- Move all installer code into install generator ([tvdeyen](https://github.com/tvdeyen))
|
3
19
|
- Language Factory: Create default language in host app's locale [#1884](https://github.com/AlchemyCMS/alchemy_cms/pull/1884) ([mamhoff](https://github.com/mamhoff))
|
4
20
|
- Respect filter and tagging params in picture archive size buttons [#1880](https://github.com/AlchemyCMS/alchemy_cms/pull/1880) ([tvdeyen](https://github.com/tvdeyen))
|
5
21
|
- Extract picture thumbnail sizes in a constant [#1879](https://github.com/AlchemyCMS/alchemy_cms/pull/1879) ([tvdeyen](https://github.com/tvdeyen))
|
data/Gemfile
CHANGED
@@ -10,7 +10,7 @@ if ENV["DB"].nil? || ENV["DB"] == "sqlite"
|
|
10
10
|
gem "sqlite3", "~> 1.4.1"
|
11
11
|
end
|
12
12
|
gem "mysql2", "~> 0.5.1" if ENV["DB"] == "mysql"
|
13
|
-
gem "pg",
|
13
|
+
gem "pg", "~> 1.0" if ENV["DB"] == "postgresql"
|
14
14
|
|
15
15
|
group :development, :test do
|
16
16
|
if ENV["GITHUB_ACTIONS"]
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# AlchemyCMS
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/alchemy_cms.svg)](http://badge.fury.io/rb/alchemy_cms)
|
4
|
-
[![Build Status](https://github.com/AlchemyCMS/alchemy_cms/workflows/CI/badge.svg?branch=
|
4
|
+
[![Build Status](https://github.com/AlchemyCMS/alchemy_cms/workflows/CI/badge.svg?branch=main)](https://github.com/AlchemyCMS/alchemy_cms/actions)
|
5
5
|
[![Maintainability](https://api.codeclimate.com/v1/badges/196c56c56568ed24a697/maintainability)](https://codeclimate.com/github/AlchemyCMS/alchemy_cms/maintainability)
|
6
6
|
[![Test Coverage](https://api.codeclimate.com/v1/badges/196c56c56568ed24a697/test_coverage)](https://codeclimate.com/github/AlchemyCMS/alchemy_cms/test_coverage)
|
7
7
|
[![Depfu](https://badges.depfu.com/badges/ebe56d2dd7b7044a8ae700cc81212a8e/overview.svg)](https://depfu.com/github/AlchemyCMS/alchemy_cms?project_id=4600)
|
@@ -125,7 +125,7 @@ $ bundle add alchemy-devise
|
|
125
125
|
Then run the `alchemy-devise` installer:
|
126
126
|
|
127
127
|
```bash
|
128
|
-
$ bin/rails g
|
128
|
+
$ bin/rails g alchemy:devise:install
|
129
129
|
```
|
130
130
|
|
131
131
|
##### Use your User model
|
@@ -167,7 +167,7 @@ Please follow [this guide](http://guides.alchemy-cms.com/stable/custom_authentic
|
|
167
167
|
**After** you set the user model you need to run the Alchemy install task:
|
168
168
|
|
169
169
|
```bash
|
170
|
-
$ bin/
|
170
|
+
$ bin/rails alchemy:install
|
171
171
|
```
|
172
172
|
|
173
173
|
Now everything should be set up and you should be able to visit the Alchemy Dashboard at:
|
data/Rakefile
CHANGED
@@ -39,16 +39,17 @@ namespace :alchemy do
|
|
39
39
|
namespace :spec do
|
40
40
|
desc "Prepares database for testing Alchemy"
|
41
41
|
task :prepare do
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
42
|
+
system(
|
43
|
+
<<~BASH
|
44
|
+
cd spec/dummy && \
|
45
|
+
export RAILS_ENV=test && \
|
46
|
+
bin/rake db:create && \
|
47
|
+
bin/rake db:environment:set && \
|
48
|
+
bin/rake db:migrate:reset && \
|
49
|
+
bin/rails g alchemy:install --skip --skip-demo-files --auto-accept && \
|
50
|
+
cd -
|
51
|
+
BASH
|
52
|
+
) || fail
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
@@ -314,6 +314,8 @@ module Alchemy
|
|
314
314
|
end
|
315
315
|
end
|
316
316
|
|
317
|
+
deprecate toolbar: "Please use `content_for(:toolbar)` instead", deprecator: Alchemy::Deprecation
|
318
|
+
|
317
319
|
# (internal) Used by upload form
|
318
320
|
def new_asset_path_with_session_information(asset_type)
|
319
321
|
session_key = Rails.application.config.session_options[:key]
|
@@ -26,12 +26,12 @@ module Alchemy
|
|
26
26
|
|
27
27
|
# Returns the path for downloading an alchemy attachment
|
28
28
|
def download_alchemy_attachment_path(attachment)
|
29
|
-
alchemy.download_attachment_path(attachment, attachment.
|
29
|
+
alchemy.download_attachment_path(attachment, attachment.slug)
|
30
30
|
end
|
31
31
|
|
32
32
|
# Returns the url for downloading an alchemy attachment
|
33
33
|
def download_alchemy_attachment_url(attachment)
|
34
|
-
alchemy.download_attachment_url(attachment, attachment.
|
34
|
+
alchemy.download_attachment_url(attachment, attachment.slug)
|
35
35
|
end
|
36
36
|
|
37
37
|
# Returns the full url containing host, page and anchor for the given element
|
@@ -77,10 +77,13 @@ module Alchemy
|
|
77
77
|
end
|
78
78
|
|
79
79
|
# An url save filename without format suffix
|
80
|
-
def
|
80
|
+
def slug
|
81
81
|
CGI.escape(file_name.gsub(/\.#{extension}$/, "").tr(".", " "))
|
82
82
|
end
|
83
83
|
|
84
|
+
alias_method :urlname, :slug
|
85
|
+
deprecate urlname: :slug, deprecator: Alchemy::Deprecation
|
86
|
+
|
84
87
|
# Checks if the attachment is restricted, because it is attached on restricted pages only
|
85
88
|
def restricted?
|
86
89
|
pages.any? && pages.not_restricted.blank?
|
@@ -55,7 +55,7 @@ module Alchemy
|
|
55
55
|
def img_tag
|
56
56
|
@_img_tag ||= image_tag(
|
57
57
|
essence.picture_url(options.except(*DEFAULT_OPTIONS.keys)), {
|
58
|
-
alt:
|
58
|
+
alt: alt_text,
|
59
59
|
title: essence.title.presence,
|
60
60
|
class: caption ? nil : essence.css_class.presence,
|
61
61
|
srcset: srcset.join(", ").presence,
|
@@ -79,5 +79,9 @@ module Alchemy
|
|
79
79
|
width.present? ? "#{url} #{width}w" : "#{url} #{height}h"
|
80
80
|
end
|
81
81
|
end
|
82
|
+
|
83
|
+
def alt_text
|
84
|
+
essence.alt_tag.presence || html_options.delete(:alt) || essence.picture.name&.humanize
|
85
|
+
end
|
82
86
|
end
|
83
87
|
end
|
@@ -71,7 +71,9 @@ module Alchemy
|
|
71
71
|
|
72
72
|
encoding_options = []
|
73
73
|
|
74
|
-
|
74
|
+
convert_format = target_format != image_file_format.sub("jpeg", "jpg")
|
75
|
+
|
76
|
+
if target_format =~ /jpe?g/ && convert_format
|
75
77
|
quality = options[:quality] || Config.get(:output_image_jpg_quality)
|
76
78
|
encoding_options << "-quality #{quality}"
|
77
79
|
end
|
@@ -80,7 +82,7 @@ module Alchemy
|
|
80
82
|
encoding_options << "-flatten"
|
81
83
|
end
|
82
84
|
|
83
|
-
convertion_needed =
|
85
|
+
convertion_needed = convert_format || encoding_options.present?
|
84
86
|
|
85
87
|
if has_convertible_format? && convertion_needed
|
86
88
|
image = image.encode(target_format, encoding_options.join(" "))
|
@@ -40,7 +40,7 @@ module Alchemy
|
|
40
40
|
|
41
41
|
level = path.count + base_level
|
42
42
|
|
43
|
-
path.last[:children] << page_hash(page,
|
43
|
+
path.last[:children] << page_hash(page, level, folded)
|
44
44
|
end
|
45
45
|
|
46
46
|
tree
|
@@ -48,7 +48,7 @@ module Alchemy
|
|
48
48
|
|
49
49
|
protected
|
50
50
|
|
51
|
-
def page_hash(page,
|
51
|
+
def page_hash(page, level, folded)
|
52
52
|
p_hash = {
|
53
53
|
id: page.id,
|
54
54
|
name: page.name,
|
@@ -59,8 +59,8 @@ module Alchemy
|
|
59
59
|
urlname: page.urlname,
|
60
60
|
url_path: page.url_path,
|
61
61
|
level: level,
|
62
|
-
root: page.
|
63
|
-
root_or_leaf: page.
|
62
|
+
root: page.root?,
|
63
|
+
root_or_leaf: page.root? || page.leaf?,
|
64
64
|
children: [],
|
65
65
|
}
|
66
66
|
|
@@ -1,29 +1,28 @@
|
|
1
1
|
<% label_title = Alchemy.t("Create #{resource_name}", default: Alchemy.t('Create')) %>
|
2
2
|
|
3
|
-
<% toolbar
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
<% content_for(:toolbar) do %>
|
4
|
+
<%= toolbar_button(
|
5
|
+
icon: :plus,
|
6
|
+
label: label_title,
|
7
|
+
url: new_resource_path,
|
8
|
+
title: label_title,
|
9
|
+
hotkey: 'alt+n',
|
10
|
+
dialog_options: {
|
9
11
|
title: label_title,
|
10
|
-
|
11
|
-
dialog_options: {
|
12
|
-
title: label_title,
|
13
|
-
size: resource_window_size
|
14
|
-
},
|
15
|
-
if_permitted_to: [:create, resource_model]
|
12
|
+
size: resource_window_size
|
16
13
|
},
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
) %>
|
14
|
+
if_permitted_to: [:create, resource_model]
|
15
|
+
) %>
|
16
|
+
<%= toolbar_button(
|
17
|
+
icon: :download,
|
18
|
+
url: resource_url_proxy.url_for(action: 'index', format: 'csv', q: search_filter_params[:q], sort: params[:sort]),
|
19
|
+
label: Alchemy.t(:download_csv),
|
20
|
+
title: Alchemy.t(:download_csv),
|
21
|
+
dialog: false,
|
22
|
+
if_permitted_to: [:index, resource_model]
|
23
|
+
) %>
|
24
|
+
<%= render 'alchemy/admin/partials/search_form' %>
|
25
|
+
<% end %>
|
27
26
|
|
28
27
|
<div id="archive_all" class="resources-table-wrapper<%= ' with_tag_filter' if resource_has_tags || resource_has_filters %>">
|
29
28
|
<%= render 'alchemy/admin/resources/table_header' %>
|
@@ -1,5 +1,5 @@
|
|
1
|
-
<%= alchemy_form_for site, url:
|
2
|
-
<%= f.input :host, hint: resource_handler.help_text_for(name: :host)
|
1
|
+
<%= alchemy_form_for site, url: resource_path(site, search_filter_params) do |f| %>
|
2
|
+
<%= f.input :host, hint: resource_handler.help_text_for(name: :host)&.html_safe %>
|
3
3
|
<%= f.input :name %>
|
4
4
|
<%= f.input :public %>
|
5
5
|
<%= f.input :aliases, hint: resource_handler.help_text_for(name: :aliases), input_html: {rows: 4} %>
|
data/lib/alchemy/config.rb
CHANGED
@@ -31,7 +31,9 @@ module Alchemy
|
|
31
31
|
# a value of nil means there is no new default
|
32
32
|
# any not nil value is the new default
|
33
33
|
def deprecated_configs
|
34
|
-
{
|
34
|
+
{
|
35
|
+
redirect_to_public_child: nil,
|
36
|
+
}
|
35
37
|
end
|
36
38
|
|
37
39
|
private
|
@@ -74,11 +76,11 @@ module Alchemy
|
|
74
76
|
if deprecated_configs.key?(name.to_sym)
|
75
77
|
config = deprecated_configs[name.to_sym]
|
76
78
|
if config.nil?
|
77
|
-
Alchemy::Deprecation.warn("#{name} configuration is deprecated and will be removed from Alchemy 5.
|
79
|
+
Alchemy::Deprecation.warn("#{name} configuration is deprecated and will be removed from Alchemy 5.1")
|
78
80
|
else
|
79
81
|
value = show[name.to_s]
|
80
82
|
if value != config
|
81
|
-
Alchemy::Deprecation.warn("Setting #{name} configuration to #{value} is deprecated and will be always #{config} in Alchemy 5.
|
83
|
+
Alchemy::Deprecation.warn("Setting #{name} configuration to #{value} is deprecated and will be always #{config} in Alchemy 5.1")
|
82
84
|
end
|
83
85
|
end
|
84
86
|
end
|
data/lib/alchemy/deprecation.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "thor"
|
3
|
+
|
4
|
+
module Alchemy
|
5
|
+
module Install
|
6
|
+
class Tasks < Thor
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
no_tasks do
|
10
|
+
def inject_routes(auto_accept = false)
|
11
|
+
return if File.read("./config/routes.rb").match?("mount Alchemy::Engine")
|
12
|
+
|
13
|
+
mountpoint = "/"
|
14
|
+
unless auto_accept
|
15
|
+
mountpoint = ask("- At which path do you want to mount Alchemy CMS at?", default: mountpoint)
|
16
|
+
end
|
17
|
+
sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
|
18
|
+
inject_into_file "./config/routes.rb", "\n mount Alchemy::Engine => '#{mountpoint}'\n", { after: sentinel, verbose: true }
|
19
|
+
end
|
20
|
+
|
21
|
+
def set_primary_language(auto_accept = false)
|
22
|
+
code = "en"
|
23
|
+
unless auto_accept
|
24
|
+
code = ask("- What is the language code of your site's primary language?", default: code)
|
25
|
+
end
|
26
|
+
name = "English"
|
27
|
+
unless auto_accept
|
28
|
+
name = ask("- What is the name of your site's primary language?", default: name)
|
29
|
+
end
|
30
|
+
gsub_file "./config/alchemy/config.yml", /default_language:\n\s\scode:\sen\n\s\sname:\sEnglish/m do
|
31
|
+
"default_language:\n code: #{code}\n name: #{name}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def inject_seeder
|
36
|
+
append_file "./db/seeds.rb", "Alchemy::Seeder.seed!\n"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/alchemy/resource.rb
CHANGED
@@ -210,7 +210,7 @@ module Alchemy
|
|
210
210
|
@module_definition && @module_definition["engine_name"]
|
211
211
|
end
|
212
212
|
|
213
|
-
# Returns a help text for resource's form
|
213
|
+
# Returns a help text for resource's form or nil if no help text is available
|
214
214
|
#
|
215
215
|
# === Example:
|
216
216
|
#
|
@@ -223,7 +223,7 @@ module Alchemy
|
|
223
223
|
def help_text_for(attribute)
|
224
224
|
::I18n.translate!(attribute[:name], scope: [:alchemy, :resource_help_texts, resource_name])
|
225
225
|
rescue ::I18n::MissingTranslationData
|
226
|
-
|
226
|
+
nil
|
227
227
|
end
|
228
228
|
|
229
229
|
# Return attributes that should be viewable but not editable.
|
data/lib/alchemy/version.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require "rails/generators"
|
3
|
+
require "alchemy/install/tasks"
|
3
4
|
|
4
5
|
module Alchemy
|
5
6
|
module Generators
|
6
7
|
class InstallGenerator < ::Rails::Generators::Base
|
7
8
|
desc "Installs Alchemy into your App."
|
8
9
|
|
10
|
+
class_option :auto_accept,
|
11
|
+
type: :boolean,
|
12
|
+
default: false,
|
13
|
+
desc: "Automatically accept defaults."
|
14
|
+
|
9
15
|
class_option :skip_demo_files,
|
10
16
|
type: :boolean,
|
11
17
|
default: false,
|
@@ -18,6 +24,13 @@ module Alchemy
|
|
18
24
|
|
19
25
|
source_root File.expand_path("files", __dir__)
|
20
26
|
|
27
|
+
def setup
|
28
|
+
header
|
29
|
+
say "Welcome to AlchemyCMS!"
|
30
|
+
say "Let's begin with some questions.\n\n"
|
31
|
+
install_tasks.inject_routes(options[:auto_accept])
|
32
|
+
end
|
33
|
+
|
21
34
|
def copy_config
|
22
35
|
copy_file "#{gem_config_path}/config.yml", app_config_path.join("alchemy", "config.yml")
|
23
36
|
end
|
@@ -53,7 +66,11 @@ module Alchemy
|
|
53
66
|
end
|
54
67
|
|
55
68
|
def copy_dragonfly_config
|
56
|
-
template
|
69
|
+
template(
|
70
|
+
"#{__dir__}/templates/dragonfly.rb.tt",
|
71
|
+
app_config_path.join("initializers", "dragonfly.rb"),
|
72
|
+
skip: options[:auto_accept]
|
73
|
+
)
|
57
74
|
end
|
58
75
|
|
59
76
|
def install_gutentag_migrations
|
@@ -80,8 +97,46 @@ module Alchemy
|
|
80
97
|
app_root.join(webpack_config["source_path"], webpack_config["source_entry_path"], "alchemy/admin.js")
|
81
98
|
end
|
82
99
|
|
100
|
+
def set_primary_language
|
101
|
+
header
|
102
|
+
install_tasks.set_primary_language(options[:auto_accept])
|
103
|
+
end
|
104
|
+
|
105
|
+
def setup_database
|
106
|
+
rake("db:create", abort_on_failure: true)
|
107
|
+
# We can't invoke this rake task, because Rails will use wrong engine names otherwise
|
108
|
+
rake("railties:install:migrations", abort_on_failure: true)
|
109
|
+
rake("db:migrate", abort_on_failure: true)
|
110
|
+
install_tasks.inject_seeder
|
111
|
+
rake("db:seed", abort_on_failure: true)
|
112
|
+
end
|
113
|
+
|
114
|
+
def finalize
|
115
|
+
header
|
116
|
+
say "Alchemy successfully installed!"
|
117
|
+
say "Now start the server with:\n\n"
|
118
|
+
say " bin/rails server\n\n"
|
119
|
+
say "and point your browser to\n\n"
|
120
|
+
say " http://localhost:3000/admin\n\n"
|
121
|
+
say "and follow the onscreen instructions to finalize the installation.\n\n"
|
122
|
+
end
|
123
|
+
|
83
124
|
private
|
84
125
|
|
126
|
+
def header
|
127
|
+
return if options[:auto_accept]
|
128
|
+
|
129
|
+
puts "─────────────────────"
|
130
|
+
puts "* Alchemy Installer *"
|
131
|
+
puts "─────────────────────"
|
132
|
+
end
|
133
|
+
|
134
|
+
def say(something)
|
135
|
+
return if options[:auto_accept]
|
136
|
+
|
137
|
+
puts " #{something}"
|
138
|
+
end
|
139
|
+
|
85
140
|
def gem_config_path
|
86
141
|
@_config_path ||= File.expand_path("../../../../config/alchemy", __dir__)
|
87
142
|
end
|
@@ -105,6 +160,10 @@ module Alchemy
|
|
105
160
|
def app_root
|
106
161
|
@_app_root ||= Rails.root
|
107
162
|
end
|
163
|
+
|
164
|
+
def install_tasks
|
165
|
+
@_install_tasks ||= Alchemy::Install::Tasks.new
|
166
|
+
end
|
108
167
|
end
|
109
168
|
end
|
110
169
|
end
|
@@ -1,59 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "thor"
|
3
|
-
|
4
|
-
class Alchemy::InstallTask < Thor
|
5
|
-
include Thor::Actions
|
6
|
-
|
7
|
-
no_tasks do
|
8
|
-
def inject_routes
|
9
|
-
mountpoint = ask "\nAt which path do you want to mount Alchemy CMS at? (DEFAULT: At root path '/')"
|
10
|
-
mountpoint = "/" if mountpoint.empty?
|
11
|
-
sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
|
12
|
-
inject_into_file "./config/routes.rb", "\n mount Alchemy::Engine => '#{mountpoint}'\n", { after: sentinel, verbose: true }
|
13
|
-
end
|
14
|
-
|
15
|
-
def set_primary_language
|
16
|
-
code = ask "\nWhat's the language code of your site's primary language? (DEFAULT: en)"
|
17
|
-
code = "en" if code.empty?
|
18
|
-
name = ask "What's the name of your site's primary language? (DEFAULT: English)"
|
19
|
-
name = "English" if name.empty?
|
20
|
-
gsub_file "./config/alchemy/config.yml", /default_language:\n\s\scode:\sen\n\s\sname:\sEnglish/m do
|
21
|
-
"default_language:\n code: #{code}\n name: #{name}"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def inject_seeder
|
26
|
-
append_file "./db/seeds.rb", "Alchemy::Seeder.seed!\n"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
2
|
|
31
3
|
namespace :alchemy do
|
32
4
|
desc "Installs Alchemy CMS into your app."
|
33
|
-
task
|
34
|
-
|
35
|
-
|
36
|
-
puts "\nAlchemy Installer"
|
37
|
-
puts "-----------------"
|
38
|
-
|
39
|
-
Rake::Task["alchemy:mount"].invoke
|
40
|
-
system("rails g alchemy:install") || exit!(1)
|
41
|
-
install_helper.set_primary_language
|
42
|
-
Rake::Task["db:create"].invoke
|
43
|
-
# We can't invoke this rake task, because Rails will use wrong engine names otherwise
|
44
|
-
`bundle exec rake railties:install:migrations`
|
45
|
-
Rake::Task["db:migrate"].invoke
|
46
|
-
install_helper.inject_seeder
|
47
|
-
Rake::Task["db:seed"].invoke
|
48
|
-
|
49
|
-
puts "\nAlchemy successfully installed."
|
50
|
-
puts "\nNow start the server with:"
|
51
|
-
puts "\n$ bin/rails server"
|
52
|
-
puts "\nand point your browser to http://localhost:3000/admin and follow the onscreen instructions to finalize the installation."
|
5
|
+
task :install do
|
6
|
+
require "generators/alchemy/install/install_generator"
|
7
|
+
Alchemy::Generators::InstallGenerator.start
|
53
8
|
end
|
54
9
|
|
55
10
|
desc "Mounts Alchemy into your routes."
|
56
11
|
task :mount do
|
57
|
-
|
12
|
+
require "alchemy/install/tasks"
|
13
|
+
Alchemy::InstallTasks.new.inject_routes
|
58
14
|
end
|
59
15
|
end
|
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: 5.0.
|
4
|
+
version: 5.0.2
|
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: 2020-
|
16
|
+
date: 2020-12-18 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: active_model_serializers
|
@@ -1087,6 +1087,7 @@ files:
|
|
1087
1087
|
- lib/alchemy/forms/builder.rb
|
1088
1088
|
- lib/alchemy/hints.rb
|
1089
1089
|
- lib/alchemy/i18n.rb
|
1090
|
+
- lib/alchemy/install/tasks.rb
|
1090
1091
|
- lib/alchemy/logger.rb
|
1091
1092
|
- lib/alchemy/modules.rb
|
1092
1093
|
- lib/alchemy/name_conversions.rb
|
@@ -1262,14 +1263,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1262
1263
|
version: 2.3.0
|
1263
1264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1264
1265
|
requirements:
|
1265
|
-
- - "
|
1266
|
+
- - ">="
|
1266
1267
|
- !ruby/object:Gem::Version
|
1267
|
-
version:
|
1268
|
+
version: '0'
|
1268
1269
|
requirements:
|
1269
1270
|
- ImageMagick (libmagick), v6.6 or greater.
|
1270
|
-
rubygems_version: 3.
|
1271
|
+
rubygems_version: 3.1.4
|
1271
1272
|
signing_key:
|
1272
1273
|
specification_version: 4
|
1273
1274
|
summary: A powerful, userfriendly and flexible CMS for Rails
|
1274
1275
|
test_files: []
|
1275
|
-
...
|