alchemy_cms 3.2.0 → 3.2.1

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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +7 -0
  3. data/.rubocop.yml +164 -799
  4. data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +1 -0
  5. data/app/controllers/alchemy/admin/contents_controller.rb +4 -3
  6. data/app/controllers/alchemy/admin/pages_controller.rb +7 -6
  7. data/app/helpers/alchemy/elements_helper.rb +13 -5
  8. data/app/models/alchemy/element.rb +1 -1
  9. data/app/models/alchemy/page/page_scopes.rb +8 -0
  10. data/app/views/alchemy/essences/_essence_select_editor.html.erb +2 -4
  11. data/lib/alchemy/controller_actions.rb +2 -0
  12. data/lib/alchemy/version.rb +1 -1
  13. data/spec/controllers/admin/contents_controller_spec.rb +9 -3
  14. data/spec/controllers/admin/pages_controller_spec.rb +26 -8
  15. data/spec/dummy/db/migrate/20130827094554_alchemy_two_point_six.rb +1 -0
  16. data/spec/dummy/db/migrate/20130828121054_remove_do_not_index_from_alchemy_essence_texts.rb +1 -0
  17. data/spec/dummy/db/migrate/20130828121120_remove_do_not_index_from_alchemy_essence_richtexts.rb +1 -0
  18. data/spec/dummy/db/migrate/20130918201742_add_published_at_to_alchemy_pages.rb +1 -0
  19. data/spec/dummy/spec/javascripts +1 -0
  20. data/spec/helpers/elements_helper_spec.rb +18 -2
  21. data/spec/spec_helper.rb +1 -1
  22. metadata +5 -5
  23. data/spec/dummy/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -380
  24. data/spec/dummy/db/migrate/20130828121054_remove_do_not_index_from_alchemy_essence_texts.rb +0 -5
  25. data/spec/dummy/db/migrate/20130828121120_remove_do_not_index_from_alchemy_essence_richtexts.rb +0 -5
  26. data/spec/dummy/db/migrate/20130918201742_add_published_at_to_alchemy_pages.rb +0 -5
  27. data/spec/support/rspec-activemodel-mocks_patch.rb +0 -8
@@ -17,6 +17,7 @@ $.extend Alchemy,
17
17
  if Alchemy.locale is "de"
18
18
  $.extend datepicker_options,
19
19
  dateFormat: "dd.mm.yy"
20
+ firstDay: 1
20
21
  dayNames: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
21
22
  dayNamesMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]
22
23
  monthNames: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
@@ -33,9 +33,10 @@ module Alchemy
33
33
  end
34
34
 
35
35
  def order
36
- params[:content_ids].each do |id|
37
- content = Content.find(id)
38
- content.move_to_bottom
36
+ Content.transaction do
37
+ params[:content_ids].each_with_index do |id, idx|
38
+ Content.where(id: id).update_all(position: idx + 1)
39
+ end
39
40
  end
40
41
  @notice = _t("Successfully saved content position")
41
42
  end
@@ -198,12 +198,13 @@ module Alchemy
198
198
  end
199
199
 
200
200
  def flush
201
- Language.current.pages.flushables.each do |page|
202
- page.publish!
203
- end
204
- respond_to do |format|
205
- format.js
206
- end
201
+ Language.current.pages.flushables.update_all(published_at: Time.current)
202
+ # We need to ensure, that also all layoutpages get the +published_at+ timestamp set,
203
+ # but not set to public true, because the cache_key for an element is +published_at+
204
+ # and we don't want the layout pages to be present in +Page.published+ scope.
205
+ # Not the greatest solution, but ¯\_(ツ)_/¯
206
+ Language.current.pages.flushable_layoutpages.update_all(published_at: Time.current)
207
+ respond_to { |format| format.js }
207
208
  end
208
209
 
209
210
  private
@@ -76,7 +76,8 @@ module Alchemy
76
76
  def render_elements(options = {})
77
77
  options = {
78
78
  from_page: @page,
79
- render_format: 'html'
79
+ render_format: 'html',
80
+ reverse: false
80
81
  }.update(options)
81
82
 
82
83
  pages = pages_holding_elements(options.delete(:from_page))
@@ -89,7 +90,11 @@ module Alchemy
89
90
  elements = collect_elements_from_pages(pages, options)
90
91
 
91
92
  if options[:sort_by].present?
92
- elements = sort_elements_by_content(elements, options.delete(:sort_by))
93
+ elements = sort_elements_by_content(
94
+ elements,
95
+ options.delete(:sort_by),
96
+ options[:reverse]
97
+ )
93
98
  end
94
99
 
95
100
  render_element_view_partials(elements, options)
@@ -224,14 +229,17 @@ module Alchemy
224
229
  #
225
230
  # @param [Array] elements - The elements you want to sort
226
231
  # @param [String] content_name - The name of the content you want to sort by
232
+ # @param [Boolean] reverse - Reverse the sorted elements order
227
233
  #
228
234
  # @return [Array]
229
235
  #
230
- def sort_elements_by_content(elements, content_name)
231
- elements.sort_by do |element|
236
+ def sort_elements_by_content(elements, content_name, reverse = false)
237
+ sorted_elements = elements.sort_by do |element|
232
238
  content = element.content_by_name(content_name)
233
239
  content ? content.ingredient.to_s : ''
234
240
  end
241
+
242
+ reverse ? sorted_elements.reverse : sorted_elements
235
243
  end
236
244
 
237
245
  private
@@ -276,7 +284,7 @@ module Alchemy
276
284
  page = fallback_options[:from]
277
285
  end
278
286
  return [] if page.blank?
279
- page.elements.named(fallback_options[:with].blank? ? fallback_options[:for] : fallback_options[:with])
287
+ page.elements.not_trashed.named(fallback_options[:with].presence || fallback_options[:for])
280
288
  end
281
289
 
282
290
  def render_element_view_partials(elements, options = {})
@@ -446,7 +446,7 @@ module Alchemy
446
446
  # If the page is the current preview it uses the element's updated_at value as cache key.
447
447
  #
448
448
  def cache_key
449
- if Page.current_preview == self.page
449
+ if Page.current_preview == page
450
450
  "alchemy/elements/#{id}-#{updated_at}"
451
451
  else
452
452
  "alchemy/elements/#{id}-#{page.published_at}"
@@ -76,6 +76,14 @@ module Alchemy
76
76
  #
77
77
  scope :flushables, -> { not_locked.published.contentpages }
78
78
 
79
+ # Returns all layoutpages that are not locked.
80
+ #
81
+ # Used for flushing all pages caches at once.
82
+ #
83
+ scope :flushable_layoutpages, -> {
84
+ not_locked.layoutpages.where.not(parent_id: Page.unscoped.root.id)
85
+ }
86
+
79
87
  # All searchable pages
80
88
  #
81
89
  scope :searchables, -> { not_restricted.published.contentpages }
@@ -9,11 +9,9 @@
9
9
  <%= warning(':select_values is nil', "<strong>No select values given.</strong><br>Please provide :<code>select_values</code> either as argument to <code>render_essence_editor</code> helper or as setting on the content definition in <code>elements.yml</code>.".html_safe) %>
10
10
  <% else %>
11
11
  <% if select_values.is_a?(Hash)
12
- options_tags = grouped_options_for_select select_values,
13
- content.ingredient, ''
12
+ options_tags = grouped_options_for_select(select_values, content.ingredient)
14
13
  else
15
- options_tags = options_for_select select_values,
16
- content.ingredient
14
+ options_tags = options_for_select(select_values, content.ingredient)
17
15
  end %>
18
16
 
19
17
  <%= select_tag content.form_field_name, options_tags, {
@@ -73,6 +73,8 @@ module Alchemy
73
73
  @current_ability ||= begin
74
74
  alchemy_permissions = Alchemy::Permissions.new(current_alchemy_user)
75
75
  Alchemy.registered_abilities.each do |klass|
76
+ # Ensure to avoid issues with Rails constant lookup.
77
+ klass = "::#{klass}".constantize
76
78
  alchemy_permissions.merge(klass.new(current_alchemy_user))
77
79
  end
78
80
  if (Object.const_get('::Ability') rescue false)
@@ -1,5 +1,5 @@
1
1
  module Alchemy
2
- VERSION = "3.2.0"
2
+ VERSION = "3.2.1"
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -60,11 +60,17 @@ module Alchemy
60
60
 
61
61
  describe "#order" do
62
62
  context "with content_ids in params" do
63
+ let(:element) do
64
+ create(:element, name: 'all_you_can_eat', create_contents_after_create: true)
65
+ end
66
+
67
+ let(:content_ids) { element.contents.pluck(:id).shuffle }
68
+
63
69
  it "should reorder the contents" do
64
- content_ids = element.contents.essence_texts.pluck(:id)
65
- alchemy_xhr :post, :order, {content_ids: content_ids.reverse}
70
+ alchemy_xhr :post, :order, {content_ids: content_ids}
71
+
66
72
  expect(response.status).to eq(200)
67
- expect(element.contents.essence_texts.pluck(:id)).to eq(content_ids.reverse)
73
+ expect(element.contents(true).pluck(:id)).to eq(content_ids)
68
74
  end
69
75
  end
70
76
  end
@@ -56,18 +56,36 @@ module Alchemy
56
56
  end
57
57
 
58
58
  describe "#flush" do
59
- let(:language) { mock_model('Language', code: 'en', pages: double(flushables: [page_1, page_2])) }
60
- let(:page_1) { build_stubbed(:page) }
61
- let(:page_2) { build_stubbed(:page) }
59
+ let(:content_page_1) { create(:public_page, name: "content page 1", published_at: Time.current - 5.days) }
60
+ let(:content_page_2) { create(:public_page, name: "content page 2", published_at: Time.current - 8.days) }
61
+ let(:layout_page_1) { create(:page, layoutpage: true, name: "layout_page 1", published_at: Time.current - 5.days) }
62
+ let(:layout_page_2) { create(:page, layoutpage: true, name: "layout_page 2", published_at: Time.current - 8.days) }
63
+ let(:content_pages) { [content_page_1, content_page_2] }
64
+ let(:layout_pages) { [layout_page_1, layout_page_2] }
62
65
 
63
66
  before do
64
- expect(Language).to receive(:current).at_least(:once).and_return(language)
67
+ content_pages
68
+ layout_pages
65
69
  end
66
70
 
67
- it "should remove the cache of all pages" do
68
- expect(page_1).to receive(:publish!)
69
- expect(page_2).to receive(:publish!)
70
- alchemy_xhr :post, :flush
71
+ it "should update the published_at field of content pages" do
72
+ travel_to(Time.current) do
73
+ alchemy_xhr :post, :flush
74
+ content_pages.map(&:reload) # Reloading because published_at was directly updated in the database.
75
+ content_pages.each do |page|
76
+ expect(page.published_at).to eq(Time.current)
77
+ end
78
+ end
79
+ end
80
+
81
+ it "should update the published_at field of layout pages" do
82
+ travel_to(Time.current) do
83
+ alchemy_xhr :post, :flush
84
+ layout_pages.map(&:reload) # Reloading because published_at was directly updated in the database.
85
+ layout_pages.each do |page|
86
+ expect(page.published_at).to eq(Time.current)
87
+ end
88
+ end
71
89
  end
72
90
  end
73
91
 
@@ -0,0 +1 @@
1
+ ../../../../db/migrate/20130827094554_alchemy_two_point_six.rb
@@ -0,0 +1 @@
1
+ ../../../../db/migrate/20130828121054_remove_do_not_index_from_alchemy_essence_texts.rb
@@ -0,0 +1 @@
1
+ ../../../../db/migrate/20130828121120_remove_do_not_index_from_alchemy_essence_richtexts.rb
@@ -0,0 +1 @@
1
+ ../../../../db/migrate/20130918201742_add_published_at_to_alchemy_pages.rb
@@ -0,0 +1 @@
1
+ ../../../spec/javascripts
@@ -136,12 +136,28 @@ module Alchemy
136
136
  it { is_expected.to be_blank }
137
137
  end
138
138
 
139
+ context 'with sort_by and reverse option given' do
140
+ let(:options) { {sort_by: true, reverse: true} }
141
+ let(:sorted_elements) { [another_element, element] }
142
+
143
+ before do
144
+ expect(elements).to receive(:sort_by).and_return(sorted_elements)
145
+ expect(sorted_elements).to receive(:reverse).and_return(elements)
146
+ expect(page).to receive(:find_elements).and_return(elements)
147
+ end
148
+
149
+ it "renders the sorted elements in reverse order" do
150
+ is_expected.not_to be_blank
151
+ end
152
+ end
153
+
139
154
  context 'with sort_by option given' do
140
155
  let(:options) { {sort_by: 'title'} }
141
156
  let(:sorted_elements) { [another_element, element] }
142
157
 
143
158
  before do
144
159
  expect(elements).to receive(:sort_by).and_return(sorted_elements)
160
+ expect(elements).not_to receive(:reverse)
145
161
  expect(page).to receive(:find_elements).and_return(elements)
146
162
  end
147
163
 
@@ -160,7 +176,7 @@ module Alchemy
160
176
 
161
177
  before do
162
178
  allow(Language).to receive(:current).and_return double(pages: double(find_by: another_page))
163
- allow(another_page).to receive(:elements).and_return double(named: elements)
179
+ allow(another_page).to receive(:elements).and_return double(not_trashed: double(named: elements))
164
180
  end
165
181
 
166
182
  it "renders the fallback element" do
@@ -172,7 +188,7 @@ module Alchemy
172
188
  let(:options) { {fallback: {for: 'higgs', with: 'news', from: another_page}} }
173
189
 
174
190
  before do
175
- allow(another_page).to receive(:elements).and_return double(named: elements)
191
+ allow(another_page).to receive(:elements).and_return double(not_trashed: double(named: elements))
176
192
  end
177
193
 
178
194
  it "renders the fallback element" do
@@ -26,7 +26,6 @@ require 'alchemy/test_support/factories'
26
26
 
27
27
  require_relative "support/hint_examples.rb"
28
28
  require_relative "support/transformation_examples.rb"
29
- require_relative "support/rspec-activemodel-mocks_patch.rb"
30
29
 
31
30
  ActionMailer::Base.delivery_method = :test
32
31
  ActionMailer::Base.perform_deliveries = true
@@ -50,6 +49,7 @@ RSpec.configure do |config|
50
49
  config.raise_errors_for_deprecations!
51
50
  config.run_all_when_everything_filtered = true
52
51
  config.filter_run :focus
52
+ config.include ActiveSupport::Testing::TimeHelpers
53
53
  config.include Alchemy::Engine.routes.url_helpers
54
54
  config.include Alchemy::TestSupport::ControllerRequests, type: :controller
55
55
  [:controller, :feature].each do |type|
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: 3.2.0
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-07-31 00:00:00.000000000 Z
15
+ date: 2016-03-31 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: actionpack-page_caching
@@ -1060,6 +1060,7 @@ files:
1060
1060
  - spec/dummy/public/422.html
1061
1061
  - spec/dummy/public/500.html
1062
1062
  - spec/dummy/public/favicon.ico
1063
+ - spec/dummy/spec/javascripts
1063
1064
  - spec/features/admin/dashboard_spec.rb
1064
1065
  - spec/features/admin/language_tree_feature_spec.rb
1065
1066
  - spec/features/admin/legacy_page_url_management_spec.rb
@@ -1151,7 +1152,6 @@ files:
1151
1152
  - spec/spec_helper.rb
1152
1153
  - spec/support/ci/install_phantomjs
1153
1154
  - spec/support/hint_examples.rb
1154
- - spec/support/rspec-activemodel-mocks_patch.rb
1155
1155
  - spec/support/test_tweaks.rb
1156
1156
  - spec/support/transformation_examples.rb
1157
1157
  - spec/tasks/helpers_spec.rb
@@ -1245,7 +1245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1245
1245
  requirements:
1246
1246
  - ImageMagick (libmagick), v6.6 or greater.
1247
1247
  rubyforge_project:
1248
- rubygems_version: 2.4.8
1248
+ rubygems_version: 2.6.2
1249
1249
  signing_key:
1250
1250
  specification_version: 4
1251
1251
  summary: A powerful, userfriendly and flexible CMS for Rails 4
@@ -1340,6 +1340,7 @@ test_files:
1340
1340
  - spec/dummy/public/422.html
1341
1341
  - spec/dummy/public/500.html
1342
1342
  - spec/dummy/public/favicon.ico
1343
+ - spec/dummy/spec/javascripts
1343
1344
  - spec/features/admin/dashboard_spec.rb
1344
1345
  - spec/features/admin/language_tree_feature_spec.rb
1345
1346
  - spec/features/admin/legacy_page_url_management_spec.rb
@@ -1431,7 +1432,6 @@ test_files:
1431
1432
  - spec/spec_helper.rb
1432
1433
  - spec/support/ci/install_phantomjs
1433
1434
  - spec/support/hint_examples.rb
1434
- - spec/support/rspec-activemodel-mocks_patch.rb
1435
1435
  - spec/support/test_tweaks.rb
1436
1436
  - spec/support/transformation_examples.rb
1437
1437
  - spec/tasks/helpers_spec.rb
@@ -1,380 +0,0 @@
1
- # This is a compressed migration for creating all Alchemy 2.6 tables at once.
2
- #
3
- # === Notice
4
- #
5
- # In order to upgrade from an old version of Alchemy, you have to run all migrations from
6
- # each version you missed up to the version you want to upgrade to, before running this migration.
7
- #
8
- class AlchemyTwoPointSix < ActiveRecord::Migration
9
- def up
10
-
11
- unless table_exists?('alchemy_attachments')
12
- create_table "alchemy_attachments" do |t|
13
- t.string "name"
14
- t.string "file_name"
15
- t.string "file_mime_type"
16
- t.integer "file_size"
17
- t.integer "creator_id"
18
- t.integer "updater_id"
19
- t.datetime "created_at", null: false
20
- t.datetime "updated_at", null: false
21
- t.text "cached_tag_list"
22
- t.string "file_uid"
23
- end
24
- add_index "alchemy_attachments", ["file_uid"], name: "index_alchemy_attachments_on_file_uid"
25
- end
26
-
27
- unless table_exists?('alchemy_cells')
28
- create_table "alchemy_cells" do |t|
29
- t.integer "page_id"
30
- t.string "name"
31
- t.datetime "created_at", null: false
32
- t.datetime "updated_at", null: false
33
- end
34
- end
35
-
36
- unless table_exists?('alchemy_contents')
37
- create_table "alchemy_contents" do |t|
38
- t.string "name"
39
- t.string "essence_type"
40
- t.integer "essence_id"
41
- t.integer "element_id"
42
- t.integer "position"
43
- t.datetime "created_at", null: false
44
- t.datetime "updated_at", null: false
45
- t.integer "creator_id"
46
- t.integer "updater_id"
47
- end
48
- add_index "alchemy_contents", ["element_id", "position"], name: "index_contents_on_element_id_and_position"
49
- end
50
-
51
- unless table_exists?('alchemy_elements')
52
- create_table "alchemy_elements" do |t|
53
- t.string "name"
54
- t.integer "position"
55
- t.integer "page_id"
56
- t.boolean "public", default: true
57
- t.boolean "folded", default: false
58
- t.boolean "unique", default: false
59
- t.datetime "created_at", null: false
60
- t.datetime "updated_at", null: false
61
- t.integer "creator_id"
62
- t.integer "updater_id"
63
- t.integer "cell_id"
64
- t.text "cached_tag_list"
65
- end
66
- add_index "alchemy_elements", ["page_id", "position"], name: "index_elements_on_page_id_and_position"
67
- end
68
-
69
- unless table_exists?('alchemy_elements_alchemy_pages')
70
- create_table "alchemy_elements_alchemy_pages", id: false do |t|
71
- t.integer "element_id"
72
- t.integer "page_id"
73
- end
74
- end
75
-
76
- unless table_exists?('alchemy_essence_booleans')
77
- create_table "alchemy_essence_booleans" do |t|
78
- t.boolean "value"
79
- t.datetime "created_at", null: false
80
- t.datetime "updated_at", null: false
81
- t.integer "creator_id"
82
- t.integer "updater_id"
83
- end
84
- add_index "alchemy_essence_booleans", ["value"], name: "index_alchemy_essence_booleans_on_value"
85
- end
86
-
87
- unless table_exists?('alchemy_essence_dates')
88
- create_table "alchemy_essence_dates" do |t|
89
- t.datetime "date"
90
- t.integer "creator_id"
91
- t.integer "updater_id"
92
- t.datetime "created_at", null: false
93
- t.datetime "updated_at", null: false
94
- end
95
- end
96
-
97
- unless table_exists?('alchemy_essence_files')
98
- create_table "alchemy_essence_files" do |t|
99
- t.integer "attachment_id"
100
- t.string "title"
101
- t.string "css_class"
102
- t.integer "creator_id"
103
- t.integer "updater_id"
104
- t.datetime "created_at", null: false
105
- t.datetime "updated_at", null: false
106
- end
107
- end
108
-
109
- unless table_exists?('alchemy_essence_htmls')
110
- create_table "alchemy_essence_htmls" do |t|
111
- t.text "source"
112
- t.integer "creator_id"
113
- t.integer "updater_id"
114
- t.datetime "created_at", null: false
115
- t.datetime "updated_at", null: false
116
- end
117
- end
118
-
119
- unless table_exists?('alchemy_essence_links')
120
- create_table "alchemy_essence_links" do |t|
121
- t.string "link"
122
- t.string "link_title"
123
- t.string "link_target"
124
- t.string "link_class_name"
125
- t.datetime "created_at", null: false
126
- t.datetime "updated_at", null: false
127
- t.integer "creator_id"
128
- t.integer "updater_id"
129
- end
130
- end
131
-
132
- unless table_exists?('alchemy_essence_pictures')
133
- create_table "alchemy_essence_pictures" do |t|
134
- t.integer "picture_id"
135
- t.string "caption"
136
- t.string "title"
137
- t.string "alt_tag"
138
- t.string "link"
139
- t.string "link_class_name"
140
- t.string "link_title"
141
- t.string "css_class"
142
- t.string "link_target"
143
- t.integer "creator_id"
144
- t.integer "updater_id"
145
- t.datetime "created_at", null: false
146
- t.datetime "updated_at", null: false
147
- t.string "crop_from"
148
- t.string "crop_size"
149
- t.string "render_size"
150
- end
151
- end
152
-
153
- unless table_exists?('alchemy_essence_richtexts')
154
- create_table "alchemy_essence_richtexts" do |t|
155
- t.text "body"
156
- t.text "stripped_body"
157
- t.boolean "do_not_index", default: false
158
- t.boolean "public"
159
- t.integer "creator_id"
160
- t.integer "updater_id"
161
- t.datetime "created_at", null: false
162
- t.datetime "updated_at", null: false
163
- end
164
- end
165
-
166
- unless table_exists?('alchemy_essence_selects')
167
- create_table "alchemy_essence_selects" do |t|
168
- t.string "value"
169
- t.datetime "created_at", null: false
170
- t.datetime "updated_at", null: false
171
- t.integer "creator_id"
172
- t.integer "updater_id"
173
- end
174
- add_index "alchemy_essence_selects", ["value"], name: "index_alchemy_essence_selects_on_value"
175
- end
176
-
177
- unless table_exists?('alchemy_essence_texts')
178
- create_table "alchemy_essence_texts" do |t|
179
- t.text "body"
180
- t.string "link"
181
- t.string "link_title"
182
- t.string "link_class_name"
183
- t.boolean "public", default: false
184
- t.boolean "do_not_index", default: false
185
- t.string "link_target"
186
- t.integer "creator_id"
187
- t.integer "updater_id"
188
- t.datetime "created_at", null: false
189
- t.datetime "updated_at", null: false
190
- end
191
- end
192
-
193
- unless table_exists?('alchemy_folded_pages')
194
- create_table "alchemy_folded_pages" do |t|
195
- t.integer "page_id"
196
- t.integer "user_id"
197
- t.boolean "folded", default: false
198
- end
199
- end
200
-
201
- unless table_exists?('alchemy_languages')
202
- create_table "alchemy_languages" do |t|
203
- t.string "name"
204
- t.string "language_code"
205
- t.string "frontpage_name"
206
- t.string "page_layout", default: "intro"
207
- t.boolean "public", default: false
208
- t.datetime "created_at", null: false
209
- t.datetime "updated_at", null: false
210
- t.integer "creator_id"
211
- t.integer "updater_id"
212
- t.boolean "default", default: false
213
- t.string "country_code", default: "", null: false
214
- t.integer "site_id"
215
- end
216
- add_index "alchemy_languages", ["language_code", "country_code"], name: "index_alchemy_languages_on_language_code_and_country_code"
217
- add_index "alchemy_languages", ["language_code"], name: "index_alchemy_languages_on_language_code"
218
- add_index "alchemy_languages", ["site_id"], name: "index_alchemy_languages_on_site_id"
219
- end
220
-
221
- unless table_exists?('alchemy_legacy_page_urls')
222
- create_table "alchemy_legacy_page_urls" do |t|
223
- t.string "urlname", null: false
224
- t.integer "page_id", null: false
225
- t.datetime "created_at", null: false
226
- t.datetime "updated_at", null: false
227
- end
228
- add_index "alchemy_legacy_page_urls", ["urlname"], name: "index_alchemy_legacy_page_urls_on_urlname"
229
- end
230
-
231
- unless table_exists?('alchemy_pages')
232
- create_table "alchemy_pages" do |t|
233
- t.string "name"
234
- t.string "urlname"
235
- t.string "title"
236
- t.string "language_code"
237
- t.boolean "language_root"
238
- t.string "page_layout"
239
- t.text "meta_keywords"
240
- t.text "meta_description"
241
- t.integer "lft"
242
- t.integer "rgt"
243
- t.integer "parent_id"
244
- t.integer "depth"
245
- t.boolean "visible", default: false
246
- t.boolean "public", default: false
247
- t.boolean "locked", default: false
248
- t.integer "locked_by"
249
- t.boolean "restricted", default: false
250
- t.boolean "robot_index", default: true
251
- t.boolean "robot_follow", default: true
252
- t.boolean "sitemap", default: true
253
- t.boolean "layoutpage", default: false
254
- t.datetime "created_at", null: false
255
- t.datetime "updated_at", null: false
256
- t.integer "creator_id"
257
- t.integer "updater_id"
258
- t.integer "language_id"
259
- t.text "cached_tag_list"
260
- end
261
- add_index "alchemy_pages", ["language_id"], name: "index_pages_on_language_id"
262
- add_index "alchemy_pages", ["parent_id", "lft"], name: "index_pages_on_parent_id_and_lft"
263
- add_index "alchemy_pages", ["urlname"], name: "index_pages_on_urlname"
264
- end
265
-
266
- unless table_exists?('alchemy_pictures')
267
- create_table "alchemy_pictures" do |t|
268
- t.string "name"
269
- t.string "image_file_name"
270
- t.integer "image_file_width"
271
- t.integer "image_file_height"
272
- t.datetime "created_at", null: false
273
- t.datetime "updated_at", null: false
274
- t.integer "creator_id"
275
- t.integer "updater_id"
276
- t.string "upload_hash"
277
- t.text "cached_tag_list"
278
- t.string "image_file_uid"
279
- t.integer "image_file_size"
280
- end
281
- end
282
-
283
- unless table_exists?('alchemy_sites')
284
- create_table "alchemy_sites" do |t|
285
- t.string "host"
286
- t.string "name"
287
- t.datetime "created_at", null: false
288
- t.datetime "updated_at", null: false
289
- t.boolean "public", default: false
290
- t.text "aliases"
291
- t.boolean "redirect_to_primary_host"
292
- end
293
- add_index "alchemy_sites", ["host", "public"], name: "alchemy_sites_public_hosts_idx"
294
- add_index "alchemy_sites", ["host"], name: "index_alchemy_sites_on_host"
295
- end
296
- end
297
-
298
- def down
299
- if table_exists?('alchemy_attachments')
300
- drop_table "alchemy_attachments"
301
- end
302
-
303
- if table_exists?('alchemy_cells')
304
- drop_table "alchemy_cells"
305
- end
306
-
307
- if table_exists?('alchemy_contents')
308
- drop_table "alchemy_contents"
309
- end
310
-
311
- if table_exists?('alchemy_elements')
312
- drop_table "alchemy_elements"
313
- end
314
-
315
- if table_exists?('alchemy_elements_alchemy_pages')
316
- drop_table "alchemy_elements_alchemy_pages"
317
- end
318
-
319
- if table_exists?('alchemy_essence_booleans')
320
- drop_table "alchemy_essence_booleans"
321
- end
322
-
323
- if table_exists?('alchemy_essence_dates')
324
- drop_table "alchemy_essence_dates"
325
- end
326
-
327
- if table_exists?('alchemy_essence_files')
328
- drop_table "alchemy_essence_files"
329
- end
330
-
331
- if table_exists?('alchemy_essence_htmls')
332
- drop_table "alchemy_essence_htmls"
333
- end
334
-
335
- if table_exists?('alchemy_essence_links')
336
- drop_table "alchemy_essence_links"
337
- end
338
-
339
- if table_exists?('alchemy_essence_pictures')
340
- drop_table "alchemy_essence_pictures"
341
- end
342
-
343
- if table_exists?('alchemy_essence_richtexts')
344
- drop_table "alchemy_essence_richtexts"
345
- end
346
-
347
- if table_exists?('alchemy_essence_selects')
348
- drop_table "alchemy_essence_selects"
349
- end
350
-
351
- if table_exists?('alchemy_essence_texts')
352
- drop_table "alchemy_essence_texts"
353
- end
354
-
355
- if table_exists?('alchemy_folded_pages')
356
- drop_table "alchemy_folded_pages"
357
- end
358
-
359
- if table_exists?('alchemy_languages')
360
- drop_table "alchemy_languages"
361
- end
362
-
363
- if table_exists?('alchemy_legacy_page_urls')
364
- drop_table "alchemy_legacy_page_urls"
365
- end
366
-
367
- if table_exists?('alchemy_pages')
368
- drop_table "alchemy_pages"
369
- end
370
-
371
- if table_exists?('alchemy_pictures')
372
- drop_table "alchemy_pictures"
373
- end
374
-
375
- if table_exists?('alchemy_sites')
376
- drop_table "alchemy_sites"
377
- end
378
-
379
- end
380
- end