alchemy_cms 3.5.0 → 3.6.0

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.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +82 -26
  3. data/.travis.yml +1 -1
  4. data/CHANGELOG.md +23 -1
  5. data/README.md +14 -5
  6. data/Rakefile +0 -1
  7. data/alchemy_cms.gemspec +2 -5
  8. data/app/assets/images/alchemy/alchemy-logo.png +0 -0
  9. data/app/assets/javascripts/alchemy/admin.js +1 -1
  10. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +4 -8
  11. data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +2 -2
  12. data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +18 -27
  13. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +1 -1
  14. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +3 -8
  15. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +1 -1
  16. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -1
  17. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +22 -46
  18. data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +1 -1
  19. data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +2 -2
  20. data/app/assets/javascripts/alchemy/alchemy.spinner.js +32 -0
  21. data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee +1 -1
  22. data/app/assets/javascripts/alchemy/templates/index.js +1 -0
  23. data/app/assets/javascripts/alchemy/templates/spinner.hbs +7 -0
  24. data/app/assets/stylesheets/alchemy/_extends.scss +1 -0
  25. data/app/assets/stylesheets/alchemy/admin.scss +1 -0
  26. data/app/assets/stylesheets/alchemy/base.scss +1 -7
  27. data/app/assets/stylesheets/alchemy/buttons.scss +1 -5
  28. data/app/assets/stylesheets/alchemy/dialogs.scss +0 -4
  29. data/app/assets/stylesheets/alchemy/elements.scss +2 -6
  30. data/app/assets/stylesheets/alchemy/frame.scss +0 -5
  31. data/app/assets/stylesheets/alchemy/image_library.scss +0 -13
  32. data/app/assets/stylesheets/alchemy/sitemap.scss +5 -34
  33. data/app/assets/stylesheets/alchemy/spinner.scss +52 -0
  34. data/app/controllers/alchemy/admin/attachments_controller.rb +12 -11
  35. data/app/controllers/alchemy/admin/base_controller.rb +3 -7
  36. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +2 -1
  37. data/app/controllers/alchemy/admin/languages_controller.rb +3 -8
  38. data/app/controllers/alchemy/admin/pictures_controller.rb +11 -7
  39. data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
  40. data/app/controllers/alchemy/attachments_controller.rb +2 -0
  41. data/app/controllers/alchemy/base_controller.rb +4 -5
  42. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +1 -1
  43. data/app/helpers/alchemy/admin/base_helper.rb +17 -8
  44. data/app/helpers/alchemy/admin/tags_helper.rb +31 -18
  45. data/app/helpers/alchemy/base_helper.rb +1 -1
  46. data/app/helpers/alchemy/pages_helper.rb +4 -7
  47. data/app/models/alchemy/attachment.rb +4 -0
  48. data/app/models/alchemy/cell.rb +1 -1
  49. data/app/models/alchemy/element.rb +6 -12
  50. data/app/models/alchemy/element/definitions.rb +2 -2
  51. data/app/models/alchemy/element/element_contents.rb +1 -1
  52. data/app/models/alchemy/essence_picture_view.rb +14 -2
  53. data/app/models/alchemy/language.rb +4 -4
  54. data/app/models/alchemy/page.rb +25 -28
  55. data/app/models/alchemy/page/page_elements.rb +1 -1
  56. data/app/models/alchemy/page/page_natures.rb +1 -1
  57. data/app/models/alchemy/picture.rb +5 -1
  58. data/app/models/alchemy/site.rb +27 -12
  59. data/app/views/alchemy/admin/attachments/_tag_list.html.erb +14 -13
  60. data/app/views/alchemy/admin/dashboard/info.html.erb +1 -1
  61. data/app/views/alchemy/admin/layoutpages/edit.html.erb +1 -1
  62. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +1 -1
  63. data/app/views/alchemy/admin/pages/_form.html.erb +1 -1
  64. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
  65. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  66. data/app/views/alchemy/admin/pages/_sitemap.html.erb +2 -2
  67. data/app/views/alchemy/admin/pages/configure_external.html.erb +1 -1
  68. data/app/views/alchemy/admin/pages/index.html.erb +5 -7
  69. data/app/views/alchemy/admin/pages/sort.html.erb +19 -0
  70. data/app/views/alchemy/admin/pages/update.js.erb +1 -1
  71. data/app/views/alchemy/admin/pictures/_archive.html.erb +19 -19
  72. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +3 -4
  73. data/app/views/alchemy/admin/resources/_tag_list.html.erb +3 -4
  74. data/app/views/alchemy/admin/resources/edit.html.erb +1 -1
  75. data/app/views/alchemy/admin/resources/new.html.erb +1 -1
  76. data/app/views/alchemy/pages/_meta_data.html.erb +1 -1
  77. data/app/views/alchemy/pages/show.rss.builder +0 -2
  78. data/app/views/alchemy/welcome.html.erb +1 -1
  79. data/app/views/layouts/alchemy/admin.html.erb +1 -1
  80. data/config/locales/alchemy.de.yml +4 -4
  81. data/config/locales/alchemy.en.yml +4 -4
  82. data/config/locales/alchemy.es.yml +3 -3
  83. data/config/locales/alchemy.fr.yml +4 -4
  84. data/config/locales/alchemy.it.yml +3 -3
  85. data/config/locales/alchemy.nl.yml +4 -4
  86. data/config/locales/alchemy.ru.yml +3 -3
  87. data/lib/alchemy/auth_accessors.rb +6 -6
  88. data/lib/alchemy/cache_digests/template_tracker.rb +5 -5
  89. data/lib/alchemy/controller_actions.rb +1 -6
  90. data/lib/alchemy/engine.rb +0 -53
  91. data/lib/alchemy/errors.rb +12 -3
  92. data/lib/alchemy/i18n.rb +1 -1
  93. data/lib/alchemy/logger.rb +1 -1
  94. data/lib/alchemy/page_layout.rb +5 -5
  95. data/lib/alchemy/seeder.rb +16 -49
  96. data/lib/alchemy/tasks/helpers.rb +1 -1
  97. data/lib/alchemy/test_support/config_stubbing.rb +28 -0
  98. data/lib/alchemy/test_support/essence_shared_examples.rb +6 -6
  99. data/lib/alchemy/test_support/factories/language_factory.rb +1 -1
  100. data/lib/alchemy/test_support/factories/page_factory.rb +7 -0
  101. data/lib/alchemy/test_support/factories/site_factory.rb +6 -0
  102. data/lib/alchemy/test_support/shared_contexts.rb +14 -0
  103. data/lib/alchemy/test_support/shared_uploader_examples.rb +10 -0
  104. data/lib/alchemy/touching.rb +1 -1
  105. data/lib/alchemy/version.rb +1 -1
  106. data/lib/alchemy_cms.rb +56 -1
  107. data/lib/{alchemy/kaminari → kaminari}/scoped_pagination_url_helper.rb +0 -0
  108. data/lib/rails/generators/alchemy/base.rb +1 -1
  109. data/lib/rails/generators/alchemy/elements/elements_generator.rb +2 -1
  110. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +2 -1
  111. data/lib/rails/generators/alchemy/site_layouts/site_layouts_generator.rb +2 -1
  112. data/lib/tasks/alchemy/tidy.rake +91 -89
  113. data/lib/tasks/alchemy/upgrade.rake +15 -15
  114. metadata +29 -14
  115. data/app/assets/javascripts/alchemy/alchemy.spinner.js.coffee +0 -49
  116. data/app/views/alchemy/admin/pages/sort.js.erb +0 -4
  117. data/vendor/assets/javascripts/handlebars.js +0 -4608
  118. data/vendor/assets/javascripts/spin.min.js +0 -1
@@ -1,14 +1,13 @@
1
- <% p = params.dup %>
2
1
  <% if Alchemy::Picture.tag_counts.any? %>
3
2
  <h2><%= Alchemy.t("Filter by tag") %></h2>
4
3
  <%= js_filter_field '.tag-list li' %>
5
4
  <ul>
6
- <%= render_tag_list('Alchemy::Picture', p) %>
5
+ <%= render_tag_list('Alchemy::Picture') %>
7
6
  </ul>
8
- <% if p[:tagged_with].present? %>
7
+ <% if params[:tagged_with].present? %>
9
8
  <%= link_to(
10
9
  render_icon('delete-small') + Alchemy.t('Remove tag filter'),
11
- url_for(p.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
10
+ url_for(tag_list_params.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
12
11
  remote: request.xhr?,
13
12
  class: 'button small with_icon please_wait'
14
13
  ) %>
@@ -1,14 +1,13 @@
1
1
  <div class="<%= params[:tagged_with].present? ? 'tag-list filtered' : 'tag-list' %>">
2
- <% p = params.dup %>
3
2
  <h2><%= Alchemy.t("Filter by tag") %></h2>
4
3
  <%= js_filter_field '.tag-list li' %>
5
4
  <ul>
6
- <%= render_tag_list(resource_model.name, p) %>
5
+ <%= render_tag_list(resource_model.name) %>
7
6
  </ul>
8
- <% if p[:tagged_with].present? %>
7
+ <% if params[:tagged_with].present? %>
9
8
  <%= link_to(
10
9
  render_icon('delete-small') + Alchemy.t('Remove tag filter'),
11
- url_for(p.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
10
+ url_for(tag_list_params.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
12
11
  remote: request.xhr?,
13
12
  class: 'button small with_icon please_wait'
14
13
  ) %>
@@ -1 +1 @@
1
- <%= render :partial => 'form' %>
1
+ <%= render 'form' %>
@@ -1 +1 @@
1
- <%= render :partial => 'form' %>
1
+ <%= render 'form' %>
@@ -1,5 +1,5 @@
1
1
  <% if @page %>
2
- <meta charset="utf8">
2
+ <meta charset="utf-8">
3
3
  <title><%= page_title prefix: local_assigns.fetch(:title_prefix, nil), separator: local_assigns.fetch(:title_separator, nil) %></title>
4
4
  <%= tag(:meta, name: 'created', content: @page.updated_at) %>
5
5
  <%= tag(:meta, name: 'robots', content: meta_robots) %>
@@ -1,8 +1,6 @@
1
1
  xml.instruct! :xml, version: "1.0"
2
2
  xml.rss version: "2.0" do
3
-
4
3
  xml.channel do
5
-
6
4
  xml.title @page.title
7
5
  xml.description @page.meta_description
8
6
  xml.link show_alchemy_page_url(@page)
@@ -12,7 +12,7 @@
12
12
  <body>
13
13
  <div class="container">
14
14
  <%= image_tag 'alchemy/alchemy-logo.svg' %>
15
- <h3>You have succesfully installed AlchemyCMS!</h3>
15
+ <h3>You have successfully installed AlchemyCMS!</h3>
16
16
  <p>
17
17
  Thank you for using Alchemy. We hope you enjoy using it as much as we do.
18
18
  </p>
@@ -90,7 +90,7 @@
90
90
  </div>
91
91
  </div>
92
92
  <% end %>
93
- <%= render :partial => 'alchemy/admin/partials/flash_notices' %>
93
+ <%= render 'alchemy/admin/partials/flash_notices' %>
94
94
  <div id="main_content">
95
95
  <%= yield %>
96
96
  </div>
@@ -99,7 +99,7 @@ de:
99
99
  message: 'Nachricht'
100
100
  send: 'absenden'
101
101
  mandatory_fields: '*Pflichtfelder. Bitte füllen Sie diese Felder aus.'
102
- # The flash message shown after succesfully sending the message.
102
+ # The flash message shown after successfully sending the message.
103
103
  messages:
104
104
  success: 'Ihre Nachricht wurde erfolgreich übermittelt.'
105
105
 
@@ -589,9 +589,9 @@ de:
589
589
  "Edit": "Bearbeiten"
590
590
  "Delete": "Löschen"
591
591
  "Show error details": Fehlerdetails anzeigen
592
- "Succesfully created": "Erfolgreich erstellt"
593
- "Succesfully updated": "Erfolgreich aktualisiert"
594
- "Succesfully removed": "Erfolgreich gelöscht"
592
+ "Successfully created": "Erfolgreich erstellt"
593
+ "Successfully updated": "Erfolgreich aktualisiert"
594
+ "Successfully removed": "Erfolgreich gelöscht"
595
595
  "Nothing found": "Keine Einträge gefunden."
596
596
  complete: 'Abgeschlossen'
597
597
  "Update available": 'Es ist ein Update verfügbar'
@@ -554,7 +554,7 @@ en:
554
554
  uploader:
555
555
  alchemy/attachment:
556
556
  button_label: Upload file(s)
557
- upload_success: "File %{name} succesfully uploaded"
557
+ upload_success: "File %{name} successfully uploaded"
558
558
  upload_failure: "File %{name} upload error: %{error}"
559
559
  alchemy/picture:
560
560
  button_label: Upload image(s)
@@ -582,9 +582,9 @@ en:
582
582
  "Create": "Create"
583
583
  "Edit": "Edit"
584
584
  "Delete": "Delete"
585
- "Succesfully created": "Succesfully created"
586
- "Succesfully updated": "Succesfully updated"
587
- "Succesfully removed": "Succesfully removed"
585
+ "Successfully created": "Successfully created"
586
+ "Successfully updated": "Successfully updated"
587
+ "Successfully removed": "Successfully removed"
588
588
  "Nothing found": "Nothing found."
589
589
  complete: 'Abgeschlossen'
590
590
  "Update available": 'Update available'
@@ -583,9 +583,9 @@ es:
583
583
  "Create": "Crear"
584
584
  "Edit": "Editar"
585
585
  "Delete": "Eliminar"
586
- "Succesfully created": "Creado correctamente"
587
- "Succesfully updated": "Actualizado correctamente"
588
- "Succesfully removed": "Eliminado correctamente"
586
+ "Successfully created": "Creado correctamente"
587
+ "Successfully updated": "Actualizado correctamente"
588
+ "Successfully removed": "Eliminado correctamente"
589
589
  "Nothing found": "No se encontró nada."
590
590
  complete: 'Completado'
591
591
  "Update available": 'Actualización disponible'
@@ -114,7 +114,7 @@ fr:
114
114
  message: 'Message'
115
115
  send: 'envoyer'
116
116
  mandatory_fields: "*Obligatoire. S'il vous plaît remplir ces champs."
117
- # The flash message shown after succesfully sending the message.
117
+ # The flash message shown after successfully sending the message.
118
118
  messages:
119
119
  success: 'Votre message a été envoyé avec succès.'
120
120
 
@@ -602,9 +602,9 @@ fr:
602
602
  "Create": "ajouter"
603
603
  "Edit": "Modifier"
604
604
  "Delete": "supprimer"
605
- "Succesfully created": "créé avec succès"
606
- "Succesfully updated": "correctement mis à jour"
607
- "Succesfully removed": "supprimé avec succès"
605
+ "Successfully created": "créé avec succès"
606
+ "Successfully updated": "correctement mis à jour"
607
+ "Successfully removed": "supprimé avec succès"
608
608
  "Nothing found": "Aucun article trouvé."
609
609
  "Now drop the files": "Lacher les fichiers maintenant"
610
610
  "Queued x files": "x Fichiers dans la file d'attente."
@@ -582,9 +582,9 @@ it:
582
582
  "Create": "Crea"
583
583
  "Edit": "Modifica"
584
584
  "Delete": "Elimina"
585
- "Succesfully created": "Creato con successo"
586
- "Succesfully updated": "Aggiornato con successo"
587
- "Succesfully removed": "Rimosso con successo"
585
+ "Successfully created": "Creato con successo"
586
+ "Successfully updated": "Aggiornato con successo"
587
+ "Successfully removed": "Rimosso con successo"
588
588
  "Nothing found": "Non è stato trovato nulla."
589
589
  complete: 'Completato'
590
590
  "Update available": 'Aggiornamento disponibile'
@@ -99,7 +99,7 @@ nl:
99
99
  message: 'Bericht'
100
100
  send: 'Verzenden'
101
101
  mandatory_fields: '*Verplichte velden.'
102
- # The flash message shown after succesfully sending the message.
102
+ # The flash message shown after successfully sending the message.
103
103
  messages:
104
104
  success: 'Het bericht is verzonden.'
105
105
 
@@ -576,9 +576,9 @@ nl:
576
576
  "Create": "Aanmaken"
577
577
  "Edit": "Aanpassen"
578
578
  "Delete": "Verwijderen"
579
- "Succesfully created": "Aangemaakt"
580
- "Succesfully updated": "Aangepast"
581
- "Succesfully removed": "Verwijderd"
579
+ "Successfully created": "Aangemaakt"
580
+ "Successfully updated": "Aangepast"
581
+ "Successfully removed": "Verwijderd"
582
582
  "Nothing found": "Niets gevonden"
583
583
  complete: 'Compleet'
584
584
  "Update available": "Er is een update verkrijgbaar"
@@ -578,9 +578,9 @@ ru:
578
578
  "Create": "Создать"
579
579
  "Edit": "Редактировать"
580
580
  "Delete": "Удалить"
581
- "Succesfully created": "Успешно создано"
582
- "Succesfully updated": "Успешно обновлено"
583
- "Succesfully removed": "Успешно удалено"
581
+ "Successfully created": "Успешно создано"
582
+ "Successfully updated": "Успешно обновлено"
583
+ "Successfully removed": "Успешно удалено"
584
584
  "Nothing found": "Ничег не найдено."
585
585
  complete: 'Завершить'
586
586
  "Update available": 'Доступно обновление'
@@ -71,15 +71,15 @@ module Alchemy
71
71
  end
72
72
  rescue NameError => e
73
73
  if e.message =~ /#{Regexp.escape(@@user_class_name)}/
74
- abort <<-MSG
74
+ abort <<-MSG.strip_heredoc
75
75
 
76
- AlchemyCMS cannot find any user class!
76
+ AlchemyCMS cannot find any user class!
77
77
 
78
- Please add a user class and tell Alchemy about it or, if you don't want
79
- to create your own class, add the `alchemy-devise` gem to your Gemfile.
78
+ Please add a user class and tell Alchemy about it or, if you don't want
79
+ to create your own class, add the `alchemy-devise` gem to your Gemfile.
80
80
 
81
- gem 'alchemy-devise', '~> 2.1.0'
82
- MSG
81
+ gem 'alchemy-devise', '~> 2.1.0'
82
+ MSG
83
83
  else
84
84
  raise e
85
85
  end
@@ -12,20 +12,20 @@ module Alchemy
12
12
  def dependencies
13
13
  case @name.to_s
14
14
  when /^alchemy\/pages\/show/
15
- return PageLayout.all.collect { |p| "alchemy/page_layouts/_#{p['name']}" }
15
+ PageLayout.all.collect { |p| "alchemy/page_layouts/_#{p['name']}" }
16
16
  when /^alchemy\/page_layouts\/_(.+)/
17
17
  page_layout = page_layout($1)
18
- return element_templates(page_layout) +
19
- page_layout.fetch('cells', []).map { |name| "alchemy/cells/_#{name}" }
18
+ element_templates(page_layout) +
19
+ page_layout.fetch('cells', []).map { |name| "alchemy/cells/_#{name}" }
20
20
  when /^alchemy\/cells\/_(.+)/
21
- return element_templates cell_definition($1)
21
+ element_templates cell_definition($1)
22
22
  when /alchemy\/elements\/_(.+)_view/
23
23
  essences = essence_types($1)
24
24
  element = element_definition($1)
25
25
  if element && element['picture_gallery']
26
26
  essences += ['EssencePicture']
27
27
  end
28
- return essences.map { |name| "alchemy/essences/_#{name.underscore}_view" }.uniq
28
+ essences.map { |name| "alchemy/essences/_#{name.underscore}_view" }.uniq
29
29
  else
30
30
  ActionView::DependencyTracker::ERBTracker.call(@name, @template)
31
31
  end
@@ -65,7 +65,7 @@ module Alchemy
65
65
  # find the best language and remember it for later
66
66
  @language = load_alchemy_language_from_params ||
67
67
  load_alchemy_language_from_session ||
68
- load_default_alchemy_language
68
+ Language.default
69
69
  end
70
70
  store_current_alchemy_language(@language)
71
71
  end
@@ -89,11 +89,6 @@ module Alchemy
89
89
  Language.find_by_code(id_or_code)
90
90
  end
91
91
 
92
- # Load the default language from current site.
93
- def load_default_alchemy_language
94
- Language.default || raise(DefaultLanguageNotFoundError)
95
- end
96
-
97
92
  # Stores language's id in the session.
98
93
  #
99
94
  # Also stores language in +Language.current+
@@ -1,56 +1,3 @@
1
- # Require globally used external libraries
2
- require 'acts_as_list'
3
- require 'acts-as-taggable-on'
4
- require 'action_view/dependency_tracker'
5
- require 'active_model_serializers'
6
- require 'awesome_nested_set'
7
- require 'bourbon'
8
- require 'cancan'
9
- require 'dragonfly'
10
- require 'jquery-rails'
11
- require 'jquery-ui-rails'
12
- require 'kaminari'
13
- require 'non-stupid-digest-assets'
14
- require 'ransack'
15
- require 'request_store'
16
- require 'responders'
17
- require 'simple_form'
18
- require 'select2-rails'
19
- require 'turbolinks'
20
- require 'userstamp'
21
-
22
- # Require globally used Alchemy mixins
23
- require_relative './ability_helper'
24
- require_relative './admin/locale'
25
- require_relative './auth_accessors'
26
- require_relative './cache_digests/template_tracker'
27
- require_relative './config'
28
- require_relative './configuration_methods'
29
- require_relative './controller_actions'
30
- require_relative './errors'
31
- require_relative './essence'
32
- require_relative './filetypes'
33
- require_relative './forms/builder'
34
- require_relative './hints'
35
- require_relative './i18n'
36
- require_relative './logger'
37
- require_relative './modules'
38
- require_relative './name_conversions'
39
- require_relative './on_page_layout'
40
- require_relative './on_page_layout/callbacks_runner'
41
- require_relative './page_layout'
42
- require_relative './paths'
43
- require_relative './permissions'
44
- require_relative './picture_attributes'
45
- require_relative './sass_support'
46
- require_relative './ssl_protection'
47
- require_relative './resource'
48
- require_relative './tinymce'
49
- require_relative './touching'
50
-
51
- # Require hacks
52
- require_relative './kaminari/scoped_pagination_url_helper'
53
-
54
1
  module Alchemy
55
2
  class Engine < Rails::Engine
56
3
  isolate_namespace Alchemy
@@ -10,9 +10,18 @@ module Alchemy
10
10
  end
11
11
 
12
12
  class DefaultLanguageNotFoundError < StandardError
13
- # Raised if no default language can be found.
13
+ # Raised if no default language configuration can be found.
14
14
  def message
15
- "No default language found! Please run the `bin/rake db:seed` task."
15
+ "No default language configuration found!" \
16
+ " Please ensure that you have a 'default_language' defined in Alchemy configuration file."
17
+ end
18
+ end
19
+
20
+ class DefaultSiteNotFoundError < StandardError
21
+ # Raised if no default site configuration can be found.
22
+ def message
23
+ "No default site configuration found!" \
24
+ " Please ensure that you have a 'default_site' defined in Alchemy configuration file."
16
25
  end
17
26
  end
18
27
 
@@ -66,7 +75,7 @@ module Alchemy
66
75
  class TinymceError < StandardError; end
67
76
 
68
77
  class UpdateServiceUnavailable < StandardError
69
- # Raised it no succesful connection to GitHub was possible
78
+ # Raised if no successful connection to GitHub was possible
70
79
  def message
71
80
  "The update service is temporarily unavailable!"
72
81
  end
@@ -82,7 +82,7 @@ module Alchemy
82
82
  default_scope = ['alchemy']
83
83
  case options[:scope]
84
84
  when Array
85
- default_scope += options[:scope]
85
+ default_scope + options[:scope]
86
86
  when String
87
87
  default_scope << options[:scope]
88
88
  when Symbol
@@ -7,7 +7,7 @@ module Alchemy
7
7
  end
8
8
 
9
9
  def log_warning(message)
10
- Alchemy::Logger.warn(message, caller.first)
10
+ Alchemy::Logger.warn(message, caller(0..0))
11
11
  end
12
12
  end
13
13
  end
@@ -35,7 +35,7 @@ module Alchemy
35
35
  #
36
36
  def get(name)
37
37
  return {} if name.blank?
38
- all.detect { |a| a['name'].casecmp(name) == 0 }
38
+ all.detect { |a| a['name'].casecmp(name).zero? }
39
39
  end
40
40
 
41
41
  def get_all_by_attributes(attributes)
@@ -44,7 +44,7 @@ module Alchemy
44
44
  if attributes.is_a? Hash
45
45
  layouts = []
46
46
  attributes.stringify_keys.each do |key, value|
47
- result = all.select { |l| l.key?(key) && l[key].to_s.casecmp(value.to_s) == 0 }
47
+ result = all.select { |l| l.key?(key) && l[key].to_s.casecmp(value.to_s).zero? }
48
48
  layouts += result unless result.empty?
49
49
  end
50
50
  layouts
@@ -56,7 +56,7 @@ module Alchemy
56
56
  # Returns page layouts ready for Rails' select form helper.
57
57
  #
58
58
  def layouts_for_select(language_id, only_layoutpages = false)
59
- @map_array = [[Alchemy.t('Please choose'), '']]
59
+ @map_array = []
60
60
  mapped_layouts_for_select(selectable_layouts(language_id, only_layoutpages))
61
61
  end
62
62
 
@@ -99,7 +99,7 @@ module Alchemy
99
99
  definition.fetch('elements', [])
100
100
  else
101
101
  Rails.logger.warn "\n+++ Warning: No layout definition for #{page_layout} found! in page_layouts.yml\n"
102
- return []
102
+ []
103
103
  end
104
104
  end
105
105
 
@@ -157,7 +157,7 @@ module Alchemy
157
157
  #
158
158
  def read_definitions_file
159
159
  if File.exist?(layouts_file_path)
160
- YAML.load(ERB.new(File.read(layouts_file_path)).result) || []
160
+ YAML.safe_load(ERB.new(File.read(layouts_file_path)).result, [Date], [], true) || []
161
161
  else
162
162
  raise LoadError, "Could not find page_layouts.yml file! Please run `rails generate alchemy:scaffold`"
163
163
  end
@@ -1,62 +1,33 @@
1
1
  require "alchemy/shell"
2
2
 
3
3
  module Alchemy
4
+ # This seeder builds Alchemy pages in your database.
5
+ #
6
+ # Create a +db/seeds/alchemy/pages.yml+ and +db/seeds/alchemy/users.yml+ files
7
+ # and put +Alchemy::Seeder.seed!+ into your +db/seeds.rb+ file.
8
+ #
9
+ # Then run +rake db:seed+
10
+ #
4
11
  class Seeder
5
12
  extend Alchemy::Shell
6
13
 
7
14
  class << self
8
- # This seed builds the necessary page structure for Alchemy in your database.
9
- #
10
- # Call this from your +db/seeds.rb+ file with the `rake db:seed task'.
15
+ # Put +Alchemy::Seeder.seed!+ into your +db/seeds.rb+ file and run +rake db:seed+.
11
16
  #
12
17
  def seed!
13
- create_default_site
14
- if create_root_page
15
- try_seed_pages
16
- elsif page_seeds_file.file?
17
- desc "Seeding Alchemy pages"
18
- log "There are already pages present in your database. " \
19
- "Please use `rake db:reset' if you want to rebuild your database.", :skip
20
- end
18
+ try_seed_pages
21
19
  seed_users if user_seeds_file.file?
22
20
  end
23
21
 
24
22
  protected
25
23
 
26
- def create_default_site
27
- desc "Creating default Alchemy site"
28
- if Alchemy::Site.count == 0
29
- site = Alchemy::Site.new(
30
- name: site_config['name'],
31
- host: site_config['host']
32
- )
33
- if Alchemy::Language.any?
34
- site.languages = Alchemy::Language.all
35
- end
36
- site.save!
37
- log "Created default Alchemy site with default language."
38
- else
39
- log "Default Alchemy site was already present.", :skip
40
- end
41
- end
42
-
43
- def create_root_page
44
- desc "Creating Alchemy root page"
45
- root = Alchemy::Page.find_or_initialize_by(name: 'Root')
46
- root.do_not_sweep = true
47
- if root.new_record?
48
- if root.save!
49
- log "Created Alchemy root page."
50
- return true
51
- end
52
- else
53
- log "Alchemy root page was already present.", :skip
54
- return false
55
- end
56
- end
57
-
58
24
  def try_seed_pages
59
- if page_seeds_file.file?
25
+ return unless page_seeds_file.file?
26
+ if Alchemy::Page.exists?
27
+ desc "Seeding Alchemy pages"
28
+ log "There are already pages present in your database. " \
29
+ "Please use `rake db:reset' if you want to rebuild your database.", :skip
30
+ else
60
31
  seed_pages if contentpages.present?
61
32
  seed_layoutpages if layoutpages.present?
62
33
  end
@@ -107,10 +78,6 @@ module Alchemy
107
78
 
108
79
  private
109
80
 
110
- def site_config
111
- @_site_config ||= Alchemy::Config.get(:default_site)
112
- end
113
-
114
81
  def page_seeds_file
115
82
  @_page_seeds_file ||= Rails.root.join('db', 'seeds', 'alchemy', 'pages.yml')
116
83
  end
@@ -120,7 +87,7 @@ module Alchemy
120
87
  end
121
88
 
122
89
  def contentpages
123
- page_yml.select { |p| !p['layoutpage'] }
90
+ page_yml.reject { |p| p['layoutpage'] }
124
91
  end
125
92
 
126
93
  def layoutpages