alchemy_cms 5.1.9 → 5.2.0.b1

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.

Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +2 -1
  3. data/CHANGELOG.md +21 -25
  4. data/Gemfile +2 -6
  5. data/alchemy_cms.gemspec +3 -3
  6. data/app/assets/stylesheets/alchemy/_variables.scss +2 -0
  7. data/app/assets/stylesheets/alchemy/elements.scss +38 -5
  8. data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +3 -3
  9. data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +7 -7
  10. data/app/controllers/alchemy/admin/base_controller.rb +1 -0
  11. data/app/controllers/alchemy/admin/trash_controller.rb +2 -0
  12. data/app/decorators/alchemy/content_editor.rb +64 -0
  13. data/app/decorators/alchemy/element_editor.rb +1 -25
  14. data/app/helpers/alchemy/admin/contents_helper.rb +3 -8
  15. data/app/helpers/alchemy/elements_helper.rb +0 -18
  16. data/app/helpers/alchemy/pages_helper.rb +1 -1
  17. data/app/models/alchemy/attachment.rb +5 -1
  18. data/app/models/alchemy/content.rb +7 -0
  19. data/app/models/alchemy/element/definitions.rb +5 -22
  20. data/app/models/alchemy/element.rb +39 -1
  21. data/app/models/alchemy/node.rb +1 -1
  22. data/app/models/alchemy/page/page_elements.rb +9 -2
  23. data/app/models/alchemy/page.rb +1 -1
  24. data/app/models/alchemy/picture.rb +2 -2
  25. data/app/models/alchemy/picture_variant.rb +1 -1
  26. data/app/views/alchemy/admin/elements/_element.html.erb +1 -1
  27. data/app/views/alchemy/admin/elements/_element_header.html.erb +2 -0
  28. data/app/views/alchemy/essences/_essence_picture_view.html.erb +3 -3
  29. data/config/brakeman.ignore +305 -17
  30. data/config/locales/alchemy.en.yml +40 -24
  31. data/lib/alchemy/deprecation.rb +1 -1
  32. data/lib/alchemy/element_definition.rb +70 -0
  33. data/lib/alchemy/elements_finder.rb +6 -2
  34. data/lib/alchemy/engine.rb +1 -1
  35. data/lib/alchemy/essence.rb +4 -4
  36. data/lib/alchemy/filetypes.rb +13 -0
  37. data/lib/alchemy/forms/builder.rb +1 -1
  38. data/lib/alchemy/i18n.rb +4 -5
  39. data/lib/alchemy/page_layout.rb +1 -0
  40. data/lib/alchemy/resource.rb +3 -5
  41. data/lib/alchemy/test_support/integration_helpers.rb +5 -5
  42. data/lib/alchemy/upgrader/five_point_zero.rb +0 -32
  43. data/lib/alchemy/version.rb +1 -1
  44. data/lib/alchemy_cms.rb +1 -0
  45. data/lib/generators/alchemy/install/install_generator.rb +1 -2
  46. data/lib/tasks/alchemy/thumbnails.rake +2 -4
  47. data/lib/tasks/alchemy/upgrade.rake +0 -20
  48. data/package/admin.js +0 -2
  49. data/package/src/__tests__/i18n.spec.js +0 -23
  50. data/package/src/i18n.js +3 -1
  51. data/package.json +1 -1
  52. metadata +12 -18
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alchemy
4
+ class ElementDefinition
5
+ class << self
6
+ # Returns the definitions from elements.yml file.
7
+ #
8
+ # Place a +elements.yml+ file inside your apps +config/alchemy+ folder to define
9
+ # your own set of elements
10
+ #
11
+ def all
12
+ @definitions ||= read_definitions_file.map(&:with_indifferent_access)
13
+ end
14
+
15
+ # Add additional page definitions to collection.
16
+ #
17
+ # Useful for extending the elements from an Alchemy module.
18
+ #
19
+ # === Usage Example
20
+ #
21
+ # Call +Alchemy::ElementDefinition.add(your_definition)+ in your engine.rb file.
22
+ #
23
+ # @param [Array || Hash]
24
+ # You can pass a single element definition as Hash, or a collection of elements as Array.
25
+ #
26
+ def add(element)
27
+ all
28
+ if element.is_a?(Array)
29
+ @definitions += element
30
+ elsif element.is_a?(Hash)
31
+ @definitions << element
32
+ else
33
+ raise TypeError
34
+ end
35
+ end
36
+
37
+ # Returns one element definition by given name.
38
+ #
39
+ def get(name)
40
+ return {} if name.blank?
41
+
42
+ all.detect { |a| a["name"] == name }
43
+ end
44
+
45
+ private
46
+
47
+ # Reads the element definitions from +config/alchemy/elements.yml+.
48
+ #
49
+ def read_definitions_file
50
+ if File.exist?(definitions_file_path)
51
+ YAML.safe_load(
52
+ ERB.new(File.read(definitions_file_path)).result,
53
+ YAML_WHITELIST_CLASSES,
54
+ [],
55
+ true
56
+ ) || []
57
+ else
58
+ raise LoadError,
59
+ "Could not find elements.yml file! Please run `rails generate alchemy:install`"
60
+ end
61
+ end
62
+
63
+ # Returns the elements.yml file path
64
+ #
65
+ def definitions_file_path
66
+ Rails.root.join "config/alchemy/elements.yml"
67
+ end
68
+ end
69
+ end
70
+ end
@@ -26,8 +26,6 @@ module Alchemy
26
26
  # Randomize the output of elements
27
27
  # @option options [Boolean] :reverse (false)
28
28
  # Reverse the load order
29
- # @option options [Hash] :fallback
30
- # Define elements that are loaded from another page if no element was found on given page.
31
29
  def initialize(options = {})
32
30
  @options = options
33
31
  end
@@ -83,6 +81,9 @@ module Alchemy
83
81
  when Alchemy::Page
84
82
  page_or_layout
85
83
  when String
84
+ Alchemy::Deprecation.warn "Passing a String as `from_page` option to " \
85
+ "`render_elements` is deprecated and will be removed with Alchemy 6.0. " \
86
+ "Please load the page beforehand and pass it as an object instead."
86
87
  Alchemy::Page.find_by(
87
88
  language: Alchemy::Language.current,
88
89
  page_layout: page_or_layout,
@@ -92,6 +93,9 @@ module Alchemy
92
93
  end
93
94
 
94
95
  def fallback_required?(elements)
96
+ if options[:fallback]
97
+ Alchemy::Deprecation.warn "Passing `fallback` options to `render_elements` is deprecated an will be removed with Alchemy 6.0."
98
+ end
95
99
  options[:fallback] && elements
96
100
  .where(Alchemy::Element.table_name => {name: options[:fallback][:for]})
97
101
  .none?
@@ -40,7 +40,7 @@ module Alchemy
40
40
  if Alchemy.user_class
41
41
  ActiveSupport.on_load(:active_record) do
42
42
  Alchemy.user_class.model_stamper
43
- Alchemy.user_class.stampable(stamper_class_name: Alchemy.user_class.name)
43
+ Alchemy.user_class.stampable(stamper_class_name: Alchemy.user_class_name)
44
44
  end
45
45
  end
46
46
  end
@@ -83,7 +83,7 @@ module Alchemy #:nodoc:
83
83
 
84
84
  if configuration[:belongs_to]
85
85
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
86
- belongs_to :ingredient_association, #{configuration[:belongs_to]}
86
+ belongs_to :ingredient_association, **#{configuration[:belongs_to]}
87
87
 
88
88
  alias_method :#{configuration[:ingredient_column]}, :ingredient_association
89
89
  alias_method :#{configuration[:ingredient_column]}=, :ingredient_association=
@@ -108,9 +108,9 @@ module Alchemy #:nodoc:
108
108
  # Register the current class as has_many association on +Alchemy::Page+ and +Alchemy::Element+ models
109
109
  def register_as_essence_association!
110
110
  klass_name = model_name.to_s
111
- arguments = [:has_many, klass_name.demodulize.tableize.to_sym, through: :contents,
112
- source: :essence, source_type: klass_name]
113
- %w(Page Element).each { |k| "Alchemy::#{k}".constantize.send(*arguments) }
111
+ arguments = [:has_many, klass_name.demodulize.tableize.to_sym]
112
+ kwargs = { through: :contents, source: :essence, source_type: klass_name }
113
+ %w(Page Element).each { |k| "Alchemy::#{k}".constantize.send(*arguments, **kwargs) }
114
114
  end
115
115
  end
116
116
 
@@ -40,7 +40,20 @@ module Alchemy
40
40
  EXCEL_FILE_TYPES = [
41
41
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
42
42
  "application/vnd.ms-excel",
43
+ "application/msexcel",
43
44
  "text/csv",
44
45
  ]
46
+
47
+ WORD_FILE_TYPES = [
48
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
49
+ "application/vnd.ms-word",
50
+ "application/msword",
51
+ ]
52
+
53
+ POWERPOINT_FILE_TYPES = [
54
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
55
+ "application/vnd.ms-powerpoint",
56
+ "application/mspowerpoint",
57
+ ]
45
58
  end
46
59
  end
@@ -11,7 +11,7 @@ module Alchemy
11
11
  if object.respond_to?(:attribute_fixed?) && object.attribute_fixed?(attribute_name)
12
12
  options[:disabled] = true
13
13
  options[:input_html] = options.fetch(:input_html, {}).merge(
14
- "data-alchemy-tooltip" => Alchemy.t(:attribute_fixed, attribute_name),
14
+ "data-alchemy-tooltip" => Alchemy.t(:attribute_fixed, attribute: attribute_name),
15
15
  )
16
16
  end
17
17
 
data/lib/alchemy/i18n.rb CHANGED
@@ -12,8 +12,8 @@ module Alchemy
12
12
  #
13
13
  # Alchemy.t(:hello)
14
14
  #
15
- def t(msg, *args)
16
- Alchemy::I18n.translate(msg, *args)
15
+ def t(msg, **kwargs)
16
+ Alchemy::I18n.translate(msg, **kwargs)
17
17
  end
18
18
  end
19
19
 
@@ -47,11 +47,10 @@ module Alchemy
47
47
  # world:
48
48
  # hello: Hallo
49
49
  #
50
- def translate(msg, *args)
51
- options = args.extract_options!
50
+ def translate(msg, **options)
52
51
  humanize_default_string!(msg, options)
53
52
  scope = alchemy_scoped_scope(options)
54
- ::I18n.t(msg, options.merge(scope: scope))
53
+ ::I18n.t(msg, **options.merge(scope: scope))
55
54
  end
56
55
 
57
56
  def available_locales
@@ -74,6 +74,7 @@ module Alchemy
74
74
  end
75
75
  mapped_layouts_for_select(layouts)
76
76
  end
77
+ deprecate :layouts_with_own_for_select, deprecator: Alchemy::Deprecation
77
78
 
78
79
  # Returns all layouts that can be used for creating a new page.
79
80
  #
@@ -132,9 +132,7 @@ module Alchemy
132
132
  end
133
133
 
134
134
  def namespaced_resource_name
135
- @_namespaced_resource_name ||= begin
136
- namespaced_resources_name.to_s.singularize
137
- end.to_sym # Rails >= 6.0.3.7 needs symbols in polymorphic routes
135
+ @_namespaced_resource_name ||= namespaced_resources_name.singularize
138
136
  end
139
137
 
140
138
  def namespaced_resources_name
@@ -142,13 +140,13 @@ module Alchemy
142
140
  resource_name_array = resource_array.dup
143
141
  resource_name_array.delete(engine_name) if in_engine?
144
142
  resource_name_array.join("_")
145
- end.to_sym # Rails >= 6.0.3.7 needs symbols in polymorphic routes
143
+ end
146
144
  end
147
145
 
148
146
  def namespace_for_scope
149
147
  namespace_array = namespace_diff
150
148
  namespace_array.delete(engine_name) if in_engine?
151
- namespace_array.map(&:to_sym) # Rails >= 6.0.3.7 needs symbols in polymorphic routes
149
+ namespace_array
152
150
  end
153
151
 
154
152
  # Returns an array of underscored association names
@@ -6,16 +6,16 @@ module Alchemy
6
6
  # This file is included in spec_helper.rb
7
7
  #
8
8
  module IntegrationHelpers
9
- # Used to stub the current_alchemy_user
9
+ # Used to stub the current_user in integration specs
10
10
  #
11
11
  # Pass either a user object or a symbol in the format of ':as_admin'.
12
- # The browser language is set to english ('en')
13
12
  #
14
13
  def authorize_user(user_or_role = nil)
15
- if user_or_role.is_a?(Alchemy.user_class)
16
- user = user_or_role
17
- else
14
+ case user_or_role
15
+ when Symbol, String
18
16
  user = build(:alchemy_dummy_user, user_or_role)
17
+ else
18
+ user = user_or_role
19
19
  end
20
20
  allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(user)
21
21
  end
@@ -1,19 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "tasks/harden_gutentag_migrations"
4
- require "rails/generators"
5
- require "thor"
6
- require "alchemy/install/tasks"
7
- require "alchemy/version"
8
4
 
9
5
  module Alchemy
10
6
  class Upgrader::FivePointZero < Upgrader
11
- include Rails::Generators::Actions
12
- include Thor::Base
13
- include Thor::Actions
14
-
15
- source_root File.expand_path("../../generators/alchemy/install/files", __dir__)
16
-
17
7
  class << self
18
8
  def install_gutentag_migrations
19
9
  desc "Install Gutentag migrations"
@@ -46,28 +36,6 @@ module Alchemy
46
36
  log "Root page not found.", :skip
47
37
  end
48
38
  end
49
-
50
- def run_webpacker_installer
51
- # Webpacker does not create a package.json, but we need one
52
- unless File.exist? app_root.join("package.json")
53
- in_root { run "echo '{}' > package.json" }
54
- end
55
- new.rake("webpacker:install", abort_on_failure: true)
56
- end
57
-
58
- def add_npm_package
59
- new.run "yarn add @alchemy_cms/admin@~#{Alchemy.version}"
60
- end
61
-
62
- def copy_alchemy_entry_point
63
- webpack_config = YAML.load_file(app_root.join("config", "webpacker.yml"))[Rails.env]
64
- new.copy_file "alchemy_admin.js",
65
- app_root.join(webpack_config["source_path"], webpack_config["source_entry_path"], "alchemy/admin.js")
66
- end
67
-
68
- def app_root
69
- @_app_root ||= Rails.root
70
- end
71
39
  end
72
40
  end
73
41
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "5.1.9"
4
+ VERSION = "5.2.0.b1"
5
5
 
6
6
  def self.version
7
7
  VERSION
data/lib/alchemy_cms.rb CHANGED
@@ -35,6 +35,7 @@ require_relative "alchemy/config"
35
35
  require_relative "alchemy/configuration_methods"
36
36
  require_relative "alchemy/controller_actions"
37
37
  require_relative "alchemy/deprecation"
38
+ require_relative "alchemy/element_definition"
38
39
  require_relative "alchemy/elements_finder"
39
40
  require_relative "alchemy/errors"
40
41
  require_relative "alchemy/essence"
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require "rails/generators"
3
3
  require "alchemy/install/tasks"
4
- require "alchemy/version"
5
4
 
6
5
  module Alchemy
7
6
  module Generators
@@ -89,7 +88,7 @@ module Alchemy
89
88
  end
90
89
 
91
90
  def add_npm_package
92
- run "yarn add @alchemy_cms/admin@~#{Alchemy.version}"
91
+ run "yarn add @alchemy_cms/admin"
93
92
  end
94
93
 
95
94
  def copy_alchemy_entry_point
@@ -4,8 +4,8 @@ namespace :alchemy do
4
4
  namespace :generate do
5
5
  desc "Generates all thumbnails for Alchemy Pictures and EssencePictures."
6
6
  task thumbnails: [
7
- "alchemy:generate:picture_thumbnails",
8
- "alchemy:generate:essence_picture_thumbnails",
7
+ "alchemy_dragonfly_s3:generate:picture_thumbnails",
8
+ "alchemy_dragonfly_s3:generate:essence_picture_thumbnails",
9
9
  ]
10
10
 
11
11
  desc "Generates thumbnails for Alchemy Pictures."
@@ -14,8 +14,6 @@ namespace :alchemy do
14
14
  puts "Please wait..."
15
15
 
16
16
  Alchemy::Picture.find_each do |picture|
17
- next unless picture.has_convertible_format?
18
-
19
17
  puts Alchemy::PictureThumb.generate_thumbs!(picture)
20
18
  end
21
19
 
@@ -42,9 +42,6 @@ namespace :alchemy do
42
42
  "alchemy:upgrade:5.0:install_gutentag_migrations",
43
43
  "alchemy:upgrade:5.0:remove_layout_roots",
44
44
  "alchemy:upgrade:5.0:remove_root_page",
45
- "alchemy:upgrade:5.0:run_webpacker_installer",
46
- "alchemy:upgrade:5.0:add_npm_package",
47
- "alchemy:upgrade:5.0:copy_alchemy_entry_point",
48
45
  ]
49
46
 
50
47
  desc "Install Gutentag migrations"
@@ -61,23 +58,6 @@ namespace :alchemy do
61
58
  task remove_root_page: [:environment] do
62
59
  Alchemy::Upgrader::FivePointZero.remove_root_page
63
60
  end
64
-
65
- desc "Run webpacker installer"
66
- task run_webpacker_installer: [:environment] do
67
- Alchemy::Upgrader::FivePointZero.run_webpacker_installer
68
- end
69
-
70
- desc "Add NPM package"
71
- task add_npm_package: [:environment] do
72
- puts "adding npm_package..."
73
- Alchemy::Upgrader::FivePointZero.add_npm_package
74
- end
75
-
76
- desc "Copy alchemy entry point"
77
- task copy_alchemy_entry_point: [:environment] do
78
- puts "copying alchemy entry point"
79
- Alchemy::Upgrader::FivePointZero.copy_alchemy_entry_point
80
- end
81
61
  end
82
62
  end
83
63
  end
data/package/admin.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import translate from "./src/i18n"
2
- import translationData from "./src/translations"
3
2
  import NodeTree from "./src/node_tree"
4
3
 
5
4
  // Global Alchemy object
@@ -11,6 +10,5 @@ if (typeof window.Alchemy === "undefined") {
11
10
  Object.assign(Alchemy, {
12
11
  // Global utility method for translating a given string
13
12
  t: translate,
14
- translations: Object.assign(Alchemy.translations || {}, translationData),
15
13
  NodeTree
16
14
  })
@@ -15,20 +15,12 @@ describe("translate", () => {
15
15
  })
16
16
 
17
17
  describe("if translation is present", () => {
18
- beforeEach(() => {
19
- Alchemy.translations = { en: { help: "Help" } }
20
- })
21
-
22
18
  it("Returns translated string", () => {
23
19
  expect(translate("help")).toEqual("Help")
24
20
  })
25
21
 
26
22
  describe("if key includes a period", () => {
27
23
  describe("that is translated", () => {
28
- beforeEach(() => {
29
- Alchemy.translations = { en: { formats: { date: "Y-m-d" } } }
30
- })
31
-
32
24
  it("splits into group", () => {
33
25
  expect(translate("formats.date")).toEqual("Y-m-d")
34
26
  })
@@ -48,10 +40,6 @@ describe("translate", () => {
48
40
  })
49
41
 
50
42
  describe("if replacement is given", () => {
51
- beforeEach(() => {
52
- Alchemy.translations = { en: { allowed_chars: "of %{number} chars" } }
53
- })
54
-
55
43
  it("replaces it", () => {
56
44
  expect(translate("allowed_chars", 5)).toEqual("of 5 chars")
57
45
  })
@@ -79,15 +67,4 @@ describe("translate", () => {
79
67
  spy.mockRestore()
80
68
  })
81
69
  })
82
-
83
- describe("if Alchemy.translations is not set", () => {
84
- it("Returns passed string and logs a warning", () => {
85
- const spy = jest.spyOn(console, "warn").mockImplementation(() => {})
86
- expect(translate("help")).toEqual("help")
87
- expect(spy.mock.calls).toEqual([
88
- ["Translations for locale kl not found!"]
89
- ])
90
- spy.mockRestore()
91
- })
92
- })
93
70
  })
data/package/src/i18n.js CHANGED
@@ -1,3 +1,5 @@
1
+ import translationData from "./translations"
2
+
1
3
  const KEY_SEPARATOR = /\./
2
4
 
3
5
  function currentLocale() {
@@ -9,7 +11,7 @@ function currentLocale() {
9
11
 
10
12
  function getTranslations() {
11
13
  const locale = currentLocale()
12
- const translations = Alchemy.translations && Alchemy.translations[locale]
14
+ const translations = translationData[locale]
13
15
 
14
16
  if (translations) {
15
17
  return translations
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alchemy_cms/admin",
3
- "version": "5.1.8",
3
+ "version": "0.2.0",
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: 5.1.9
4
+ version: 5.2.0.b1
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-11-24 00:00:00.000000000 Z
16
+ date: 2021-02-11 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: active_model_serializers
@@ -113,9 +113,6 @@ dependencies:
113
113
  - - ">="
114
114
  - !ruby/object:Gem::Version
115
115
  version: 1.0.7
116
- - - "<"
117
- - !ruby/object:Gem::Version
118
- version: 1.4.0
119
116
  type: :runtime
120
117
  prerelease: false
121
118
  version_requirements: !ruby/object:Gem::Requirement
@@ -126,9 +123,6 @@ dependencies:
126
123
  - - ">="
127
124
  - !ruby/object:Gem::Version
128
125
  version: 1.0.7
129
- - - "<"
130
- - !ruby/object:Gem::Version
131
- version: 1.4.0
132
126
  - !ruby/object:Gem::Dependency
133
127
  name: dragonfly_svg
134
128
  requirement: !ruby/object:Gem::Requirement
@@ -282,7 +276,7 @@ dependencies:
282
276
  version: '1.8'
283
277
  - - "<"
284
278
  - !ruby/object:Gem::Version
285
- version: '3.0'
279
+ version: 2.4.2
286
280
  type: :runtime
287
281
  prerelease: false
288
282
  version_requirements: !ruby/object:Gem::Requirement
@@ -292,7 +286,7 @@ dependencies:
292
286
  version: '1.8'
293
287
  - - "<"
294
288
  - !ruby/object:Gem::Version
295
- version: '3.0'
289
+ version: 2.4.2
296
290
  - !ruby/object:Gem::Dependency
297
291
  name: request_store
298
292
  requirement: !ruby/object:Gem::Requirement
@@ -519,14 +513,14 @@ dependencies:
519
513
  requirements:
520
514
  - - "~>"
521
515
  - !ruby/object:Gem::Version
522
- version: 0.17.1
516
+ version: '0.20'
523
517
  type: :development
524
518
  prerelease: false
525
519
  version_requirements: !ruby/object:Gem::Requirement
526
520
  requirements:
527
521
  - - "~>"
528
522
  - !ruby/object:Gem::Version
529
- version: 0.17.1
523
+ version: '0.20'
530
524
  - !ruby/object:Gem::Dependency
531
525
  name: webdrivers
532
526
  requirement: !ruby/object:Gem::Requirement
@@ -1092,6 +1086,7 @@ files:
1092
1086
  - lib/alchemy/configuration_methods.rb
1093
1087
  - lib/alchemy/controller_actions.rb
1094
1088
  - lib/alchemy/deprecation.rb
1089
+ - lib/alchemy/element_definition.rb
1095
1090
  - lib/alchemy/elements_finder.rb
1096
1091
  - lib/alchemy/engine.rb
1097
1092
  - lib/alchemy/errors.rb
@@ -1279,14 +1274,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
1279
1274
  version: 2.3.0
1280
1275
  required_rubygems_version: !ruby/object:Gem::Requirement
1281
1276
  requirements:
1282
- - - ">="
1277
+ - - ">"
1283
1278
  - !ruby/object:Gem::Version
1284
- version: '0'
1279
+ version: 1.3.1
1285
1280
  requirements:
1286
1281
  - ImageMagick (libmagick), v6.6 or greater.
1287
- rubygems_version: 3.1.6
1288
- signing_key:
1282
+ rubygems_version: 3.1.4
1283
+ signing_key:
1289
1284
  specification_version: 4
1290
1285
  summary: A powerful, userfriendly and flexible CMS for Rails
1291
1286
  test_files: []
1292
- ...