alchemy_cms 5.0.0.beta1 → 5.0.0.beta2
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 +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/alchemy_cms.gemspec +1 -1
- data/app/helpers/alchemy/admin/pictures_helper.rb +4 -6
- data/app/models/alchemy/picture.rb +22 -3
- data/app/models/alchemy/picture/preprocessor.rb +26 -0
- data/app/views/alchemy/admin/pictures/index.html.erb +18 -3
- data/config/alchemy/config.yml +10 -0
- data/lib/alchemy/admin/preview_url.rb +27 -6
- data/lib/alchemy/test_support/factories/language_factory.rb +8 -3
- data/lib/alchemy/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89a4ae7079c8ca7f64ae3b28d1acf1b648090d98fc4b9beff5061f81c73e1044
|
4
|
+
data.tar.gz: bb1169db4e23c9621745888be3963319b3746e156028d711a22870a4f51330e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c60d6b0ddcbe43763ff32fcad72144f572f6f8c91bbd1ac9bd0edbd41fd88723a29ef299f5ae51f5edd366e9f8ad7de5054a19768cfe92f27bb61f36d5c04bc2
|
7
|
+
data.tar.gz: f2f612afa9ae01c12d56b61c674ff311f89951acbeb0d327e3b15465761380a5344c65160dd121a6b88b6ab2ca6841d26a7eb75b92cfea65cba9bfb956fd81a1
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## 5.0.0 (unreleased)
|
2
2
|
|
3
|
+
- 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
|
+
- 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
|
+
- Extract picture thumbnail sizes in a constant [#1879](https://github.com/AlchemyCMS/alchemy_cms/pull/1879) ([tvdeyen](https://github.com/tvdeyen))
|
6
|
+
- Configurable Image Preprocessor [#1878](https://github.com/AlchemyCMS/alchemy_cms/pull/1878) ([tvdeyen](https://github.com/tvdeyen))
|
7
|
+
- Configure edit page preview per site [#1877](https://github.com/AlchemyCMS/alchemy_cms/pull/1877) ([tvdeyen](https://github.com/tvdeyen))
|
3
8
|
- Fix Page tree sorting after root page removal [#1876](https://github.com/AlchemyCMS/alchemy_cms/pull/1876) ([tvdeyen](https://github.com/tvdeyen))
|
4
9
|
- 5.0 Upgrader fixes [#1874](https://github.com/AlchemyCMS/alchemy_cms/pull/1874) ([tvdeyen](https://github.com/tvdeyen))
|
5
10
|
- Remove url_nesting config [#1872](https://github.com/AlchemyCMS/alchemy_cms/pull/1872) ([tvdeyen](https://github.com/tvdeyen))
|
data/alchemy_cms.gemspec
CHANGED
@@ -45,7 +45,7 @@ Gem::Specification.new do |gem|
|
|
45
45
|
|
46
46
|
gem.add_development_dependency 'capybara', ['~> 3.0']
|
47
47
|
gem.add_development_dependency 'capybara-screenshot', ['~> 1.0']
|
48
|
-
gem.add_development_dependency 'factory_bot_rails', ['~>
|
48
|
+
gem.add_development_dependency 'factory_bot_rails', ['~> 6.0']
|
49
49
|
gem.add_development_dependency 'puma', ['~> 4.0']
|
50
50
|
gem.add_development_dependency 'rails-controller-testing', ['~> 1.0']
|
51
51
|
gem.add_development_dependency 'rspec-activemodel-mocks', ['~> 1.0']
|
@@ -4,12 +4,10 @@ module Alchemy
|
|
4
4
|
module Admin
|
5
5
|
module PicturesHelper
|
6
6
|
def preview_size(size)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
"160x120"
|
12
|
-
end
|
7
|
+
Alchemy::Picture::THUMBNAIL_SIZES.fetch(
|
8
|
+
size,
|
9
|
+
Alchemy::Picture::THUMBNAIL_SIZES[:medium]
|
10
|
+
)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
@@ -22,6 +22,12 @@
|
|
22
22
|
|
23
23
|
module Alchemy
|
24
24
|
class Picture < BaseRecord
|
25
|
+
THUMBNAIL_SIZES = {
|
26
|
+
small: "80x60",
|
27
|
+
medium: "160x120",
|
28
|
+
large: "240x180",
|
29
|
+
}.with_indifferent_access.freeze
|
30
|
+
|
25
31
|
CONVERTIBLE_FILE_FORMATS = %w(gif jpg jpeg png).freeze
|
26
32
|
|
27
33
|
include Alchemy::NameConversions
|
@@ -50,12 +56,25 @@ module Alchemy
|
|
50
56
|
raise PictureInUseError, Alchemy.t(:cannot_delete_picture_notice) % { name: name }
|
51
57
|
end
|
52
58
|
|
59
|
+
# Image preprocessing class
|
60
|
+
def self.preprocessor_class
|
61
|
+
@_preprocessor_class ||= Preprocessor
|
62
|
+
end
|
63
|
+
|
64
|
+
# Set a image preprocessing class
|
65
|
+
#
|
66
|
+
# # config/initializers/alchemy.rb
|
67
|
+
# Alchemy::Picture.preprocessor_class = My::ImagePreprocessor
|
68
|
+
#
|
69
|
+
def self.preprocessor_class=(klass)
|
70
|
+
@_preprocessor_class = klass
|
71
|
+
end
|
72
|
+
|
53
73
|
# Enables Dragonfly image processing
|
54
74
|
dragonfly_accessor :image_file, app: :alchemy_pictures do
|
55
75
|
# Preprocess after uploading the picture
|
56
|
-
after_assign do |
|
57
|
-
|
58
|
-
p.thumb!(resize) if resize.present?
|
76
|
+
after_assign do |image|
|
77
|
+
self.class.preprocessor_class.new(image).call
|
59
78
|
end
|
60
79
|
end
|
61
80
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Alchemy
|
4
|
+
class Picture < BaseRecord
|
5
|
+
class Preprocessor
|
6
|
+
def initialize(image_file)
|
7
|
+
@image_file = image_file
|
8
|
+
end
|
9
|
+
|
10
|
+
# Preprocess images after upload
|
11
|
+
#
|
12
|
+
# Define preprocessing options in the Alchemy::Config
|
13
|
+
#
|
14
|
+
# preprocess_image_resize [String] - Downsizing example: '1000x1000>'
|
15
|
+
#
|
16
|
+
def call
|
17
|
+
max_image_size = Alchemy::Config.get(:preprocess_image_resize)
|
18
|
+
image_file.thumb!(max_image_size) if max_image_size.present?
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_reader :image_file
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -14,7 +14,12 @@
|
|
14
14
|
<div class="button_with_label">
|
15
15
|
<%= link_to(
|
16
16
|
render_icon('search-minus'),
|
17
|
-
alchemy.admin_pictures_path(
|
17
|
+
alchemy.admin_pictures_path(
|
18
|
+
size: "small",
|
19
|
+
q: search_filter_params[:q],
|
20
|
+
filter: search_filter_params[:filter],
|
21
|
+
tagged_with: search_filter_params[:tagged_with]
|
22
|
+
),
|
18
23
|
title: Alchemy.t(:small_thumbnails),
|
19
24
|
class: "icon_button"
|
20
25
|
) %>
|
@@ -22,7 +27,12 @@
|
|
22
27
|
<div class="button_with_label">
|
23
28
|
<%= link_to(
|
24
29
|
render_icon('search'),
|
25
|
-
alchemy.admin_pictures_path(
|
30
|
+
alchemy.admin_pictures_path(
|
31
|
+
size: "medium",
|
32
|
+
q: search_filter_params[:q],
|
33
|
+
filter: search_filter_params[:filter],
|
34
|
+
tagged_with: search_filter_params[:tagged_with]
|
35
|
+
),
|
26
36
|
title: Alchemy.t(:medium_thumbnails),
|
27
37
|
class: "icon_button"
|
28
38
|
) %>
|
@@ -30,7 +40,12 @@
|
|
30
40
|
<div class="button_with_label">
|
31
41
|
<%= link_to(
|
32
42
|
render_icon('search-plus'),
|
33
|
-
alchemy.admin_pictures_path(
|
43
|
+
alchemy.admin_pictures_path(
|
44
|
+
size: "large",
|
45
|
+
q: search_filter_params[:q],
|
46
|
+
filter: search_filter_params[:filter],
|
47
|
+
tagged_with: search_filter_params[:tagged_with]
|
48
|
+
),
|
34
49
|
title: Alchemy.t(:big_thumbnails),
|
35
50
|
class: "icon_button"
|
36
51
|
) %>
|
data/config/alchemy/config.yml
CHANGED
@@ -55,6 +55,16 @@ items_per_page: 15
|
|
55
55
|
# auth:
|
56
56
|
# username: <%= ENV["BASIC_AUTH_USERNAME"] %>
|
57
57
|
# password: <%= ENV["BASIC_AUTH_PASSWORD"] %>
|
58
|
+
#
|
59
|
+
# Preview config per site is supported as well.
|
60
|
+
#
|
61
|
+
# preview:
|
62
|
+
# My site name:
|
63
|
+
# host: https://www.my-static-site.com
|
64
|
+
# auth:
|
65
|
+
# username: <%= ENV["BASIC_AUTH_USERNAME"] %>
|
66
|
+
# password: <%= ENV["BASIC_AUTH_PASSWORD"] %>
|
67
|
+
#
|
58
68
|
|
59
69
|
# === Picture rendering settings
|
60
70
|
#
|
@@ -19,19 +19,31 @@ module Alchemy
|
|
19
19
|
# username: <%= ENV["BASIC_AUTH_USERNAME"] %>
|
20
20
|
# password: <%= ENV["BASIC_AUTH_PASSWORD"] %>
|
21
21
|
#
|
22
|
+
# Preview config per site is supported as well.
|
23
|
+
#
|
24
|
+
# == Example config/alchemy/config.yml
|
25
|
+
#
|
26
|
+
# preview:
|
27
|
+
# My site name:
|
28
|
+
# host: https://www.my-static-site.com
|
29
|
+
# auth:
|
30
|
+
# username: <%= ENV["BASIC_AUTH_USERNAME"] %>
|
31
|
+
# password: <%= ENV["BASIC_AUTH_PASSWORD"] %>
|
32
|
+
#
|
22
33
|
class PreviewUrl
|
23
34
|
class MissingProtocolError < StandardError; end
|
24
35
|
|
25
36
|
def initialize(routes:)
|
26
37
|
@routes = routes.url_helpers
|
27
|
-
@preview_config = Alchemy::Config.get(:preview)
|
28
38
|
end
|
29
39
|
|
30
40
|
def url_for(page)
|
31
|
-
|
41
|
+
@preview_config = preview_config_for(page)
|
42
|
+
|
43
|
+
if @preview_config && uri
|
32
44
|
uri_class.build(
|
33
45
|
host: uri.host,
|
34
|
-
path:
|
46
|
+
path: page.url_path,
|
35
47
|
userinfo: userinfo,
|
36
48
|
).to_s
|
37
49
|
else
|
@@ -41,10 +53,19 @@ module Alchemy
|
|
41
53
|
|
42
54
|
private
|
43
55
|
|
44
|
-
attr_reader :
|
56
|
+
attr_reader :routes
|
57
|
+
|
58
|
+
def preview_config_for(page)
|
59
|
+
preview_config = Alchemy::Config.get(:preview)
|
60
|
+
return unless preview_config
|
61
|
+
|
62
|
+
preview_config[page.site.name] || preview_config
|
63
|
+
end
|
45
64
|
|
46
65
|
def uri
|
47
|
-
|
66
|
+
return unless @preview_config["host"]
|
67
|
+
|
68
|
+
URI(@preview_config["host"])
|
48
69
|
end
|
49
70
|
|
50
71
|
def uri_class
|
@@ -56,7 +77,7 @@ module Alchemy
|
|
56
77
|
end
|
57
78
|
|
58
79
|
def userinfo
|
59
|
-
auth = preview_config["auth"]
|
80
|
+
auth = @preview_config["auth"]
|
60
81
|
auth ? "#{auth["username"]}:#{auth["password"]}" : nil
|
61
82
|
end
|
62
83
|
end
|
@@ -5,8 +5,8 @@ require "alchemy/test_support/factories/site_factory"
|
|
5
5
|
|
6
6
|
FactoryBot.define do
|
7
7
|
factory :alchemy_language, class: "Alchemy::Language" do
|
8
|
-
name { "
|
9
|
-
code {
|
8
|
+
name { "Your Language" }
|
9
|
+
code { ::I18n.available_locales.first.to_s }
|
10
10
|
default { true }
|
11
11
|
frontpage_name { "Intro" }
|
12
12
|
page_layout { Alchemy::Config.get(:default_language)["page_layout"] }
|
@@ -25,7 +25,12 @@ FactoryBot.define do
|
|
25
25
|
trait :english do
|
26
26
|
name { "English" }
|
27
27
|
code { "en" }
|
28
|
-
|
28
|
+
default { false }
|
29
|
+
end
|
30
|
+
|
31
|
+
trait :german do
|
32
|
+
name { "Deutsch" }
|
33
|
+
code { "de" }
|
29
34
|
default { false }
|
30
35
|
end
|
31
36
|
end
|
data/lib/alchemy/version.rb
CHANGED
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.0.
|
4
|
+
version: 5.0.0.beta2
|
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-06-
|
16
|
+
date: 2020-06-25 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: active_model_serializers
|
@@ -463,14 +463,14 @@ dependencies:
|
|
463
463
|
requirements:
|
464
464
|
- - "~>"
|
465
465
|
- !ruby/object:Gem::Version
|
466
|
-
version: '
|
466
|
+
version: '6.0'
|
467
467
|
type: :development
|
468
468
|
prerelease: false
|
469
469
|
version_requirements: !ruby/object:Gem::Requirement
|
470
470
|
requirements:
|
471
471
|
- - "~>"
|
472
472
|
- !ruby/object:Gem::Version
|
473
|
-
version: '
|
473
|
+
version: '6.0'
|
474
474
|
- !ruby/object:Gem::Dependency
|
475
475
|
name: puma
|
476
476
|
requirement: !ruby/object:Gem::Requirement
|
@@ -815,6 +815,7 @@ files:
|
|
815
815
|
- app/models/alchemy/page/page_scopes.rb
|
816
816
|
- app/models/alchemy/page/url_path.rb
|
817
817
|
- app/models/alchemy/picture.rb
|
818
|
+
- app/models/alchemy/picture/preprocessor.rb
|
818
819
|
- app/models/alchemy/picture/transformations.rb
|
819
820
|
- app/models/alchemy/picture/url.rb
|
820
821
|
- app/models/alchemy/site.rb
|