alchemy_cms 2.1.beta6 → 2.1.rc2
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.
- data/.gitignore +3 -1
- data/Gemfile +10 -2
- data/Guardfile +16 -0
- data/README.md +3 -3
- data/Rakefile +0 -5
- data/alchemy_cms.gemspec +1 -9
- data/app/assets/javascripts/alchemy/alchemy.base.js +5 -4
- data/app/assets/javascripts/alchemy/{alchemy.dragndrop.js.erb → alchemy.dragndrop.js} +0 -0
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js +96 -0
- data/app/assets/javascripts/alchemy/alchemy.image_cropper.js +48 -50
- data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +41 -0
- data/app/assets/javascripts/alchemy/alchemy.js +2 -0
- data/app/assets/javascripts/alchemy/alchemy.menubar.js +55 -0
- data/app/assets/javascripts/alchemy/alchemy.preview.js +94 -139
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js +98 -0
- data/app/assets/javascripts/alchemy/alchemy.windows.js +1 -174
- data/app/assets/javascripts/alchemy/menubar.js +2 -0
- data/app/assets/javascripts/alchemy/preview.js +2 -1
- data/app/assets/stylesheets/alchemy/_defaults.scss +7 -8
- data/app/assets/stylesheets/alchemy/base.css.scss +29 -33
- data/app/assets/stylesheets/alchemy/elements.css.scss +4 -4
- data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +19 -4
- data/app/assets/stylesheets/alchemy/menubar.css.scss +85 -0
- data/app/assets/stylesheets/alchemy/standard_set.css +3 -5
- data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +1 -1
- data/app/controllers/alchemy/admin/attachments_controller.rb +2 -18
- data/app/controllers/alchemy/admin/base_controller.rb +1 -1
- data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
- data/app/controllers/alchemy/admin/essence_files_controller.rb +4 -2
- data/app/controllers/alchemy/admin/pictures_controller.rb +6 -20
- data/app/controllers/alchemy/admin/resources_controller.rb +7 -5
- data/app/controllers/alchemy/base_controller.rb +14 -4
- data/app/controllers/alchemy/messages_controller.rb +4 -4
- data/app/controllers/alchemy/pages_controller.rb +51 -32
- data/app/controllers/alchemy/pictures_controller.rb +0 -3
- data/app/controllers/alchemy/user_sessions_controller.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +6 -4
- data/app/helpers/alchemy/base_helper.rb +26 -0
- data/app/helpers/alchemy/pages_helper.rb +42 -22
- data/app/models/alchemy/attachment.rb +10 -2
- data/app/models/alchemy/cell.rb +1 -0
- data/app/models/alchemy/content.rb +8 -6
- data/app/models/alchemy/element.rb +1 -1
- data/app/models/alchemy/essence_audio.rb +1 -8
- data/app/models/alchemy/essence_date.rb +2 -9
- data/app/models/alchemy/essence_file.rb +1 -8
- data/app/models/alchemy/essence_flash.rb +0 -7
- data/app/models/alchemy/essence_html.rb +1 -8
- data/app/models/alchemy/essence_picture.rb +0 -11
- data/app/models/alchemy/essence_richtext.rb +4 -12
- data/app/models/alchemy/essence_text.rb +1 -13
- data/app/models/alchemy/essence_video.rb +1 -8
- data/app/models/alchemy/page.rb +28 -22
- data/app/models/alchemy/picture.rb +19 -0
- data/app/sweepers/alchemy/pages_sweeper.rb +17 -6
- data/app/sweepers/alchemy/pictures_sweeper.rb +1 -3
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +2 -2
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +1 -1
- data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +2 -2
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +13 -11
- data/app/views/alchemy/admin/attachments/create.js.erb +1 -1
- data/app/views/alchemy/admin/attachments/edit.html.erb +2 -2
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +1 -2
- data/app/views/alchemy/admin/elements/new.html.erb +1 -1
- data/app/views/alchemy/admin/essence_files/edit.html.erb +32 -32
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +29 -29
- data/app/views/alchemy/admin/essence_pictures/update.js.erb +13 -12
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +4 -1
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/edit.html.erb +8 -8
- data/app/views/alchemy/admin/pages/index.html.erb +1 -1
- data/app/views/alchemy/admin/pages/new.html.erb +1 -1
- data/app/views/alchemy/admin/pages/update.js.erb +19 -12
- data/app/views/alchemy/admin/pictures/_picture.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +8 -6
- data/app/views/alchemy/admin/pictures/show_in_window.html.erb +6 -1
- data/app/views/alchemy/admin/resources/_table.html.erb +1 -1
- data/app/views/alchemy/admin/users/_table.html.erb +13 -13
- data/app/views/alchemy/admin/users/_user.html.erb +1 -1
- data/app/views/alchemy/admin/users/index.html.erb +2 -2
- data/app/views/alchemy/elements/_contactform_view.html.erb +78 -78
- data/app/views/alchemy/elements/_download_editor.html.erb +1 -0
- data/app/views/alchemy/elements/_download_view.html.erb +3 -0
- data/app/views/alchemy/essences/_essence_date_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +1 -0
- data/app/views/alchemy/essences/_essence_file_view.html.erb +6 -2
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +3 -2
- data/app/views/alchemy/essences/_essence_picture_view.html.erb +1 -1
- data/app/views/alchemy/navigation/_link.html.erb +1 -2
- data/app/views/alchemy/notifications/admin_user_created.text.erb +7 -7
- data/app/views/alchemy/notifications/registered_user_created.text.erb +5 -5
- data/app/views/alchemy/user_sessions/login.html.erb +34 -35
- data/app/views/layouts/alchemy/login.html.erb +3 -8
- data/app/views/layouts/alchemy/pages.html.erb +1 -0
- data/bin/alchemy +43 -75
- data/config/alchemy/config.yml +10 -0
- data/config/alchemy/elements.yml +5 -0
- data/config/alchemy/page_layouts.yml +1 -1
- data/config/locales/alchemy.de.yml +21 -8
- data/config/locales/alchemy.en.yml +20 -4
- data/config/routes.rb +25 -20
- data/db/migrate/{20111116125112_namespace_models.rb → 20111116125112_namespace_alchemy_models.rb} +1 -1
- data/lib/alchemy/capistrano.rb +4 -17
- data/lib/alchemy/engine.rb +2 -0
- data/lib/alchemy/essence.rb +29 -41
- data/lib/alchemy/i18n.rb +1 -1
- data/lib/alchemy/mount_point.rb +10 -0
- data/lib/alchemy/page_layout.rb +7 -7
- data/lib/alchemy/seeder.rb +85 -47
- data/lib/alchemy/upgrader.rb +115 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +4 -3
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +6 -2
- data/lib/tasks/ferret.rake +12 -0
- data/lib/tasks/install.rake +16 -105
- data/lib/tasks/routes.rake +29 -0
- data/lib/tasks/upgrade.rake +5 -67
- data/spec/controllers/admin/pages_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +31 -0
- data/spec/factories.rb +24 -15
- data/spec/helpers/admin/base_helper_spec.rb +0 -7
- data/spec/helpers/pages_helper_spec.rb +54 -29
- data/spec/helpers/url_helpers_spec.rb +40 -0
- data/spec/integration/admin/pages_controller_spec.rb +3 -3
- data/spec/integration/pages_controller_spec.rb +80 -6
- data/spec/integration/security_spec.rb +2 -2
- data/spec/models/content_spec.rb +24 -0
- data/spec/models/page_spec.rb +174 -47
- data/spec/models/picture_spec.rb +54 -0
- data/spec/page_layout_spec.rb +2 -2
- data/spec/routing_spec.rb +205 -1
- data/spec/spec_helper.rb +53 -32
- metadata +51 -46
- data/lib/alchemy/file_utilz.rb +0 -73
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
desc 'Print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.'
|
|
2
|
+
task :routes => :environment do
|
|
3
|
+
Rails.application.reload_routes!
|
|
4
|
+
all_routes = Alchemy::Engine.routes.routes
|
|
5
|
+
|
|
6
|
+
if ENV['CONTROLLER']
|
|
7
|
+
all_routes = all_routes.select{ |route| route.defaults[:controller] == ENV['CONTROLLER'] }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
routes = all_routes.collect do |route|
|
|
11
|
+
|
|
12
|
+
reqs = route.requirements.dup
|
|
13
|
+
reqs[:to] = route.app unless route.app.class.name.to_s =~ /^ActionDispatch::Routing/
|
|
14
|
+
reqs = reqs.empty? ? "" : reqs.inspect
|
|
15
|
+
|
|
16
|
+
{:name => route.name.to_s, :verb => route.verb.to_s, :path => route.path, :reqs => reqs}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Skip the route if it's internal info route
|
|
20
|
+
routes.reject! { |r| r[:path] =~ %r{/rails/info/properties|^/assets} }
|
|
21
|
+
|
|
22
|
+
name_width = routes.map{ |r| r[:name].length }.max
|
|
23
|
+
verb_width = routes.map{ |r| r[:verb].length }.max
|
|
24
|
+
path_width = routes.map{ |r| r[:path].length }.max
|
|
25
|
+
|
|
26
|
+
routes.each do |r|
|
|
27
|
+
puts "#{r[:name].rjust(name_width)} #{r[:verb].ljust(verb_width)} #{r[:path].ljust(path_width)} #{r[:reqs]}"
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/tasks/upgrade.rake
CHANGED
|
@@ -1,72 +1,10 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../alchemy/upgrader.rb')
|
|
2
|
+
|
|
1
3
|
namespace :alchemy do
|
|
2
|
-
|
|
4
|
+
|
|
3
5
|
desc "Upgrades database to Alchemy CMS v#{Alchemy::VERSION}."
|
|
4
6
|
task :upgrade => :environment do
|
|
5
|
-
|
|
6
|
-
# invoke seed task
|
|
7
|
-
Rake::Task['db:seed'].invoke
|
|
8
|
-
|
|
9
|
-
# Creates Language model if it does not exist (Alchemy CMS prior v1.5)
|
|
10
|
-
# Also creates missing associations between pages and languages
|
|
11
|
-
Alchemy::Page.all.each do |page|
|
|
12
|
-
if !page.language_code.blank? && page.language.nil?
|
|
13
|
-
root = page.get_language_root
|
|
14
|
-
lang = Alchemy::Language.find_or_create_by_code(
|
|
15
|
-
:name => page.language_code.capitalize,
|
|
16
|
-
:code => page.language_code,
|
|
17
|
-
:frontpage_name => root.name,
|
|
18
|
-
:page_layout => root.page_layout,
|
|
19
|
-
:public => true
|
|
20
|
-
)
|
|
21
|
-
page.language = lang
|
|
22
|
-
if page.save(:validate => false)
|
|
23
|
-
puts "== Set language for page #{page.name} to #{lang.name}"
|
|
24
|
-
end
|
|
25
|
-
else
|
|
26
|
-
puts "== Skipping! Language for page #{page.name} already set."
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
default_language = Alchemy::Language.get_default
|
|
30
|
-
Alchemy::Page.layoutpages.each do |page|
|
|
31
|
-
if page.language.class == String || page.language.nil?
|
|
32
|
-
page.language = default_language
|
|
33
|
-
if page.save(:validate => false)
|
|
34
|
-
puts "== Set language for page #{page.name} to #{default_language.name}"
|
|
35
|
-
end
|
|
36
|
-
else
|
|
37
|
-
puts "== Skipping! Language for page #{page.name} already set."
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
(Alchemy::EssencePicture.all + Alchemy::EssenceText.all).each do |essence|
|
|
41
|
-
case essence.link_target
|
|
42
|
-
when '1'
|
|
43
|
-
if essence.update_attribute(:link_target, 'blank')
|
|
44
|
-
puts "== Updated #{essence.preview_text} link target to #{essence.link_target}."
|
|
45
|
-
end
|
|
46
|
-
when '0'
|
|
47
|
-
essence.update_attribute(:link_target, nil)
|
|
48
|
-
puts "== Updated #{essence.preview_text} link target to #{essence.link_target.inspect}."
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Updates all essence_type of Content if not already namespaced.
|
|
53
|
-
depricated_contents = Alchemy::Content.where("essence_type LIKE ?", "Essence%")
|
|
54
|
-
if depricated_contents.any?
|
|
55
|
-
success = 0
|
|
56
|
-
errors = []
|
|
57
|
-
depricated_contents.each do |c|
|
|
58
|
-
if c.update_attribute(:essence_type, c.essence_type.gsub(/^Essence/, 'Alchemy::Essence'))
|
|
59
|
-
success += 1
|
|
60
|
-
else
|
|
61
|
-
errors << c.errors.full_messages
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
puts "== Namespaced #{success} Essence-Types." if success > 0
|
|
65
|
-
puts "!! #{errors.count} errors while namespacing Essence-Types.\n#{errors.join('\n')}" if errors.count > 0
|
|
66
|
-
else
|
|
67
|
-
puts "== Skipping! Already namespaced Essence-Types"
|
|
68
|
-
end
|
|
69
|
-
|
|
7
|
+
Alchemy::Upgrader.run!
|
|
70
8
|
end
|
|
71
9
|
|
|
72
|
-
end
|
|
10
|
+
end
|
|
@@ -99,4 +99,35 @@ describe Alchemy::PagesController do
|
|
|
99
99
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
|
+
describe "url nesting" do
|
|
103
|
+
|
|
104
|
+
before(:each) do
|
|
105
|
+
@catalog = Factory(:public_page, :name => "Catalog", :parent_id => @default_language_root.id, :language => @default_language)
|
|
106
|
+
@products = Factory(:public_page, :name => "Products", :parent_id => @catalog.id, :language => @default_language)
|
|
107
|
+
@product = Factory(:public_page, :name => "Screwdriver", :parent_id => @products.id, :language => @default_language)
|
|
108
|
+
@product.elements.find_by_name('article').contents.essence_texts.first.essence.update_attribute(:body, 'screwdriver')
|
|
109
|
+
controller.stub!(:configuration) { |arg| arg == :url_nesting ? true : false }
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
context "with correct levelnames in params" do
|
|
113
|
+
|
|
114
|
+
it "should show the requested page" do
|
|
115
|
+
get :show, {:level1 => 'catalog', :level2 => 'products', :urlname => 'screwdriver'}
|
|
116
|
+
response.status.should == 200
|
|
117
|
+
response.body.should have_content("screwdriver")
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
context "with incorrect levelnames in params" do
|
|
123
|
+
|
|
124
|
+
it "should show 404 page" do
|
|
125
|
+
get :show, {:level1 => 'catalog', :level2 => 'faqs', :urlname => 'screwdriver'}
|
|
126
|
+
response.status.should == 404
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
|
|
102
133
|
end
|
data/spec/factories.rb
CHANGED
|
@@ -34,33 +34,42 @@ FactoryGirl.define do
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
factory :page, :class => 'Alchemy::Page' do
|
|
37
|
+
|
|
37
38
|
language { Alchemy::Language.find_by_code('kl') || Factory(:language) }
|
|
38
39
|
name "A Page"
|
|
39
40
|
parent_id { Factory(:language_root_page).id }
|
|
40
41
|
page_layout "standard"
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
factory :language_root_page do
|
|
44
|
+
name 'Klingonian'
|
|
45
|
+
page_layout 'intro'
|
|
46
|
+
language_root true
|
|
47
|
+
public true
|
|
48
|
+
parent_id { Alchemy::Page.root.id }
|
|
49
|
+
end
|
|
49
50
|
|
|
50
51
|
factory :public_page do
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
name "A Public Page"
|
|
53
|
+
public true
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
factory :systempage do
|
|
57
|
+
name "Systempage"
|
|
58
|
+
parent_id { Alchemy::Page.root.id }
|
|
59
|
+
language_root false
|
|
60
|
+
page_layout nil
|
|
61
|
+
language nil
|
|
62
|
+
end
|
|
54
63
|
|
|
55
64
|
end
|
|
56
|
-
|
|
65
|
+
|
|
57
66
|
factory :cell, :class => 'Alchemy::Cell' do
|
|
58
67
|
page { Alchemy::Page.find_by_language_root(true) || Factory(:language_root_page) }
|
|
59
68
|
name "A Cell"
|
|
60
69
|
end
|
|
61
|
-
|
|
70
|
+
|
|
62
71
|
factory :element, :class => 'Alchemy::Element' do
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
name 'article'
|
|
73
|
+
end
|
|
74
|
+
|
|
66
75
|
end
|
|
@@ -38,11 +38,4 @@ describe Alchemy::Admin::BaseHelper do
|
|
|
38
38
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
context "modules" do
|
|
42
|
-
it "should render main navi entries for all core modules" do
|
|
43
|
-
pending 'Do not know how to test helpers defined as helper_method in controller'
|
|
44
|
-
helper.admin_main_navigation.should have_selector('a.main_navi_entry')
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
41
|
end
|
|
@@ -3,30 +3,61 @@ require 'spec_helper'
|
|
|
3
3
|
include Alchemy::BaseHelper
|
|
4
4
|
|
|
5
5
|
describe Alchemy::PagesHelper do
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
before(:each) do
|
|
8
|
+
helper.stub(:configuration).and_return(false)
|
|
9
|
+
end
|
|
10
|
+
|
|
7
11
|
it "should render the current page layout" do
|
|
8
12
|
@page = Factory(:public_page)
|
|
9
|
-
helper.stub(:configuration).and_return(true)
|
|
10
13
|
render_page_layout.should have_selector('div#content')
|
|
11
14
|
end
|
|
12
15
|
|
|
13
16
|
describe "#render_navigation" do
|
|
14
|
-
|
|
17
|
+
|
|
18
|
+
before(:each) do
|
|
15
19
|
@language = Alchemy::Language.get_default
|
|
16
20
|
@root_page = Factory(:language_root_page, :language => @language, :name => 'Home')
|
|
17
21
|
@page = Factory(:public_page, :language => @language, :parent_id => @root_page.id, :visible => true)
|
|
18
|
-
helper.stub(:multi_language?).and_return(false)
|
|
19
|
-
helper.render_navigation.should have_selector('ul.navigation_level_1 li.a-public-page.active.last a.active[href="/alchemy/a-public-page"]')
|
|
20
22
|
end
|
|
23
|
+
|
|
24
|
+
context "not in multi_language mode" do
|
|
25
|
+
|
|
26
|
+
before(:each) do
|
|
27
|
+
helper.stub(:multi_language?).and_return(false)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should render the page navigation" do
|
|
31
|
+
helper.render_navigation.should have_selector('ul.navigation_level_1 li.a-public-page.active.last a.active[href="/alchemy/a-public-page"]')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "with enabled url nesting" do
|
|
35
|
+
|
|
36
|
+
before(:each) do
|
|
37
|
+
helper.stub!(:configuration).and_return(true)
|
|
38
|
+
@level2 = Factory(:public_page, :parent_id => @page.id, :language => @language, :name => 'Level 2', :visible => true)
|
|
39
|
+
@page = Factory(:public_page, :parent_id => @level2.id, :language => @language, :name => 'Nested Page', :visible => true)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should render nested page links" do
|
|
43
|
+
helper.render_navigation(:all_sub_menues => true).should have_selector('ul li a[href="/alchemy/a-public-page/level-2/nested-page"]')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
21
50
|
end
|
|
22
51
|
|
|
23
52
|
describe "#render_breadcrumb" do
|
|
24
53
|
|
|
25
54
|
before(:each) do
|
|
26
55
|
helper.stub(:multi_language?).and_return(false)
|
|
56
|
+
@root = mock_model('Page', :urlname => 'root', :name => 'Root', :title => 'Root', :visible? => false, :public? => false, :restricted? => false)
|
|
27
57
|
@language_root = mock_model('Page', :urlname => 'language_root', :name => 'Language Root', :title => 'Language Root', :visible? => true, :public? => true, :restricted? => false)
|
|
28
58
|
@page = mock_model('Page', :urlname => 'a-public-page', :name => 'A Public Page', :title => 'A Public Page', :visible? => true, :public? => true, :restricted? => false)
|
|
29
|
-
@
|
|
59
|
+
@root.should_receive(:parent).and_return(nil)
|
|
60
|
+
@language_root.should_receive(:parent).and_return(@root)
|
|
30
61
|
@page.should_receive(:parent).and_return(@language_root)
|
|
31
62
|
end
|
|
32
63
|
|
|
@@ -227,12 +258,11 @@ describe Alchemy::PagesHelper do
|
|
|
227
258
|
@default_language = Alchemy::Language.get_default
|
|
228
259
|
@klingonian = Factory(:language)
|
|
229
260
|
# simulates link_to_public_child = true
|
|
230
|
-
helper.stub(:configuration).and_return(true)
|
|
231
261
|
helper.stub(:multi_language?).and_return(true)
|
|
262
|
+
helper.stub(:configuration) { |arg| arg == :redirect_to_public_child ? true : false }
|
|
232
263
|
end
|
|
233
264
|
|
|
234
265
|
it "should return nil when having only one public language" do
|
|
235
|
-
helper.stub(:configuration).and_return(true)
|
|
236
266
|
helper.language_switcher.should be nil
|
|
237
267
|
end
|
|
238
268
|
|
|
@@ -242,37 +272,32 @@ describe Alchemy::PagesHelper do
|
|
|
242
272
|
@default_language_root = Factory(:language_root_page, :language => @default_language, :name => 'Default Language Root')
|
|
243
273
|
@klingonian_language_root = Factory(:language_root_page)
|
|
244
274
|
end
|
|
245
|
-
|
|
275
|
+
|
|
246
276
|
context "and config redirect_to_public_child is set to TRUE" do
|
|
247
|
-
|
|
248
|
-
before :each do
|
|
249
|
-
# simulates link_to_public_child = true
|
|
250
|
-
helper.stub(:configuration).and_return(true)
|
|
251
|
-
end
|
|
252
|
-
|
|
277
|
+
|
|
253
278
|
it "should return nil if only one language_root is public and both do not have children" do
|
|
254
279
|
@klingonian_language_root.update_attributes(:public => false)
|
|
255
280
|
helper.language_switcher.should == nil
|
|
256
281
|
end
|
|
257
|
-
|
|
282
|
+
|
|
258
283
|
it "should return nil if only one language_root is public and both have none public children" do
|
|
259
284
|
@klingonian_language_root.update_attributes(:public => false)
|
|
260
285
|
@default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => false, :name => "child1")
|
|
261
286
|
@klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => false, :name => "child1")
|
|
262
287
|
helper.language_switcher.should == nil
|
|
263
288
|
end
|
|
264
|
-
|
|
289
|
+
|
|
265
290
|
it "should render two links when having two public language_root pages" do
|
|
266
291
|
helper.language_switcher.should have_selector('a', :count => 2)
|
|
267
292
|
end
|
|
268
|
-
|
|
293
|
+
|
|
269
294
|
it "should render two links when having just one public language_root but a public children in both language_roots" do
|
|
270
295
|
@klingonian_language_root.update_attributes(:public => false)
|
|
271
296
|
@default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
|
|
272
297
|
@klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
|
|
273
298
|
helper.language_switcher.should have_selector('a', :count => 2)
|
|
274
299
|
end
|
|
275
|
-
|
|
300
|
+
|
|
276
301
|
it "should render two links when having two not public language_roots but a public children in both" do
|
|
277
302
|
@default_language_root.update_attributes(:public => false)
|
|
278
303
|
@klingonian_language_root.update_attributes(:public => false)
|
|
@@ -280,7 +305,7 @@ describe Alchemy::PagesHelper do
|
|
|
280
305
|
@klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
|
|
281
306
|
helper.language_switcher.should have_selector('a', :count => 2)
|
|
282
307
|
end
|
|
283
|
-
|
|
308
|
+
|
|
284
309
|
it "should return nil when having two not public language_roots and a public children in only one of them" do
|
|
285
310
|
@default_language_root.update_attributes(:public => false)
|
|
286
311
|
@klingonian_language_root.update_attributes(:public => false)
|
|
@@ -288,27 +313,27 @@ describe Alchemy::PagesHelper do
|
|
|
288
313
|
@klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
|
|
289
314
|
helper.language_switcher.should == nil
|
|
290
315
|
end
|
|
291
|
-
|
|
316
|
+
|
|
292
317
|
end
|
|
293
|
-
|
|
318
|
+
|
|
294
319
|
context "and config redirect_to_public_child is set to FALSE" do
|
|
295
|
-
|
|
320
|
+
|
|
296
321
|
before :each do
|
|
297
322
|
# simulates link_to_public_child = false
|
|
298
323
|
helper.stub(:configuration).and_return(false)
|
|
299
324
|
end
|
|
300
|
-
|
|
325
|
+
|
|
301
326
|
it "should render two links when having two public language_root pages" do
|
|
302
327
|
helper.language_switcher.should have_selector('a', :count => 2)
|
|
303
328
|
end
|
|
304
|
-
|
|
329
|
+
|
|
305
330
|
it "should render nil when having just one public language_root but a public children in both language_roots" do
|
|
306
331
|
@klingonian_language_root.update_attributes(:public => false)
|
|
307
332
|
@default_first_public_child = Factory(:page, :language => @default_language, :parent_id => @default_language_root.id, :public => true, :name => "child1")
|
|
308
333
|
@klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
|
|
309
334
|
helper.language_switcher.should == nil
|
|
310
335
|
end
|
|
311
|
-
|
|
336
|
+
|
|
312
337
|
it "should render nil when having two not public language_roots but a public children in both" do
|
|
313
338
|
@default_language_root.update_attributes(:public => false)
|
|
314
339
|
@klingonian_language_root.update_attributes(:public => false)
|
|
@@ -316,11 +341,11 @@ describe Alchemy::PagesHelper do
|
|
|
316
341
|
@klingonian_first_public_child = Factory(:page, :language => @klingonian, :parent_id => @klingonian_language_root.id, :public => true, :name => "child1")
|
|
317
342
|
helper.language_switcher.should == nil
|
|
318
343
|
end
|
|
319
|
-
|
|
344
|
+
|
|
320
345
|
end
|
|
321
|
-
|
|
346
|
+
|
|
322
347
|
end
|
|
323
|
-
|
|
348
|
+
|
|
324
349
|
end
|
|
325
350
|
|
|
326
351
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "URL generating" do
|
|
4
|
+
|
|
5
|
+
it "should generate a url string for cropped picture" do
|
|
6
|
+
p = show_picture_path(:id => 3, :crop => "crop", :size => "100x33", :name => "kitten", :format => "jpg")
|
|
7
|
+
p.should == "/alchemy/pictures/3/show/100x33/crop/kitten.jpg"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should generate a url string for cropped and masked picture" do
|
|
11
|
+
p = show_picture_path(:id => 3, :crop => "crop", :crop_from => "0x0", :crop_size => "900x300", :size => "100x33", :name => "kitten", :format => :jpg)
|
|
12
|
+
p.should == "/alchemy/pictures/3/show/100x33/crop/0x0/900x300/kitten.jpg"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should generate a url string for picture with default format" do
|
|
16
|
+
p = show_picture_path(:id => 3, :size => "100x33", :name => 'kitten')
|
|
17
|
+
p.should == "/alchemy/pictures/3/show/100x33/kitten.#{Alchemy::Config.get(:image_output_format)}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should generate a url string for cropped thumbnail" do
|
|
21
|
+
p = thumbnail_path(:id => 3, :crop => "crop", :size => "100x33", :name => "kitten", :format => :jpg)
|
|
22
|
+
p.should == "/alchemy/pictures/3/thumbnails/100x33/crop/kitten.jpg"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should generate a url string for thumbnail with default name and format" do
|
|
26
|
+
p = thumbnail_path(:id => 3, :size => "100x33")
|
|
27
|
+
p.should == "/alchemy/pictures/3/thumbnails/100x33/thumbnail.png"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should generate a url string for cropped and masked thumbnail" do
|
|
31
|
+
p = thumbnail_path(:id => 3, :crop_from => "0x0", :crop_size => "900x300", :size => "100x33", :name => "kitten", :format => :jpg)
|
|
32
|
+
p.should == "/alchemy/pictures/3/thumbnails/100x33/0x0/900x300/kitten.jpg"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should generate a url string for zoomed image" do
|
|
36
|
+
p = zoom_picture_path(:id => 3, :name => "kitten", :format => :jpg)
|
|
37
|
+
p.should == "/alchemy/pictures/3/zoom/kitten.jpg"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -77,9 +77,9 @@ end
|
|
|
77
77
|
# We need this, because the before blocks losing its session under webkit-capybara (https://github.com/thoughtbot/capybara-webkit/issues/222)
|
|
78
78
|
def login_to_alchemy
|
|
79
79
|
visit '/alchemy/admin/login'
|
|
80
|
-
fill_in('
|
|
81
|
-
fill_in('
|
|
82
|
-
click_on('
|
|
80
|
+
fill_in('Username', :with => 'jdoe')
|
|
81
|
+
fill_in('Password', :with => 's3cr3t')
|
|
82
|
+
click_on('login')
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
end
|