alchemy_cms 3.3.3 → 3.4.0.rc1

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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +42 -4
  4. data/README.md +7 -3
  5. data/alchemy_cms.gemspec +1 -0
  6. data/app/assets/javascripts/alchemy/{alchemy.js → admin.js} +1 -2
  7. data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +28 -25
  8. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +1 -0
  9. data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +7 -1
  10. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +1 -1
  11. data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +26 -0
  12. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +56 -1
  13. data/app/assets/stylesheets/alchemy/_variables.scss +1 -0
  14. data/app/assets/stylesheets/alchemy/admin.scss +2 -1
  15. data/app/assets/stylesheets/alchemy/archive.scss +7 -0
  16. data/app/assets/stylesheets/alchemy/base.scss +0 -42
  17. data/app/assets/stylesheets/alchemy/buttons.scss +2 -1
  18. data/app/assets/stylesheets/alchemy/form_fields.scss +9 -0
  19. data/app/assets/stylesheets/alchemy/forms.scss +36 -10
  20. data/app/assets/stylesheets/alchemy/frame.scss +12 -1
  21. data/app/assets/stylesheets/alchemy/icons.scss +1 -1
  22. data/app/assets/stylesheets/alchemy/jquery-ui.scss +0 -260
  23. data/app/assets/stylesheets/alchemy/jquery.datetimepicker.scss +507 -0
  24. data/app/assets/stylesheets/alchemy/lists.scss +62 -0
  25. data/app/assets/stylesheets/alchemy/selects.scss +9 -2
  26. data/app/assets/stylesheets/alchemy/sitemap.scss +28 -51
  27. data/app/assets/stylesheets/alchemy/toolbar.scss +0 -2
  28. data/app/controllers/alchemy/admin/attachments_controller.rb +4 -6
  29. data/app/controllers/alchemy/admin/base_controller.rb +2 -2
  30. data/app/controllers/alchemy/admin/dashboard_controller.rb +2 -2
  31. data/app/controllers/alchemy/admin/languages_controller.rb +5 -0
  32. data/app/controllers/alchemy/admin/pages_controller.rb +14 -5
  33. data/app/controllers/alchemy/admin/resources_controller.rb +17 -1
  34. data/app/controllers/alchemy/base_controller.rb +1 -0
  35. data/app/controllers/alchemy/messages_controller.rb +1 -1
  36. data/app/controllers/alchemy/pages_controller.rb +16 -26
  37. data/app/controllers/alchemy/pictures_controller.rb +23 -10
  38. data/app/controllers/concerns/alchemy/page_redirects.rb +7 -7
  39. data/app/helpers/alchemy/admin/base_helper.rb +22 -19
  40. data/app/helpers/alchemy/admin/essences_helper.rb +26 -11
  41. data/app/helpers/alchemy/admin/pages_helper.rb +2 -1
  42. data/app/helpers/alchemy/essences_helper.rb +0 -35
  43. data/app/helpers/alchemy/url_helper.rb +1 -1
  44. data/app/mailers/alchemy/base_mailer.rb +18 -0
  45. data/app/mailers/alchemy/{messages.rb → messages_mailer.rb} +1 -1
  46. data/app/models/alchemy/attachment.rb +9 -0
  47. data/app/models/alchemy/cell.rb +1 -1
  48. data/app/models/alchemy/essence_picture.rb +4 -1
  49. data/app/models/alchemy/essence_picture_view.rb +68 -0
  50. data/app/models/alchemy/language.rb +8 -10
  51. data/app/models/alchemy/language/code.rb +4 -1
  52. data/app/models/alchemy/page.rb +69 -26
  53. data/app/models/alchemy/page/page_natures.rb +22 -0
  54. data/app/models/alchemy/page/page_scopes.rb +20 -6
  55. data/app/models/alchemy/picture.rb +37 -4
  56. data/app/models/alchemy/site.rb +8 -0
  57. data/app/serializers/alchemy/page_tree_serializer.rb +1 -1
  58. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +9 -6
  59. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +11 -9
  60. data/app/views/alchemy/admin/attachments/_filter_bar.html.erb +32 -0
  61. data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +14 -2
  62. data/app/views/alchemy/admin/attachments/index.html.erb +10 -9
  63. data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +20 -9
  64. data/app/views/alchemy/admin/dashboard/_recent_pages.html.erb +11 -1
  65. data/app/views/alchemy/admin/languages/_form.html.erb +1 -0
  66. data/app/views/alchemy/admin/languages/index.html.erb +7 -8
  67. data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +1 -1
  68. data/app/views/alchemy/admin/layoutpages/index.html.erb +2 -2
  69. data/app/views/alchemy/admin/pages/_current_page.html.erb +4 -0
  70. data/app/views/alchemy/admin/pages/_form.html.erb +16 -1
  71. data/app/views/alchemy/admin/pages/_locked_page.html.erb +2 -12
  72. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  73. data/app/views/alchemy/admin/pages/_page_for_links.html.erb +2 -2
  74. data/app/views/alchemy/admin/pages/_page_status.html.erb +23 -11
  75. data/app/views/alchemy/admin/pages/edit.html.erb +2 -1
  76. data/app/views/alchemy/admin/pages/index.html.erb +2 -2
  77. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +3 -0
  78. data/app/views/alchemy/admin/partials/_site_select.html.erb +9 -0
  79. data/app/views/alchemy/admin/pictures/_picture.html.erb +6 -1
  80. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +2 -1
  81. data/app/views/alchemy/admin/pictures/show.html.erb +1 -1
  82. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +31 -0
  83. data/app/views/alchemy/admin/resources/_form.html.erb +6 -0
  84. data/app/views/alchemy/admin/resources/_tag_list.html.erb +16 -0
  85. data/app/views/alchemy/admin/resources/index.html.erb +13 -1
  86. data/app/views/alchemy/essences/_essence_file_view.html.erb +2 -5
  87. data/app/views/alchemy/essences/_essence_picture_view.html.erb +5 -3
  88. data/app/views/alchemy/{messages → messages_mailer}/contact_form_mail.de.text.erb +0 -0
  89. data/app/views/alchemy/{messages → messages_mailer}/contact_form_mail.en.text.erb +0 -0
  90. data/app/views/alchemy/{messages → messages_mailer}/contact_form_mail.es.text.erb +0 -0
  91. data/app/views/alchemy/{messages → messages_mailer}/new.html.erb +0 -0
  92. data/app/views/layouts/alchemy/admin.html.erb +3 -8
  93. data/config/alchemy/config.yml +4 -3
  94. data/config/initializers/assets.rb +2 -2
  95. data/config/initializers/dragonfly.rb +3 -0
  96. data/config/initializers/mime_types.rb +1 -0
  97. data/config/locales/alchemy.de.yml +10 -2
  98. data/config/locales/alchemy.en.yml +6 -2
  99. data/config/locales/alchemy.es.yml +6 -3
  100. data/config/locales/alchemy.fr.yml +6 -2
  101. data/config/locales/alchemy.it.yml +937 -0
  102. data/config/locales/alchemy.nl.yml +6 -2
  103. data/config/locales/alchemy.ru.yml +3 -2
  104. data/config/locales/simple_form.it.yml +25 -0
  105. data/db/migrate/20160108174834_add_timebased_publishing_columns_to_pages.rb +32 -0
  106. data/db/migrate/20160422195310_add_image_file_format_to_alchemy_pictures.rb +21 -0
  107. data/db/migrate/20160617224938_change_alchemy_pages_locked_to_locked_at.rb +22 -0
  108. data/lib/alchemy/ability_helper.rb +23 -0
  109. data/lib/alchemy/configuration_methods.rb +2 -2
  110. data/lib/alchemy/controller_actions.rb +4 -33
  111. data/lib/alchemy/engine.rb +1 -0
  112. data/lib/alchemy/resource.rb +30 -13
  113. data/lib/alchemy/resources_helper.rb +17 -0
  114. data/lib/alchemy/test_support/factories/page_factory.rb +7 -2
  115. data/lib/alchemy/upgrader.rb +1 -0
  116. data/lib/alchemy/upgrader/tasks/install_asset_manifests.rb +15 -0
  117. data/lib/alchemy/upgrader/three_point_four.rb +16 -0
  118. data/lib/alchemy/version.rb +1 -1
  119. data/lib/rails/generators/alchemy/elements/elements_generator.rb +8 -7
  120. data/lib/rails/generators/alchemy/essence/essence_generator.rb +2 -6
  121. data/lib/rails/generators/alchemy/install/files/all.css +11 -0
  122. data/lib/rails/generators/alchemy/install/files/all.js +11 -0
  123. data/lib/rails/generators/alchemy/install/files/{alchemy.elements.css.scss → article.scss} +0 -0
  124. data/lib/rails/generators/alchemy/install/install_generator.rb +20 -19
  125. data/lib/rails/generators/alchemy/module/module_generator.rb +3 -5
  126. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +7 -6
  127. data/lib/rails/generators/alchemy/site_layouts/site_layouts_generator.rb +7 -6
  128. data/vendor/assets/javascripts/date-formatter.js +161 -0
  129. data/vendor/assets/javascripts/jquery_plugins/jquery.datetimepicker.full.min.js +2 -0
  130. data/vendor/assets/javascripts/tinymce/langs/it.js +219 -0
  131. metadata +48 -13
  132. data/app/assets/javascripts/alchemy/alchemy.custom.js +0 -1
  133. data/app/assets/stylesheets/alchemy/custom.scss +0 -1
@@ -0,0 +1,62 @@
1
+ ul.list {
2
+ margin: 0;
3
+ padding: 0;
4
+ list-style-type: none;
5
+
6
+ &#layoutpages {
7
+ margin-top: 16px;
8
+
9
+ li {
10
+ margin-left: 8px;
11
+ }
12
+ }
13
+
14
+ &#sitemap {
15
+ padding: 0 0 104px 0;
16
+ }
17
+
18
+ li {
19
+ list-style-type: none;
20
+ display: block;
21
+ overflow: hidden;
22
+ margin-bottom: 0;
23
+
24
+ &.legend, &.list-header {
25
+ background-color: transparent;
26
+ font-weight: bold;
27
+ padding: $default-padding;
28
+
29
+ .list-secondary {
30
+ color: $text-color;
31
+ }
32
+ }
33
+
34
+ &.even {
35
+ background-color: #fff;
36
+ }
37
+
38
+ &.odd {
39
+ background-color: #eaf3f9;
40
+ }
41
+ }
42
+
43
+ .list-primary,
44
+ .list-secondary {
45
+ display: inline-block;
46
+ overflow: hidden;
47
+ text-overflow: ellipsis;
48
+ vertical-align: middle;
49
+ }
50
+
51
+ .list-primary {
52
+ float: left;
53
+ max-width: 65%;
54
+ }
55
+
56
+ .list-secondary, .right {
57
+ float: right;
58
+ text-align: left;
59
+ width: 30%;
60
+ color: $dark-gray;
61
+ }
62
+ }
@@ -214,9 +214,16 @@ select {
214
214
  margin: 0 3*$default-margin;
215
215
  @include inline-block(top);
216
216
 
217
- label {
217
+ label, form {
218
218
  @include inline-block;
219
- margin-right: 2*$default-margin;
219
+ }
220
+
221
+ select { margin: 0; }
222
+
223
+ label {
224
+ margin-right: $default-margin;
225
+
226
+ &:after { content: ':'; }
220
227
  }
221
228
  }
222
229
 
@@ -33,7 +33,7 @@
33
33
  background-color: #fff;
34
34
  color: black;
35
35
  display: block;
36
- padding-left: 4px;
36
+ padding-left: $default-padding;
37
37
  text-decoration: none;
38
38
  @include transition(background-color, 400ms);
39
39
 
@@ -49,23 +49,23 @@
49
49
  width: 16px;
50
50
  height: 16px;
51
51
  float: left;
52
- margin-right: 4px;
52
+ margin-right: $default-margin;
53
53
  background: image-url('alchemy/icons.png') -160px -168px;
54
- margin-top: 4px;
54
+ margin-top: $default-margin;
55
55
  }
56
56
  }
57
57
  }
58
58
 
59
59
  .redirect_url {
60
60
  position: absolute;
61
- top: 4px;
61
+ top: $default-padding;
62
62
  right: 199px;
63
63
  text-align: right;
64
64
  background-color: #fff0c4;
65
- line-height: 22px;
66
- padding-right: 4px;
65
+ line-height: $sitemap-line-height;
66
+ padding-right: $default-padding;
67
67
  font-size: 10px;
68
- padding-left: 4px;
68
+ padding-left: $default-padding;
69
69
  max-width: 45%;
70
70
  white-space: nowrap;
71
71
  overflow: hidden;
@@ -85,14 +85,10 @@
85
85
  height: 28px;
86
86
  }
87
87
 
88
- #layoutpages li {
89
- padding: 0;
90
- }
91
-
92
88
  .sitemap_page {
93
- height: 22px;
94
- padding-bottom: 4px;
95
- padding-top: 4px;
89
+ height: $sitemap-line-height;
90
+ padding-bottom: $default-padding;
91
+ padding-top: $default-padding;
96
92
  position: relative;
97
93
 
98
94
  &.highlight .sitemap_pagename_link {
@@ -117,7 +113,7 @@ div.sitemap_left_images {
117
113
  }
118
114
 
119
115
  .sitemap_right_tools {
120
- height: 22px;
116
+ height: $sitemap-line-height;
121
117
  background-color: $light-gray;
122
118
  padding-left: 8px;
123
119
  float: right;
@@ -188,43 +184,36 @@ ul#sitemap {
188
184
  }
189
185
 
190
186
  li {
191
- padding-left: 22px;
187
+ padding-left: $sitemap-line-height;
192
188
  padding-right: 0;
193
189
  }
194
190
  }
195
191
  }
196
192
 
197
- ul#sitemap li,
198
- ul#layoutpages li {
199
- list-style-type: none;
200
- display: block;
201
- margin-left: 0;
202
- margin-bottom: 0;
203
- line-height: 22px;
204
- }
205
-
206
193
  ul#sitemap li .sitemap_toolrow,
207
194
  ul.list li .sitemap_toolrow {
208
195
  margin: 0;
209
196
  overflow: auto;
210
- padding: 4px 0;
197
+ padding: $default-padding 0;
211
198
  }
212
199
 
213
200
  ul#sitemap .sitemap_sitename,
214
201
  ul.list .sitemap_sitename {
215
- height: 22px;
216
- line-height: 22px;
202
+ height: $sitemap-line-height;
203
+ line-height: $sitemap-line-height;
217
204
  overflow: hidden;
218
205
  }
219
206
 
220
- div.page_infos {
207
+ .page_infos {
221
208
  @extend .right-rounded-border;
222
209
  background-color: #fff;
223
210
  border-left: 1px solid $light-gray;
224
211
  float: right;
225
- height: 20px;
226
- padding: 1px;
227
- width: 68px;
212
+ height: $sitemap-line-height;
213
+
214
+ .page_status {
215
+ margin: $default-margin;
216
+ }
228
217
  }
229
218
 
230
219
  #sub_navigation .page_status_and_name .page_status {
@@ -268,14 +257,6 @@ div.page_infos {
268
257
  }
269
258
  }
270
259
 
271
- #sitemap .page_status {
272
- margin: 2px 2px 0 4px;
273
- }
274
-
275
- .alchemy-dialog .page_status {
276
- margin: 2px 4px 0 0;
277
- }
278
-
279
260
  #sitemap {
280
261
 
281
262
  &.sorting {
@@ -295,7 +276,7 @@ div.page_infos {
295
276
 
296
277
  .sitemap_sitestatus {
297
278
  float: right;
298
- margin-top: 4px;
279
+ margin-top: $default-margin;
299
280
  }
300
281
 
301
282
  a.folder_link {
@@ -313,18 +294,19 @@ a.folder_link {
313
294
  @extend %rounded-border;
314
295
  }
315
296
 
316
- h2#sitemap_heading {
297
+ #sitemap_heading {
317
298
  padding: 0;
318
299
 
319
- span.page_infos {
300
+ .page_infos {
320
301
  margin-right: 144px;
321
302
  width: 40px;
322
303
  text-align: center;
323
304
  float: right;
324
305
  line-height: 28px;
306
+ background: transparent;
325
307
  }
326
308
 
327
- span.page_name {
309
+ .page_name {
328
310
  line-height: 28px;
329
311
  margin-left: 24px;
330
312
  }
@@ -352,7 +334,7 @@ h2#sitemap_heading {
352
334
 
353
335
  .close_elements_from_page_selector {
354
336
  position: absolute;
355
- right: 4px;
337
+ right: $default-padding;
356
338
  top: 12px;
357
339
  font-size: 16px;
358
340
  width: 16px;
@@ -362,11 +344,6 @@ h2#sitemap_heading {
362
344
  }
363
345
  }
364
346
 
365
- .show_elements_to_link {
366
- @extend .icon;
367
- @extend .element_window;
368
- }
369
-
370
347
  .elements_from_page_selector {
371
348
  width: 100%;
372
349
  }
@@ -387,7 +364,7 @@ h2#sitemap_heading {
387
364
  .spinner {
388
365
  top: 17px !important;
389
366
  left: 50% !important;
390
- margin-left: 4px;
367
+ margin-left: $default-margin;
391
368
  }
392
369
 
393
370
  .alchemy_selectbox {
@@ -13,8 +13,6 @@
13
13
  margin: 0;
14
14
  @include inline-block;
15
15
  line-height: 5px;
16
-
17
- select { margin: 0 }
18
16
  }
19
17
  }
20
18
 
@@ -9,16 +9,14 @@ module Alchemy
9
9
  @query = Attachment.ransack(params[:q])
10
10
  @attachments = @query.result
11
11
 
12
- if params[:only].present?
13
- @attachments = @attachments.where("file_mime_type LIKE '%#{params[:only]}%'")
14
- end
15
- if params[:except].present?
16
- @attachments = @attachments.where("file_mime_type NOT LIKE '%#{params[:except]}%'")
17
- end
18
12
  if params[:tagged_with].present?
19
13
  @attachments = @attachments.tagged_with(params[:tagged_with])
20
14
  end
21
15
 
16
+ if params[:file_type].present?
17
+ @attachments = @attachments.with_file_type(params[:file_type])
18
+ end
19
+
22
20
  @attachments = @attachments
23
21
  .page(params[:page] || 1)
24
22
  .per(15)
@@ -165,10 +165,10 @@ module Alchemy
165
165
  end
166
166
 
167
167
  def load_locked_pages
168
- @locked_pages = Page.from_current_site.locked_by(current_alchemy_user)
168
+ @locked_pages = Page.locked_by(current_alchemy_user).order(:locked_at)
169
169
  end
170
170
 
171
- # Returns the current site.
171
+ # Returns the current site for admin controllers.
172
172
  #
173
173
  def current_alchemy_site
174
174
  @current_alchemy_site ||= begin
@@ -7,8 +7,8 @@ module Alchemy
7
7
  authorize_resource class: :alchemy_admin_dashboard
8
8
 
9
9
  def index
10
- @last_edited_pages = Page.from_current_site.all_last_edited_from(current_alchemy_user)
11
- @all_locked_pages = Page.from_current_site.locked
10
+ @last_edited_pages = Page.all_last_edited_from(current_alchemy_user)
11
+ @all_locked_pages = Page.locked
12
12
  if Alchemy.user_class.respond_to?(:logged_in)
13
13
  @online_users = Alchemy.user_class.logged_in.to_a - [current_alchemy_user]
14
14
  end
@@ -1,6 +1,11 @@
1
1
  module Alchemy
2
2
  module Admin
3
3
  class LanguagesController < ResourcesController
4
+ def index
5
+ @query = Language.on_current_site.ransack(params[:q])
6
+ @languages = @query.result.page(params[:page] || 1).per(per_page_value_for_screen_size)
7
+ end
8
+
4
9
  def new
5
10
  @language = Language.new
6
11
  @language.page_layout = configured_page_layout || @language.page_layout
@@ -24,10 +24,10 @@ module Alchemy
24
24
  def index
25
25
  authorize! :index, :alchemy_admin_pages
26
26
 
27
- @languages = Language.all
27
+ @languages = Language.on_current_site
28
28
  if !@page_root
29
29
  @language = Language.current
30
- @languages_with_page_tree = Language.with_root_page
30
+ @languages_with_page_tree = Language.on_current_site.with_root_page
31
31
  @page_layouts = PageLayout.layouts_for_select(@language.id)
32
32
  end
33
33
  end
@@ -75,12 +75,15 @@ module Alchemy
75
75
  end
76
76
 
77
77
  # Edit the content of the page and all its elements and contents.
78
+ #
79
+ # Locks the page to current user to prevent other users from editing it meanwhile.
80
+ #
78
81
  def edit
79
82
  # fetching page via before filter
80
83
  if page_is_locked?
81
84
  flash[:notice] = Alchemy.t('This page is locked', name: @page.locker_name)
82
85
  redirect_to admin_pages_path
83
- else
86
+ elsif page_needs_lock?
84
87
  @page.lock_to!(current_alchemy_user)
85
88
  end
86
89
  @layoutpage = @page.layoutpage?
@@ -171,9 +174,10 @@ module Alchemy
171
174
 
172
175
  def visit
173
176
  @page.unlock!
174
- redirect_to show_page_path(
177
+ redirect_to show_page_url(
175
178
  urlname: @page.urlname,
176
- locale: prefix_locale? ? @page.language_code : nil
179
+ locale: prefix_locale? ? @page.language_code : nil,
180
+ host: @page.site.host == "*" ? request.host : @page.site.host
177
181
  )
178
182
  end
179
183
 
@@ -369,6 +373,11 @@ module Alchemy
369
373
  @page.locked? && @page.locker.id != current_alchemy_user.id
370
374
  end
371
375
 
376
+ def page_needs_lock?
377
+ return true unless @page.locker
378
+ @page.locker.try!(:id) != current_alchemy_user.try!(:id)
379
+ end
380
+
372
381
  def paste_from_clipboard
373
382
  if params[:paste_from_clipboard]
374
383
  source = Page.find(params[:paste_from_clipboard])
@@ -7,7 +7,7 @@ module Alchemy
7
7
  class ResourcesController < Alchemy::Admin::BaseController
8
8
  include Alchemy::ResourcesHelper
9
9
 
10
- helper Alchemy::ResourcesHelper
10
+ helper Alchemy::ResourcesHelper, TagsHelper
11
11
  helper_method :resource_handler
12
12
 
13
13
  before_filter :load_resource,
@@ -20,9 +20,19 @@ module Alchemy
20
20
  def index
21
21
  @query = resource_handler.model.ransack(params[:q])
22
22
  items = @query.result
23
+
23
24
  if contains_relations?
24
25
  items = items.includes(*resource_relations_names)
25
26
  end
27
+
28
+ if params[:tagged_with].present?
29
+ items = items.tagged_with(params[:tagged_with])
30
+ end
31
+
32
+ if params[:filter].present?
33
+ items = items.public_send(sanitized_filter_params)
34
+ end
35
+
26
36
  respond_to do |format|
27
37
  format.html {
28
38
  items = items.page(params[:page] || 1).per(per_page_value_for_screen_size)
@@ -113,6 +123,12 @@ module Alchemy
113
123
  def resource_params
114
124
  params.require(resource_handler.namespaced_resource_name).permit!
115
125
  end
126
+
127
+ def sanitized_filter_params
128
+ resource_model.alchemy_resource_filters.detect do |filter|
129
+ filter == params[:filter]
130
+ end || :all
131
+ end
116
132
  end
117
133
  end
118
134
  end
@@ -3,6 +3,7 @@
3
3
  module Alchemy
4
4
  class BaseController < ApplicationController
5
5
  include Alchemy::ConfigurationMethods
6
+ include Alchemy::AbilityHelper
6
7
  include Alchemy::ControllerActions
7
8
  include Alchemy::Modules
8
9
  include Alchemy::SSLProtection