alchemy_cms 2.5.0.b5 → 2.5.0.b9
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/alchemy_cms.gemspec +2 -2
- data/app/assets/javascripts/alchemy/alchemy.base.js +0 -24
- data/app/assets/javascripts/alchemy/alchemy.growler.js +2 -4
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -1
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +1 -1
- data/app/assets/stylesheets/alchemy/base.scss +4 -20
- data/app/assets/stylesheets/alchemy/elements.scss +19 -31
- data/app/assets/stylesheets/alchemy/flash.scss +11 -0
- data/app/assets/stylesheets/alchemy/form_elements.scss +2 -14
- data/app/assets/stylesheets/alchemy/menubar.css.scss +1 -0
- data/app/assets/stylesheets/alchemy/mixins.scss +37 -2
- data/app/assets/stylesheets/alchemy/notices.scss +1 -0
- data/app/assets/stylesheets/alchemy/sitemap.scss +30 -0
- data/app/assets/stylesheets/alchemy/tables.scss +20 -27
- data/app/controllers/alchemy/admin/attachments_controller.rb +3 -3
- data/app/controllers/alchemy/admin/base_controller.rb +1 -1
- data/app/controllers/alchemy/admin/contents_controller.rb +2 -2
- data/app/controllers/alchemy/admin/elements_controller.rb +3 -3
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +2 -2
- data/app/controllers/alchemy/admin/pages_controller.rb +16 -9
- data/app/controllers/alchemy/admin/pictures_controller.rb +8 -8
- data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
- data/app/controllers/alchemy/admin/tags_controller.rb +4 -4
- data/app/controllers/alchemy/admin/users_controller.rb +3 -3
- data/app/controllers/alchemy/base_controller.rb +10 -12
- data/app/controllers/alchemy/messages_controller.rb +2 -2
- data/app/controllers/alchemy/pages_controller.rb +4 -1
- data/app/controllers/alchemy/pictures_controller.rb +1 -4
- data/app/controllers/alchemy/user_sessions_controller.rb +5 -5
- data/app/helpers/alchemy/admin/attachments_helper.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +13 -13
- data/app/helpers/alchemy/admin/contents_helper.rb +6 -6
- data/app/helpers/alchemy/admin/elements_helper.rb +2 -2
- data/app/helpers/alchemy/admin/essences_helper.rb +8 -8
- data/app/helpers/alchemy/admin/pages_helper.rb +13 -7
- data/app/helpers/alchemy/base_helper.rb +20 -5
- data/app/helpers/alchemy/elements_helper.rb +2 -2
- data/app/helpers/alchemy/essences_helper.rb +2 -2
- data/app/helpers/alchemy/pages_helper.rb +2 -3
- data/app/models/alchemy/cell.rb +11 -3
- data/app/models/alchemy/content.rb +17 -17
- data/app/models/alchemy/element.rb +49 -26
- data/app/models/alchemy/legacy_page_url.rb +6 -0
- data/app/models/alchemy/page.rb +24 -45
- data/app/models/alchemy/picture.rb +1 -2
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +6 -6
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +2 -2
- data/app/views/alchemy/admin/attachments/edit.html.erb +5 -3
- data/app/views/alchemy/admin/attachments/index.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/new.html.erb +2 -2
- data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/index.html.erb +3 -3
- data/app/views/alchemy/admin/clipboard/insert.js.erb +2 -2
- data/app/views/alchemy/admin/clipboard/remove.js.erb +4 -4
- data/app/views/alchemy/admin/contents/_missing.html.erb +2 -2
- data/app/views/alchemy/admin/contents/create.js.erb +1 -1
- data/app/views/alchemy/admin/contents/new.html.erb +3 -3
- data/app/views/alchemy/admin/dashboard/index.html.erb +12 -12
- data/app/views/alchemy/admin/elements/_add_picture.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element_foot.html.erb +5 -5
- data/app/views/alchemy/admin/elements/_element_head.html.erb +6 -6
- data/app/views/alchemy/admin/elements/_elements_select.html.erb +2 -2
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +4 -4
- data/app/views/alchemy/admin/elements/_picture_gallery_editor.html.erb +1 -1
- data/app/views/alchemy/admin/elements/create.js.erb +2 -2
- data/app/views/alchemy/admin/elements/index.html.erb +2 -2
- data/app/views/alchemy/admin/elements/list.js.erb +1 -1
- data/app/views/alchemy/admin/elements/new.html.erb +4 -4
- data/app/views/alchemy/admin/elements/order.js.erb +1 -1
- data/app/views/alchemy/admin/elements/trash.js.erb +1 -1
- data/app/views/alchemy/admin/elements/update.js.erb +1 -1
- data/app/views/alchemy/admin/essence_files/edit.html.erb +5 -5
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +4 -4
- data/app/views/alchemy/admin/essence_pictures/edit.html.erb +4 -4
- data/app/views/alchemy/admin/languages/_form.html.erb +6 -10
- data/app/views/alchemy/admin/languages/_language.html.erb +4 -4
- data/app/views/alchemy/admin/languages/_table.html.erb +1 -1
- data/app/views/alchemy/admin/languages/index.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +6 -6
- data/app/views/alchemy/admin/layoutpages/index.html.erb +8 -8
- data/app/views/alchemy/admin/pages/_contactform_links.html.erb +7 -7
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +10 -9
- data/app/views/alchemy/admin/pages/_external_link.html.erb +7 -7
- data/app/views/alchemy/admin/pages/_file_link.html.erb +6 -6
- data/app/views/alchemy/admin/pages/_internal_link.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +28 -28
- data/app/views/alchemy/admin/pages/_page_for_links.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +3 -3
- data/app/views/alchemy/admin/pages/_page_status.html.erb +3 -3
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
- data/app/views/alchemy/admin/pages/configure.html.erb +11 -11
- data/app/views/alchemy/admin/pages/configure_external.html.erb +4 -4
- data/app/views/alchemy/admin/pages/destroy.js.erb +0 -1
- data/app/views/alchemy/admin/pages/edit.html.erb +35 -35
- data/app/views/alchemy/admin/pages/flush.js.erb +1 -1
- data/app/views/alchemy/admin/pages/fold.js.erb +0 -1
- data/app/views/alchemy/admin/pages/index.html.erb +14 -14
- data/app/views/alchemy/admin/pages/link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
- data/app/views/alchemy/admin/pages/new.html.erb +4 -4
- data/app/views/alchemy/admin/pages/update.js.erb +2 -2
- data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_flash_notices.html.erb +3 -3
- data/app/views/alchemy/admin/partials/_flash_upload.html.erb +8 -8
- data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +2 -2
- data/app/views/alchemy/admin/partials/_search_form.html.erb +2 -2
- data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_upload_form.html.erb +11 -11
- data/app/views/alchemy/admin/pictures/_archive.html.erb +13 -13
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +7 -7
- data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +4 -4
- data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_picture.html.erb +7 -7
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/edit.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +6 -6
- data/app/views/alchemy/admin/pictures/index.html.erb +10 -10
- data/app/views/alchemy/admin/pictures/info.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/new.html.erb +2 -2
- data/app/views/alchemy/admin/resources/_boolean.html.erb +5 -0
- data/app/views/alchemy/admin/resources/_datetime.html.erb +2 -0
- data/app/views/alchemy/admin/resources/_form.html.erb +17 -28
- data/app/views/alchemy/admin/resources/_resource.html.erb +4 -4
- data/app/views/alchemy/admin/resources/_string.html.erb +5 -0
- data/app/views/alchemy/admin/resources/_table.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_text.html.erb +5 -0
- data/app/views/alchemy/admin/resources/index.html.erb +1 -1
- data/app/views/alchemy/admin/tags/_tag.html.erb +4 -4
- data/app/views/alchemy/admin/tags/edit.html.erb +4 -4
- data/app/views/alchemy/admin/tags/index.html.erb +5 -5
- data/app/views/alchemy/admin/tags/new.html.erb +2 -2
- data/app/views/alchemy/admin/trash/clear.js.coffee +1 -1
- data/app/views/alchemy/admin/trash/index.html.erb +3 -3
- data/app/views/alchemy/admin/users/_table.html.erb +3 -3
- data/app/views/alchemy/admin/users/_user.html.erb +6 -6
- data/app/views/alchemy/admin/users/index.html.erb +4 -4
- data/app/views/alchemy/base/error_notice.html.erb +1 -4
- data/app/views/alchemy/elements/_editor_not_found.html.erb +2 -2
- data/app/views/alchemy/essences/_essence_boolean_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +7 -7
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +5 -5
- data/app/views/alchemy/essences/_essence_picture_tools.html.erb +8 -8
- data/app/views/alchemy/essences/_linkable_essence_tools.html.erb +2 -2
- data/app/views/alchemy/search/_form.html.erb +2 -2
- data/app/views/alchemy/search/_result.html.erb +1 -1
- data/app/views/alchemy/search/_results.html.erb +3 -3
- data/app/views/alchemy/user_sessions/leave.html.erb +5 -5
- data/app/views/alchemy/user_sessions/login.html.erb +1 -1
- data/app/views/alchemy/user_sessions/signup.html.erb +2 -2
- data/app/views/kaminari/_gap.html.erb +1 -1
- data/app/views/kaminari/_next_page.html.erb +2 -2
- data/app/views/kaminari/_prev_page.html.erb +2 -2
- data/app/views/layouts/alchemy/admin.html.erb +7 -7
- data/bin/alchemy +1 -1
- data/config/authorization_rules.rb +1 -3
- data/config/locales/alchemy.de.yml +33 -23
- data/config/locales/alchemy.en.yml +31 -6
- data/db/migrate/{20121026100815_alchemy_two_point_three.rb → 20121118000000_alchemy_two_point_four.rb} +51 -28
- data/db/migrate/20130110212411_create_alchemy_legacy_page_urls.rb +11 -0
- data/lib/alchemy/capistrano.rb +22 -30
- data/lib/alchemy/errors.rb +45 -0
- data/lib/alchemy/i18n.rb +7 -5
- data/lib/alchemy/logger.rb +16 -0
- data/lib/alchemy/page_layout.rb +3 -3
- data/lib/alchemy/resource.rb +17 -1
- data/lib/alchemy/resources_helper.rb +8 -1
- data/lib/alchemy/upgrader.rb +9 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +1 -6
- data/lib/rails/generators/alchemy/scaffold/files/elements.yml +41 -19
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +13 -0
- data/lib/tasks/alchemy/db.rake +5 -11
- data/lib/tasks/alchemy/install.rake +7 -7
- data/spec/controllers/admin/pages_controller_spec.rb +14 -2
- data/spec/controllers/pages_controller_spec.rb +50 -17
- data/spec/dummy/config/application.rb +1 -1
- data/spec/dummy/db/migrate/{20121026100815_alchemy_two_point_three.rb → 20121118000000_alchemy_two_point_four.rb} +51 -28
- data/spec/dummy/db/migrate/20130110212411_create_alchemy_legacy_page_urls.rb +11 -0
- data/spec/dummy/db/schema.rb +10 -1
- data/spec/factories.rb +1 -0
- data/spec/integration/admin/picture_library_integration_spec.rb +8 -2
- data/spec/integration/security_spec.rb +2 -2
- data/spec/integration/translation_integration_spec.rb +20 -4
- data/spec/libraries/resources_helper_spec.rb +1 -1
- data/spec/models/cell_spec.rb +45 -0
- data/spec/models/page_spec.rb +19 -2
- data/spec/models/picture_spec.rb +12 -0
- data/spec/routing_spec.rb +115 -115
- data/spec/spec_helper.rb +3 -0
- data/spec/support/alchemy/specs_helpers.rb +6 -2
- data/spec/support/image.png +0 -0
- data/spec/support/image2.PNG +0 -0
- data/spec/support/image3.jpeg +0 -0
- metadata +27 -23
- data/db/migrate/20121113115120_create_alchemy_essence_links.rb +0 -13
- data/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +0 -7
- data/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +0 -5
- data/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +0 -9
- data/spec/dummy/db/migrate/20121113115120_create_alchemy_essence_links.rb +0 -13
- data/spec/dummy/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +0 -7
- data/spec/dummy/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +0 -5
- data/spec/dummy/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +0 -9
@@ -1,11 +1,11 @@
|
|
1
|
-
# This is a compressed migration for creating all Alchemy 2.
|
1
|
+
# This is a compressed migration for creating all Alchemy 2.4 tables at once.
|
2
2
|
#
|
3
3
|
# === Notice
|
4
4
|
#
|
5
5
|
# In order to upgrade from an old version of Alchemy, you have to run all migrations from
|
6
6
|
# each version you missed up to the version you want to upgrade to, before running this migration.
|
7
7
|
#
|
8
|
-
class
|
8
|
+
class AlchemyTwoPointFour < ActiveRecord::Migration
|
9
9
|
def up
|
10
10
|
# Do not run if Alchemy tables are already present
|
11
11
|
return if table_exists?(:alchemy_pages)
|
@@ -17,8 +17,9 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
17
17
|
t.integer "size"
|
18
18
|
t.integer "creator_id"
|
19
19
|
t.integer "updater_id"
|
20
|
-
t.datetime "created_at",
|
21
|
-
t.datetime "updated_at",
|
20
|
+
t.datetime "created_at", :null => false
|
21
|
+
t.datetime "updated_at", :null => false
|
22
|
+
t.text "cached_tag_list"
|
22
23
|
end
|
23
24
|
|
24
25
|
create_table "alchemy_cells", :force => true do |t|
|
@@ -46,14 +47,15 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
46
47
|
t.string "name"
|
47
48
|
t.integer "position"
|
48
49
|
t.integer "page_id"
|
49
|
-
t.boolean "public",
|
50
|
-
t.boolean "folded",
|
51
|
-
t.boolean "unique",
|
52
|
-
t.datetime "created_at",
|
53
|
-
t.datetime "updated_at",
|
50
|
+
t.boolean "public", :default => true
|
51
|
+
t.boolean "folded", :default => false
|
52
|
+
t.boolean "unique", :default => false
|
53
|
+
t.datetime "created_at", :null => false
|
54
|
+
t.datetime "updated_at", :null => false
|
54
55
|
t.integer "creator_id"
|
55
56
|
t.integer "updater_id"
|
56
57
|
t.integer "cell_id"
|
58
|
+
t.text "cached_tag_list"
|
57
59
|
end
|
58
60
|
|
59
61
|
add_index "alchemy_elements", ["page_id", "position"], :name => "index_elements_on_page_id_and_position"
|
@@ -99,6 +101,17 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
99
101
|
t.datetime "updated_at", :null => false
|
100
102
|
end
|
101
103
|
|
104
|
+
create_table "alchemy_essence_links", :force => true do |t|
|
105
|
+
t.string "link"
|
106
|
+
t.string "link_title"
|
107
|
+
t.string "link_target"
|
108
|
+
t.string "link_class_name"
|
109
|
+
t.datetime "created_at", :null => false
|
110
|
+
t.datetime "updated_at", :null => false
|
111
|
+
t.integer "creator_id"
|
112
|
+
t.integer "updater_id"
|
113
|
+
end
|
114
|
+
|
102
115
|
create_table "alchemy_essence_pictures", :force => true do |t|
|
103
116
|
t.integer "picture_id"
|
104
117
|
t.string "caption"
|
@@ -203,6 +216,7 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
203
216
|
t.integer "creator_id"
|
204
217
|
t.integer "updater_id"
|
205
218
|
t.integer "language_id"
|
219
|
+
t.text "cached_tag_list"
|
206
220
|
end
|
207
221
|
|
208
222
|
add_index "alchemy_pages", ["language_id"], :name => "index_pages_on_language_id"
|
@@ -219,7 +233,7 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
219
233
|
t.integer "creator_id"
|
220
234
|
t.integer "updater_id"
|
221
235
|
t.string "upload_hash"
|
222
|
-
t.
|
236
|
+
t.text "cached_tag_list"
|
223
237
|
end
|
224
238
|
|
225
239
|
create_table "alchemy_users", :force => true do |t|
|
@@ -246,31 +260,40 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
246
260
|
t.datetime "updated_at", :null => false
|
247
261
|
t.integer "creator_id"
|
248
262
|
t.integer "updater_id"
|
263
|
+
t.text "cached_tag_list"
|
249
264
|
end
|
250
265
|
|
251
266
|
add_index "alchemy_users", ["perishable_token"], :name => "index_users_on_perishable_token"
|
252
267
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
|
266
|
-
add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
|
268
|
+
create_table "events", :force => true do |t|
|
269
|
+
t.string "name"
|
270
|
+
t.string "hidden_name"
|
271
|
+
t.datetime "starts_at"
|
272
|
+
t.datetime "ends_at"
|
273
|
+
t.text "description"
|
274
|
+
t.decimal "entrance_fee", :precision => 6, :scale => 2
|
275
|
+
t.boolean "published"
|
276
|
+
t.integer "location_id"
|
277
|
+
t.integer "organizer_id"
|
278
|
+
t.datetime "created_at", :null => false
|
279
|
+
t.datetime "updated_at", :null => false
|
267
280
|
end
|
268
281
|
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
282
|
+
create_table "taggings", :force => true do |t|
|
283
|
+
t.integer "tag_id"
|
284
|
+
t.integer "taggable_id"
|
285
|
+
t.string "taggable_type"
|
286
|
+
t.integer "tagger_id"
|
287
|
+
t.string "tagger_type"
|
288
|
+
t.string "context"
|
289
|
+
t.datetime "created_at"
|
273
290
|
end
|
274
291
|
|
292
|
+
add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
|
293
|
+
add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
|
294
|
+
|
295
|
+
create_table "tags", :force => true do |t|
|
296
|
+
t.string "name"
|
297
|
+
end
|
275
298
|
end
|
276
299
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateAlchemyLegacyPageUrls < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :alchemy_legacy_page_urls do |t|
|
4
|
+
t.string :urlname, null: false
|
5
|
+
t.integer :page_id, null: false
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :alchemy_legacy_page_urls, :urlname
|
10
|
+
end
|
11
|
+
end
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
14
|
+
ActiveRecord::Schema.define(:version => 20130110212411) do
|
15
15
|
|
16
16
|
create_table "alchemy_attachments", :force => true do |t|
|
17
17
|
t.string "name"
|
@@ -194,6 +194,15 @@ ActiveRecord::Schema.define(:version => 20121220102223) do
|
|
194
194
|
add_index "alchemy_languages", ["language_code"], :name => "index_alchemy_languages_on_language_code"
|
195
195
|
add_index "alchemy_languages", ["site_id"], :name => "index_alchemy_languages_on_site_id"
|
196
196
|
|
197
|
+
create_table "alchemy_legacy_page_urls", :force => true do |t|
|
198
|
+
t.string "urlname", :null => false
|
199
|
+
t.integer "page_id", :null => false
|
200
|
+
t.datetime "created_at", :null => false
|
201
|
+
t.datetime "updated_at", :null => false
|
202
|
+
end
|
203
|
+
|
204
|
+
add_index "alchemy_legacy_page_urls", ["urlname"], :name => "index_alchemy_legacy_page_urls_on_urlname"
|
205
|
+
|
197
206
|
create_table "alchemy_pages", :force => true do |t|
|
198
207
|
t.string "name"
|
199
208
|
t.string "urlname"
|
data/spec/factories.rb
CHANGED
@@ -23,10 +23,16 @@ describe "Picture Library", :js => true do
|
|
23
23
|
it "it should be possible to undo tag filtering by clicking on an active tag name" do
|
24
24
|
visit '/alchemy/admin/pictures'
|
25
25
|
click_on 'tag1 (1)'
|
26
|
-
|
26
|
+
page.should_not have_content 'TaggedWith2'
|
27
|
+
click_on 'tag1 (1)'
|
27
28
|
page.should have_content 'TaggedWith2'
|
29
|
+
end
|
30
|
+
|
31
|
+
it "it should be possible to tighten the tag scope by clicking on another tag name" do
|
32
|
+
visit '/alchemy/admin/pictures'
|
33
|
+
click_on 'tag1 (1)'
|
28
34
|
click_on 'tag2 (1)'
|
29
|
-
page.
|
35
|
+
page.should have_content "You don't have any images in your archive"
|
30
36
|
end
|
31
37
|
|
32
38
|
end
|
@@ -10,8 +10,8 @@ describe "Security: " do
|
|
10
10
|
context "If no user is present" do
|
11
11
|
|
12
12
|
it "render the signup view" do
|
13
|
-
visit '/alchemy
|
14
|
-
|
13
|
+
visit '/alchemy'
|
14
|
+
current_path.should == '/alchemy/admin/signup'
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -21,6 +21,7 @@ describe "Translation integration" do
|
|
21
21
|
|
22
22
|
it "should be possible to change the current locale in the session" do
|
23
23
|
visit admin_dashboard_path(:locale => :de)
|
24
|
+
page.should have_content('Willkommen')
|
24
25
|
visit admin_dashboard_path(:locale => :en)
|
25
26
|
page.should have_content('Welcome')
|
26
27
|
end
|
@@ -30,10 +31,25 @@ describe "Translation integration" do
|
|
30
31
|
page.should have_content('Welcome')
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
context "if no other parameter is given" do
|
35
|
+
it "should use the current users language setting" do
|
36
|
+
Alchemy::User.first.update_attributes!(language: 'de')
|
37
|
+
visit admin_dashboard_path
|
38
|
+
page.should have_content('Willkommen')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
context "with translated header" do
|
45
|
+
|
46
|
+
before do
|
47
|
+
Capybara.current_driver = :rack_test_translated_header
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should use the browsers language setting if no other parameter is given" do
|
51
|
+
visit root_path
|
52
|
+
::I18n.locale.should == :de
|
37
53
|
end
|
38
54
|
|
39
55
|
end
|
@@ -106,7 +106,7 @@ describe Alchemy::ResourcesHelper do
|
|
106
106
|
describe "resource_window_size" do
|
107
107
|
it "should return overlay size string depending on resource attributes length" do
|
108
108
|
@controller.stub(:resource_handler).and_return(OpenStruct.new(:attributes => OpenStruct.new(:length => 4)))
|
109
|
-
@controller.resource_window_size.should == "
|
109
|
+
@controller.resource_window_size.should == "420x260"
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Alchemy
|
4
|
+
describe Cell do
|
5
|
+
|
6
|
+
let(:cell) { FactoryGirl.build(:cell) }
|
7
|
+
|
8
|
+
describe "#available_elements" do
|
9
|
+
|
10
|
+
context "without assigned elements" do
|
11
|
+
it "should return an empty Array" do
|
12
|
+
cell.stub!(:description).and_return({})
|
13
|
+
cell.available_elements.should == []
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "with assigned elements" do
|
18
|
+
it "should return an Array of element names" do
|
19
|
+
cell.stub!(:description).and_return({'elements' => ['test_element', 'test_element_2']})
|
20
|
+
cell.available_elements.should == ['test_element', 'test_element_2']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#description" do
|
27
|
+
|
28
|
+
context "without a definition for the expected cellname" do
|
29
|
+
it "should return an empty Hash" do
|
30
|
+
Cell.stub!(:definition_for).and_return({})
|
31
|
+
cell.description.should == {}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "with a definition for the expected cellname found" do
|
36
|
+
it "should return its definition Hash" do
|
37
|
+
Cell.stub!(:definition_for).and_return({'name' => 'test_cell', 'elements' => ['test_element', 'test_element_2']})
|
38
|
+
cell.description.should == {'name' => 'test_cell', 'elements' => ['test_element', 'test_element_2']}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
data/spec/models/page_spec.rb
CHANGED
@@ -144,22 +144,39 @@ module Alchemy
|
|
144
144
|
|
145
145
|
describe '#update' do
|
146
146
|
|
147
|
+
let(:page) { FactoryGirl.create(:page, :name => 'My Testpage', :language => language, :parent_id => language_root.id) }
|
148
|
+
|
147
149
|
context "before/after filter" do
|
148
150
|
|
149
151
|
it "should not set the title automatically if the name changed but title is not blank" do
|
150
|
-
page = FactoryGirl.create(:page, :name => 'My Testpage', :language => language, :parent_id => language_root.id)
|
151
152
|
page.name = "My Renaming Test"
|
152
153
|
page.save; page.reload
|
153
154
|
page.title.should == "My Testpage"
|
154
155
|
end
|
155
156
|
|
156
157
|
it "should not automatically set the title if it changed its value" do
|
157
|
-
page = FactoryGirl.create(:page, :name => 'My Testpage', :language => language, :parent_id => language_root.id)
|
158
158
|
page.title = "I like SEO"
|
159
159
|
page.save; page.reload
|
160
160
|
page.title.should == "I like SEO"
|
161
161
|
end
|
162
162
|
|
163
|
+
context "urlname has changed" do
|
164
|
+
it "should store legacy url" do
|
165
|
+
page.urlname = 'new-urlname'
|
166
|
+
page.save!
|
167
|
+
page.legacy_urls.should_not be_empty
|
168
|
+
page.legacy_urls.first.urlname.should == 'my-testpage'
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context "urlname has not changed" do
|
173
|
+
it "should not store a legacy url" do
|
174
|
+
page.urlname = 'my-testpage'
|
175
|
+
page.save!
|
176
|
+
page.legacy_urls.should be_empty
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
163
180
|
end
|
164
181
|
|
165
182
|
end
|
data/spec/models/picture_spec.rb
CHANGED
@@ -17,6 +17,18 @@ module Alchemy
|
|
17
17
|
picture.should_not be_valid
|
18
18
|
end
|
19
19
|
|
20
|
+
it "is valid with capitalized image file extension" do
|
21
|
+
image_file = File.new(File.expand_path('../../support/image2.PNG', __FILE__))
|
22
|
+
picture = Picture.new(:image_file => image_file)
|
23
|
+
picture.should be_valid
|
24
|
+
end
|
25
|
+
|
26
|
+
it "is valid with jpeg image file extension" do
|
27
|
+
image_file = File.new(File.expand_path('../../support/image3.jpeg', __FILE__))
|
28
|
+
picture = Picture.new(:image_file => image_file)
|
29
|
+
picture.should be_valid
|
30
|
+
end
|
31
|
+
|
20
32
|
describe '#suffix' do
|
21
33
|
|
22
34
|
it "should return the suffix of original filename" do
|
data/spec/routing_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "The Routing", :type => :routing do
|
4
4
|
|
5
|
-
before
|
5
|
+
before { @routes = Alchemy::Engine.routes }
|
6
6
|
|
7
7
|
context "for downloads" do
|
8
8
|
|
@@ -10,44 +10,44 @@ describe "The Routing", :type => :routing do
|
|
10
10
|
{
|
11
11
|
:get => "/attachment/32/download/Presseveranstaltung.pdf"
|
12
12
|
}.should route_to(
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
:controller => "alchemy/attachments",
|
14
|
+
:action => "download",
|
15
|
+
:id => "32",
|
16
|
+
:name => "Presseveranstaltung",
|
17
|
+
:format => "pdf"
|
18
|
+
)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should have a route for legacy Alchemy 1.x downloads" do
|
22
22
|
{
|
23
23
|
:get => "/attachment/32/download?name=Presseveranstaltung.pdf"
|
24
24
|
}.should route_to(
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
:controller => "alchemy/attachments",
|
26
|
+
:action => "download",
|
27
|
+
:id => "32"
|
28
|
+
)
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should have a route for legacy washAPP downloads" do
|
32
32
|
{
|
33
33
|
:get => "/wa_files/download/11"
|
34
34
|
}.should route_to(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
:controller => "alchemy/attachments",
|
36
|
+
:action => "download",
|
37
|
+
:id => "11"
|
38
|
+
)
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should have a route for legacy WebMate downloads" do
|
42
42
|
{
|
43
43
|
:get => "/uploads/files/0000/0028/Pressetext.pdf"
|
44
44
|
}.should route_to(
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
:controller => "alchemy/attachments",
|
46
|
+
:action => "download",
|
47
|
+
:id => "0028",
|
48
|
+
:name => "Pressetext",
|
49
|
+
:suffix => "pdf"
|
50
|
+
)
|
51
51
|
end
|
52
52
|
|
53
53
|
end
|
@@ -60,11 +60,11 @@ describe "The Routing", :type => :routing do
|
|
60
60
|
{
|
61
61
|
:get => "/products/my-product"
|
62
62
|
}.should route_to(
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
:controller => "alchemy/pages",
|
64
|
+
:action => "show",
|
65
|
+
:level1 => "products",
|
66
|
+
:urlname => "my-product"
|
67
|
+
)
|
68
68
|
end
|
69
69
|
|
70
70
|
context "and language" do
|
@@ -73,12 +73,12 @@ describe "The Routing", :type => :routing do
|
|
73
73
|
{
|
74
74
|
:get => "/de/products/my-product"
|
75
75
|
}.should route_to(
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
76
|
+
:controller => "alchemy/pages",
|
77
|
+
:action => "show",
|
78
|
+
:level1 => "products",
|
79
|
+
:urlname => "my-product",
|
80
|
+
:lang => "de"
|
81
|
+
)
|
82
82
|
end
|
83
83
|
|
84
84
|
end
|
@@ -91,12 +91,12 @@ describe "The Routing", :type => :routing do
|
|
91
91
|
{
|
92
92
|
:get => "/catalog/products/my-product"
|
93
93
|
}.should route_to(
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
94
|
+
:controller => "alchemy/pages",
|
95
|
+
:action => "show",
|
96
|
+
:level1 => "catalog",
|
97
|
+
:level2 => "products",
|
98
|
+
:urlname => "my-product"
|
99
|
+
)
|
100
100
|
end
|
101
101
|
|
102
102
|
context "and language" do
|
@@ -105,13 +105,13 @@ describe "The Routing", :type => :routing do
|
|
105
105
|
{
|
106
106
|
:get => "/de/catalog/products/my-product"
|
107
107
|
}.should route_to(
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
108
|
+
:controller => "alchemy/pages",
|
109
|
+
:action => "show",
|
110
|
+
:level1 => "catalog",
|
111
|
+
:level2 => "products",
|
112
|
+
:urlname => "my-product",
|
113
|
+
:lang => "de"
|
114
|
+
)
|
115
115
|
end
|
116
116
|
|
117
117
|
end
|
@@ -124,13 +124,13 @@ describe "The Routing", :type => :routing do
|
|
124
124
|
{
|
125
125
|
:get => "/2011/12/08/my-post"
|
126
126
|
}.should route_to(
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
127
|
+
:controller => "alchemy/pages",
|
128
|
+
:action => "show",
|
129
|
+
:level1 => "2011",
|
130
|
+
:level2 => "12",
|
131
|
+
:level3 => "08",
|
132
|
+
:urlname => "my-post"
|
133
|
+
)
|
134
134
|
end
|
135
135
|
|
136
136
|
context "and language" do
|
@@ -139,14 +139,14 @@ describe "The Routing", :type => :routing do
|
|
139
139
|
{
|
140
140
|
:get => "/de/2011/12/08/my-post"
|
141
141
|
}.should route_to(
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
142
|
+
:controller => "alchemy/pages",
|
143
|
+
:action => "show",
|
144
|
+
:level1 => "2011",
|
145
|
+
:level2 => "12",
|
146
|
+
:level3 => "08",
|
147
|
+
:urlname => "my-post",
|
148
|
+
:lang => "de"
|
149
|
+
)
|
150
150
|
end
|
151
151
|
|
152
152
|
end
|
@@ -161,97 +161,97 @@ describe "The Routing", :type => :routing do
|
|
161
161
|
{
|
162
162
|
:get => "/pictures/3/show/900x300/kitten.jpg"
|
163
163
|
}.should route_to(
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
164
|
+
:controller => "alchemy/pictures",
|
165
|
+
:action => "show",
|
166
|
+
:id => "3",
|
167
|
+
:size => "900x300",
|
168
|
+
:name => "kitten",
|
169
|
+
:format => "jpg"
|
170
|
+
)
|
171
171
|
end
|
172
172
|
|
173
173
|
it "should route to cropped show action" do
|
174
174
|
{
|
175
175
|
:get => "/pictures/3/show/900x300/crop/kitten.jpg"
|
176
176
|
}.should route_to(
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
177
|
+
:controller => "alchemy/pictures",
|
178
|
+
:action => "show",
|
179
|
+
:id => "3",
|
180
|
+
:size => "900x300",
|
181
|
+
:crop => "crop",
|
182
|
+
:name => "kitten",
|
183
|
+
:format => "jpg"
|
184
|
+
)
|
185
185
|
end
|
186
186
|
|
187
187
|
it "should route to cropped mask show action" do
|
188
188
|
get(
|
189
189
|
"/pictures/3/show/300x300/crop/200x50/100x100/kitten.jpg"
|
190
190
|
).should route_to(
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
191
|
+
:controller => "alchemy/pictures",
|
192
|
+
:action => "show",
|
193
|
+
:id => "3",
|
194
|
+
:size => "300x300",
|
195
|
+
:crop => "crop",
|
196
|
+
:crop_from => "200x50",
|
197
|
+
:crop_size => "100x100",
|
198
|
+
:name => "kitten",
|
199
|
+
:format => "jpg"
|
200
|
+
)
|
201
201
|
end
|
202
202
|
|
203
203
|
it "should route to thumbnail action" do
|
204
204
|
get(
|
205
205
|
"/pictures/3/thumbnails/small/kitten.jpg"
|
206
206
|
).should route_to(
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
207
|
+
:controller => "alchemy/pictures",
|
208
|
+
:action => "thumbnail",
|
209
|
+
:id => "3",
|
210
|
+
:size => "small",
|
211
|
+
:name => "kitten",
|
212
|
+
:format => "jpg"
|
213
|
+
)
|
214
214
|
end
|
215
215
|
|
216
216
|
it "should route to cropped thumbnail action" do
|
217
217
|
get(
|
218
218
|
"/pictures/3/thumbnails/small/crop/kitten.jpg"
|
219
219
|
).should route_to(
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
220
|
+
:controller => "alchemy/pictures",
|
221
|
+
:action => "thumbnail",
|
222
|
+
:id => "3",
|
223
|
+
:crop => "crop",
|
224
|
+
:size => "small",
|
225
|
+
:name => "kitten",
|
226
|
+
:format => "jpg"
|
227
|
+
)
|
228
228
|
end
|
229
229
|
|
230
230
|
it "should route to cropped and masked thumbnail" do
|
231
231
|
get(
|
232
232
|
"/pictures/3/thumbnails/small/0x0/200x200/kitten.jpg"
|
233
233
|
).should route_to(
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
234
|
+
:controller => "alchemy/pictures",
|
235
|
+
:action => "thumbnail",
|
236
|
+
:id => "3",
|
237
|
+
:crop_from => "0x0",
|
238
|
+
:crop_size => "200x200",
|
239
|
+
:size => "small",
|
240
|
+
:name => "kitten",
|
241
|
+
:format => "jpg"
|
242
|
+
)
|
243
243
|
end
|
244
244
|
|
245
245
|
it "should route to zoomed picture" do
|
246
246
|
get(
|
247
247
|
"/pictures/3/zoom/kitten.jpg"
|
248
248
|
).should route_to(
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
249
|
+
:controller => "alchemy/pictures",
|
250
|
+
:action => "zoom",
|
251
|
+
:id => "3",
|
252
|
+
:name => "kitten",
|
253
|
+
:format => "jpg"
|
254
|
+
)
|
255
255
|
end
|
256
256
|
|
257
257
|
end
|