make locomotive work with bushido + refactor some portions of code (routing constraints, ...etc) + fix broken tests

This commit is contained in:
did 2011-04-25 01:21:38 +02:00
parent 09bd73c7ac
commit b58e49fce2
31 changed files with 113 additions and 135 deletions

View File

@ -23,8 +23,7 @@ gem 'locomotive_carrierwave', '0.5.0.1.beta3', :require => 'carrierwave'
gem 'custom_fields', '1.0.0.beta.9'
gem 'fog', '0.3.7'
gem 'mimetype-fu'
gem 'actionmailer-with-request', :git => 'git://github.com/weppos/actionmailer_with_request.git'
#:git => 'git://github.com/eric1234/actionmailer_with_request.git'
gem 'actionmailer_with_request', :git => 'git://github.com/weppos/actionmailer_with_request.git' #, :require => 'actionmailer_with_request'
gem 'heroku', '1.19.1' # '1.18.2'
gem 'bushido'
gem 'httparty', '>= 0.6.1'

View File

@ -6,9 +6,9 @@ GIT
GIT
remote: git://github.com/weppos/actionmailer_with_request.git
revision: c1f18f4541554367fe5910fc1bc8caecd7d09682
revision: 93aac62e8551405c966d0f7876bbb534ce472c17
specs:
actionmailer-with-request (0.3.0)
actionmailer_with_request (0.3.0)
rails (>= 3)
GIT
@ -29,12 +29,12 @@ GEM
SystemTimer (1.2.3)
ZenTest (4.5.0)
abstract (1.0.0)
actionmailer (3.0.6)
actionpack (= 3.0.6)
actionmailer (3.0.7)
actionpack (= 3.0.7)
mail (~> 2.2.15)
actionpack (3.0.6)
activemodel (= 3.0.6)
activesupport (= 3.0.6)
actionpack (3.0.7)
activemodel (= 3.0.7)
activesupport (= 3.0.7)
builder (~> 2.1.2)
erubis (~> 2.6.6)
i18n (~> 0.5.0)
@ -42,19 +42,19 @@ GEM
rack-mount (~> 0.6.14)
rack-test (~> 0.5.7)
tzinfo (~> 0.3.23)
activemodel (3.0.6)
activesupport (= 3.0.6)
activemodel (3.0.7)
activesupport (= 3.0.7)
builder (~> 2.1.2)
i18n (~> 0.5.0)
activerecord (3.0.6)
activemodel (= 3.0.6)
activesupport (= 3.0.6)
activerecord (3.0.7)
activemodel (= 3.0.7)
activesupport (= 3.0.7)
arel (~> 2.0.2)
tzinfo (~> 0.3.23)
activeresource (3.0.6)
activemodel (= 3.0.6)
activesupport (= 3.0.6)
activesupport (3.0.6)
activeresource (3.0.7)
activemodel (= 3.0.7)
activesupport (= 3.0.7)
activesupport (3.0.7)
archive-tar-minitar (0.5.2)
arel (2.0.9)
autotest (4.4.6)
@ -96,8 +96,8 @@ GEM
activesupport (>= 3.0.4)
locomotive_carrierwave
mongoid (~> 2.0.0.rc.7)
daemons (1.1.2)
database_cleaner (0.6.6)
daemons (1.1.3)
database_cleaner (0.6.7)
delayed_job (2.1.4)
activesupport (~> 3.0)
daemons
@ -110,7 +110,7 @@ GEM
diff-lcs (1.1.2)
erubis (2.6.6)
abstract (>= 1.0.0)
excon (0.6.1)
excon (0.6.2)
factory_girl (1.3.3)
factory_girl_rails (1.0.1)
factory_girl (~> 1.3)
@ -141,7 +141,7 @@ GEM
launchy (~> 0.3.2)
rest-client (>= 1.4.0, < 1.7.0)
highline (1.6.1)
httparty (0.7.4)
httparty (0.7.7)
crack (= 0.1.8)
i18n (0.5.0)
inherited_resources (1.1.2)
@ -168,7 +168,7 @@ GEM
locomotive_liquid (2.2.2)
locomotive_mongoid_acts_as_tree (0.1.5.5)
mongoid (~> 2.0.0.rc.7)
mail (2.2.15)
mail (2.2.17)
activesupport (>= 2.3.6)
i18n (>= 0.4.0)
mime-types (~> 1.16)
@ -196,17 +196,17 @@ GEM
rack (>= 1.0.0)
rack-test (0.5.7)
rack (>= 1.0)
rails (3.0.6)
actionmailer (= 3.0.6)
actionpack (= 3.0.6)
activerecord (= 3.0.6)
activeresource (= 3.0.6)
activesupport (= 3.0.6)
rails (3.0.7)
actionmailer (= 3.0.7)
actionpack (= 3.0.7)
activerecord (= 3.0.7)
activeresource (= 3.0.7)
activesupport (= 3.0.7)
bundler (~> 1.0)
railties (= 3.0.6)
railties (3.0.6)
actionpack (= 3.0.6)
activesupport (= 3.0.6)
railties (= 3.0.7)
railties (3.0.7)
actionpack (= 3.0.7)
activesupport (= 3.0.7)
rake (>= 0.8.7)
thor (~> 0.14.4)
rake (0.8.7)
@ -246,7 +246,7 @@ GEM
rubyzip (0.9.4)
s3 (0.3.8)
proxies (~> 0.2.0)
selenium-webdriver (0.1.4)
selenium-webdriver (0.2.0)
childprocess (>= 0.1.7)
ffi (>= 1.0.7)
json_pure
@ -258,7 +258,7 @@ GEM
polyglot (>= 0.3.1)
trollop (1.16.2)
tzinfo (0.3.26)
unicorn (3.5.0)
unicorn (3.6.0)
kgio (~> 2.3)
rack
warden (0.10.7)
@ -274,7 +274,7 @@ DEPENDENCIES
RedCloth (= 4.2.7)
SystemTimer
ZenTest
actionmailer-with-request!
actionmailer_with_request!
autotest
bson_ext (~> 1.3.0)
bushido

View File

@ -13,7 +13,7 @@ module Admin
before_filter :set_locale
helper_method :sections
helper_method :sections, :current_site_url, :site_url, :page_url
# https://rails.lighthouseapp.com/projects/8994/tickets/1905-apphelpers-within-plugin-not-being-mixed-in
Dir[File.dirname(__FILE__) + "/../../helpers/**/*_helper.rb"].each do |file|
@ -52,5 +52,31 @@ module Admin
I18n.locale = current_admin.locale rescue Locomotive.config.default_locale
end
# ___ site/page urls builder ___
def current_site_url
request.protocol + request.host_with_port
end
def site_url(site, options = {})
options = { :fullpath => true, :protocol => true }.merge(options)
url = "#{site.subdomain}.#{Locomotive.config.domain}"
url += ":#{request.port}" if request.port != 80
url = File.join(url, request.fullpath) if options[:fullpath]
url = "http://#{url}" if options[:protocol]
url
end
def page_url(page, options = {})
if content = options.delete(:content)
File.join(current_site_url, page.fullpath.gsub('content_type_template', ''), content._slug)
else
File.join(current_site_url, page.fullpath)
end
end
end
end

View File

@ -22,10 +22,10 @@ module Admin
end
def new_host_if_subdomain_changed
if !Locomotive.config.multi_sites? || @site.domains.include?(request.host)
if !Locomotive.config.manage_subdomain? || @site.domains.include?(request.host)
{}
else
{ :host => "#{@site.subdomain}.#{Locomotive.config.default_domain}:#{request.port}" }
{ :host => site_url(@site, { :fullpath => false, :protocol => false }) }
end
end

View File

@ -52,6 +52,7 @@ module Admin
redirect_to last_url
else
logger.error "Unable to create the first website: #{@site.errors.inspect}"
render 'step_2'
end
end

View File

@ -35,7 +35,7 @@ module Admin
def get_path
page = current_site.pages.build(:parent => current_site.pages.find(params[:parent_id]), :slug => params[:slug].slugify)
render :json => { :url => page.url, :slug => page.slug }
render :json => { :url => page_url(page), :slug => page.slug }
end
end

View File

@ -15,5 +15,9 @@ module Admin
admin_pages_url
end
def after_sign_out_path_for(resource)
request.protocol + request.host_with_port
end
end
end

View File

@ -1,14 +1,12 @@
module Admin
class SitemapsController < ActionController::Base
class SitemapsController < BaseController
include Locomotive::Routing::SiteDispatcher
skip_before_filter :authenticate_admin!, :validate_site_membership, :set_locale
before_filter :require_site
respond_to :xml
helper 'admin/pages'
def show
@pages = current_site.pages.published
end

View File

@ -1,23 +1,5 @@
module Admin::PagesHelper
def page_main_url(page, options = {})
if options[:host]
url = "http://#{request.host}"
elsif page.site.domains.empty?
url = main_site_url(page.site)
else
url = "http://#{current_site.domains.first}"
end
url += ":#{request.port}" if request.port != 80
if content = options.delete(:content)
File.join(url, page.fullpath.gsub('content_type_template', ''), content._slug)
else
File.join(url, page.fullpath)
end
end
def parent_pages_options
roots = current_site.pages.roots.where(:slug.ne => '404').and(:_id.ne => @page.id)

View File

@ -6,18 +6,6 @@ module Admin::SitesHelper
domain
end
def main_site_url(site = current_site, options = {})
# TODO: to be refactored
if multi_sites?
url = "http://#{site.subdomain}.#{Locomotive.config.domain}"
url += ":#{request.port}" if request.port != 80
else
url = "#{request.protocol}#{request.host_with_port}"
end
url = File.join(url, request.fullpath) if options.has_key?(:uri) && options[:uri]
url
end
def error_on_domain(site, name)
if (error = (site.errors[:domains] || []).detect { |n| n.include?(name) })
content_tag(:span, error, :class => 'inline-errors')

View File

@ -74,10 +74,6 @@ class Page
end
end
def url
"http://#{self.site.domains.first}/#{self.fullpath}.html"
end
def with_cache?
self.cache_strategy != 'none'
end

View File

@ -8,10 +8,6 @@ class AssetUploader < CarrierWave::Uploader::Base
self.build_store_dir('sites', model.collection.site_id, 'assets', model.id)
end
# def cache_dir
# "#{Rails.root}/tmp/uploads"
# end
version :thumb, :if => :image? do
process :resize_to_fill => [50, 50]
process :convert => 'png'

View File

@ -2,16 +2,12 @@ class ThemeUploader < ::CarrierWave::Uploader::Base
def store_dir
if Locomotive.config.delayed_job
self.build_store_dir('sites', model.id, 'tmp', 'themes')
self.build_store_dir('sites', model.id.to_s, 'tmp', 'themes')
else
"#{Rails.root}/tmp/themes"
end
end
# def cache_dir
# "#{Rails.root}/tmp/uploads"
# end
def extension_white_list
%w(zip)
end

View File

@ -8,6 +8,7 @@
= semantic_form_for(@site, :url => admin_installation_step_url(2), :html => { :multipart => true }) do |f|
.inner
%p.explanations
!= t('.explanations')

View File

@ -26,7 +26,7 @@
= f.foldable_inputs :name => :sites, :class => 'sites off' do
- @account.sites.each do |site|
%li{ :class => 'item' }
%strong= link_to site.name, main_site_url(site, :uri => true)
%strong= link_to site.name, site_url(site)
%em= site.domains.join(', ')
- if admin_on?(site) && site != current_site

View File

@ -9,7 +9,7 @@
- if not @page.index? and not @page.not_found?
= f.input :parent_id, :as => :select, :collection => parent_pages_options, :include_blank => false
= f.input :slug, :required => false, :hint => @page.slug.blank? ? '&nbsp;' : @page.url, :input_html => { :data_url => get_path_admin_pages_url, :disabled => @page.index? || @page.not_found? }, :wrapper_html => { :style => "#{'display: none' if @page.templatized?}; height: 50px" }
= f.input :slug, :required => false, :hint => @page.slug.blank? ? '&nbsp;' : page_url(@page), :input_html => { :data_url => get_path_admin_pages_url, :disabled => @page.index? || @page.not_found? }, :wrapper_html => { :style => "#{'display: none' if @page.templatized?}; height: 50px" }
= f.foldable_inputs :name => :advanced_options do

View File

@ -9,6 +9,6 @@
#global-actions-bar
!= t('.welcome', :name => link_to(current_admin.name, edit_admin_my_account_url))
%span= '|'
= link_to t('.see'), main_site_url
= link_to t('.see'), current_site_url
%span= '|'
= link_to t('.logout'), destroy_admin_session_url, :confirm => t('admin.messages.confirm')

View File

@ -2,7 +2,7 @@ xml.instruct!
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
xml.url do
xml.loc "http://#{request.host}#{":#{request.port}" if request.port != 80}"
xml.loc current_site_url
xml.priority 1.0
end
@ -12,14 +12,14 @@ xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
page.content_type.contents.visible.each do |c|
xml.url do
xml.loc page_main_url(page, { :content => c, :host => true })
xml.loc page_url(page, { :content => c, :host => true })
xml.lastmod c.updated_at.to_date.to_s('%Y-%m-%d')
xml.priority 0.9
end
end
else
xml.url do
xml.loc page_main_url(page, { :host => true })
xml.loc page_url(page, { :host => true })
xml.lastmod page.updated_at.to_date.to_s('%Y-%m-%d')
xml.priority 0.9
end

View File

@ -20,7 +20,7 @@ CarrierWave.configure do |config|
when :production
if Locomotive.bushido?
config.storage = :file
config.root = File.join(Rails.root, 'public', 'store')
config.root = File.join(Rails.root, 'public')
config.store_dir = 'store'
else
config.storage = :s3

View File

@ -7,16 +7,16 @@ Locomotive.configure do |config|
# your own domain name (ex: locomotivehosting.com).
#
# Ex:
# config.multi_sites do |multi_sites|
# # each new website you add will have a default entry based on a subdomain
# # and the multi_site_domain value (ex: website_1.locomotivehosting.com).
# multi_sites.domain = 'example.com' #'myhostingplatform.com'
#
# # define the reserved subdomains
# # Ex:
# multi_sites.reserved_subdomains = %w(www admin email blog webmail mail support help site sites)
# end
config.multi_sites = false
config.multi_sites do |multi_sites|
# each new website you add will have a default entry based on a subdomain
# and the multi_site_domain value (ex: website_1.locomotivehosting.com).
multi_sites.domain = 'example.com' #'myhostingplatform.com'
# define the reserved subdomains
# Ex:
multi_sites.reserved_subdomains = %w(www admin email blog webmail mail support help site sites)
end
# config.multi_sites = false
# configure the hosting target for the production environment. Locomotive can be installed in:
# - your own server
@ -44,7 +44,7 @@ Locomotive.configure do |config|
config.delayed_job = false
# configure how many items we display in sub menu in the "Contents" section.
config.lastest_items_nb = 5
# config.lastest_items_nb = 5
# default locale (for now, only en, de, fr and pt-BR are supported)
config.default_locale = :en
@ -60,4 +60,4 @@ Locomotive.configure do |config|
# config.mailer_sender = 'support'
# # => 'support@heroku.com' (Heroku), 'support@bushi.do' (Bushido), 'support@example.com' (Dev) or 'support@<your_hosting_platform>' (Multi-sites)
config.mailer_sender = 'support'
end unless Locomotive.engine?
end unless Locomotive.engine? || Rails.env.test?

View File

@ -1,10 +1,6 @@
# Locomotive::Application.routes.draw do |map|
Rails.application.routes.draw do
constraints(Locomotive::Routing::DefaultConstraint) do
root :to => 'admin/sessions#new'
end
# admin authentication
devise_for :admin, :class_name => 'Account', :controllers => { :sessions => 'admin/sessions', :passwords => 'admin/passwords' }

View File

@ -42,7 +42,7 @@ Locomotive.configure do |config|
config.delayed_job = false
# configure how many items we display in sub menu in the "Contents" section.
config.lastest_items_nb = 5
# config.lastest_items_nb = 5
# default locale (for now, only en, de, fr and pt-BR are supported)
config.default_locale = :en

View File

@ -37,15 +37,13 @@ module CarrierWave
class Base
# alias :super_store_dir :store_dir
def build_store_dir(*args)
default_dir = self.class.store_dir
if default_dir.blank? || default_dir == 'uploads'
File.join(args)
File.join(args.map(&:to_s))
else
File.join([default_dir] + args)
File.join([default_dir] + args.map(&:to_s))
end
end

View File

@ -15,7 +15,8 @@ module Locomotive
:default_locale => :en,
:mailer_sender => 'support', #support@example.com'
:manage_subdomain => false,
:manage_manage_domains => false
:manage_manage_domains => false,
:lastest_items_nb => 5
}
cattr_accessor :settings

View File

@ -41,7 +41,7 @@ module Locomotive
def add_bushido_domain(name)
Locomotive.logger "[add bushido domain] #{name}"
::Bushido::App.add_domain(name)
if ::Bushido::Command.last_command_successful?
self.bushido_domains << name
end
@ -50,7 +50,7 @@ module Locomotive
def remove_bushido_domain(name)
Locomotive.logger "[remove bushido domain] #{name}"
::Bushido::App.remove_domain(name)
if ::Bushido::Command.last_command_successful?
self.bushido_domains.delete(name)
end

View File

@ -31,10 +31,12 @@ module Locomotive
def add_subdomain_to_domains_with_bushido
unless self.domains_change.nil?
old_full_subdomain = "#{self.subdomain_was}.#{Locomotive.config.domain}"
full_subdomain = "#{self.subdomain}.#{Locomotive.config.domain}"
@bushido_domains_change = {
:added => self.domains_change.last - self.domains_change.first - [full_subdomain],
:removed => self.domains_change.first - self.domains_change.last - [full_subdomain]
:added => self.domains_change.last - self.domains_change.first - [old_full_subdomain] - [full_subdomain],
:removed => self.domains_change.first - self.domains_change.last - [old_full_subdomain] - [full_subdomain]
}
end

View File

@ -80,6 +80,11 @@ module Locomotive
when 'file' then self.open_sample_asset(value)
when 'boolean' then Boolean.set(value)
when 'date' then Date.parse(value)
when 'category'
if field.category_items.detect { |item| item.name == value }.nil?
field.category_items.build :name => value
end
value
else
value
end)

View File

@ -79,6 +79,7 @@ module Mongoid #:nodoc:
# limit for embedded collections ?
if limits && limits.size > 0
limits.each do |field, limit|
next if limit.blank?
options[:fields][field] = { '$slice' => limit }
end
end

View File

@ -44,11 +44,11 @@ describe Locomotive::Liquid::Filters::Html do
javascript_tag('/trash/main.js').should == result
javascript_tag('/trash/main').should == result
end
it 'should return an image tag for a given theme file without parameters' do
theme_image_tag('foo.jpg').should == "<img src=\"/sites/000000000000000000000042/theme/images/foo.jpg\" />"
end
it 'should return an image tag for a given theme file with size' do
theme_image_tag('foo.jpg', 'width:100', 'height:100').should == "<img src=\"/sites/000000000000000000000042/theme/images/foo.jpg\" height=\"100\" width=\"100\" />"
end

View File

@ -145,18 +145,6 @@ describe Page do
archives.children.last.children.first.depth.should == 3
end
it 'should generate a path / url from parents' do
@home.fullpath.should == 'index'
@home.url.should == 'http://acme.example.com/index.html'
@child_1.fullpath.should == 'foo'
@child_1.url.should == 'http://acme.example.com/foo.html'
nested_page = Factory(:page, :title => 'Sub sub page 1', :slug => 'bar', :parent => @child_1, :site => @home.site)
nested_page.fullpath.should == 'foo/bar'
nested_page.url.should == 'http://acme.example.com/foo/bar.html'
end
it 'should destroy descendants as well' do
Factory(:page, :title => 'Sub Subpage 1', :slug => 'bar', :parent_id => @child_1._id, :site => @home.site)
@child_1.destroy

View File

@ -2,7 +2,7 @@ require 'carrierwave/test/matchers'
CarrierWave.configure do |config|
config.storage = :file
config.store_dir = "spec/tmp/uploads"
# config.store_dir = "spec/tmp/uploads"
config.cache_dir = "spec/tmp/cache"
config.root = File.join(Rails.root, 'spec', 'tmp')
end