mirrors are done!

Oleg committed May 18, 2011
commit 9137b11f59b3680bf1cfa7c12130a50b3363ecea
Showing 13 changed files with 135 additions and 3 deletions
app/controllers/cms_admin/snippets_controller.rb +1 -0
@@ @@ -17,6 +17,7 @@ class CmsAdmin::SnippetsController < CmsAdmin::BaseController
end
def create
+ # raise @cms_snippet.to_yaml
@cms_snippet.save!
flash[:notice] = 'Snippet created'
redirect_to :action => :edit, :id => @cms_snippet
app/models/cms/layout.rb +1 -1
@@ @@ -56,7 +56,7 @@ class Cms::Layout < ActiveRecord::Base
if parent
regex = /\{\{\s*cms:page:content:?(?:(?::text)|(?::rich_text))?\s*\}\}/
if parent.merged_content.match(regex)
- parent.merged_content.gsub(regex, content)
+ parent.merged_content.gsub(regex, content.to_s)
else
content
end
app/models/cms/page.rb +1 -1
@@ @@ -35,7 +35,7 @@ class Cms::Page < ActiveRecord::Base
validates :slug,
:presence => true,
:format => /^\w[a-z0-9_-]*$/i,
- :unless => lambda{ |p| p == Cms::Page.root || p.site && p.site.pages.count == 0 }
+ :unless => lambda{ |p| p.site && (p.site.pages.count == 0 || p.site.pages.root == self) }
validates :layout,
:presence => true
validates :full_path,
app/views/cms_admin/layouts/edit.html.erb +4 -0
@@ @@ -1,6 +1,10 @@
<%= link_to span_tag(pluralize(@cms_layout.revisions.count, 'revision')), cms_admin_layout_revisions_path(@cms_layout), :class => 'big button' %>
<h1> Editing Layout </h1>
+ <% content_for :right_column do %>
+ <%= render :partial => 'cms_admin/sites/mirrors', :object => @cms_layout %>
+ <% end %>
+
<%= cms_form_for @cms_layout, :url => {:action => :update} do |form| %>
<%= render :partial => 'form', :object => form %>
<% end %>
\ No newline at end of file
app/views/cms_admin/layouts/index.html.erb +4 -0
@@ @@ -1,6 +1,10 @@
<%= link_to span_tag('Create New Layout'), new_cms_admin_layout_path, :class => 'big button' %>
<h1>Layouts</h1>
+ <% content_for :right_column do %>
+ <%= render :partial => 'cms_admin/sites/mirrors' %>
+ <% end %>
+
<ul class='list'>
<%= render :partial => 'index_branch', :collection => @cms_layouts %>
</ul>
\ No newline at end of file
app/views/cms_admin/pages/edit.html.erb +4 -0
@@ @@ -1,6 +1,10 @@
<%= link_to span_tag(pluralize(@cms_page.revisions.count, 'revision')), cms_admin_page_revisions_path(@cms_page), :class => 'big button' %>
<h1> Editing Page </h1>
+ <% content_for :right_column do %>
+ <%= render :partial => 'cms_admin/sites/mirrors', :object => @cms_page %>
+ <% end %>
+
<%= cms_form_for @cms_page, :url => {:action => :update} do |form| %>
<%= render :partial => 'form', :object => form %>
<% end %>
\ No newline at end of file
app/views/cms_admin/pages/index.html.erb +4 -0
@@ @@ -1,6 +1,10 @@
<%= link_to span_tag('Create New Page'), new_cms_admin_page_path, :class => 'big button' %>
<h1>Pages</h1>
+ <% content_for :right_column do %>
+ <%= render :partial => 'cms_admin/sites/mirrors' %>
+ <% end %>
+
<ul class='list sortable'>
<%= render :partial => 'index_branch', :collection => @cms_pages %>
</ul>
\ No newline at end of file
app/views/cms_admin/sites/_mirrors.html.erb +20 -0
@@ @@ -0,0 +1,20 @@
+ <%
+ return unless ComfortableMexicanSofa.config.enable_mirror_sites
+ object ||= mirrors
+
+ options = case object
+ when Cms::Layout
+ object.mirrors.collect{|m| [m.site.label, edit_cms_admin_layout_url(m, :host => m.site.hostname)]}
+ when Cms::Page
+ object.mirrors.collect{|m| [m.site.label, edit_cms_admin_page_url(m, :host => m.site.hostname)]}
+ when Cms::Snippet
+ object.mirrors.collect{|m| [m.site.label, edit_cms_admin_snippet_url(m, :host => m.site.hostname)]}
+ else
+ (Cms::Site.all - [@cms_site]).collect{|s| [s.label, url_for(:host => s.hostname)]}
+ end
+ options = [[@cms_site.label, request.fullpath]] + options
+ %>
+
+ <div id='mirrors' class='box'>
+ <%= select_tag :mirror, options_for_select(options) %>
+ </div>
\ No newline at end of file
app/views/cms_admin/snippets/edit.html.erb +4 -0
@@ @@ -1,6 +1,10 @@
<%= link_to span_tag(pluralize(@cms_snippet.revisions.count, 'revision')), cms_admin_snippet_revisions_path(@cms_snippet), :class => 'big button' %>
<h1> Editing Snippet </h1>
+ <% content_for :right_column do %>
+ <%= render :partial => 'cms_admin/sites/mirrors', :object => @cms_snippet %>
+ <% end %>
+
<%= cms_form_for @cms_snippet, :url => {:action => :update} do |form| %>
<%= render :partial => 'form', :object => form %>
<% end %>
\ No newline at end of file
app/views/cms_admin/snippets/index.html.erb +4 -0
@@ @@ -1,6 +1,10 @@
<%= link_to span_tag('Create New Snippet'), new_cms_admin_snippet_path, :class => 'big button' %>
<h1>Snippets</h1>
+ <% content_for :right_column do %>
+ <%= render :partial => 'cms_admin/sites/mirrors' %>
+ <% end %>
+
<ul class='list'>
<% @cms_snippets.each do |cms_snippet| %>
<li id='cms_snippet_<%= cms_snippet.id %>'>
public/javascripts/comfortable_mexican_sofa/cms.js +7 -0
@@ @@ -13,6 +13,7 @@ $.CMS = function(){
$.CMS.enable_desc_toggle();
$.CMS.enable_sortable_list();
if($('form.new_cms_page, form.edit_cms_page').get(0)) $.CMS.enable_page_save_form();
+ if($('#mirrors').get(0)) $.CMS.enable_mirrors_widget();
if($('#page_save').get(0)) $.CMS.enable_page_save_widget();
if($('#uploader_button').get(0)) $.CMS.enable_uploader();
});
@@ @@ -148,6 +149,12 @@ $.CMS = function(){
})
});
},
+
+ enable_mirrors_widget: function(){
+ $('#mirrors select').change(function(){
+ window.location = $(this).val();
+ })
+ },
enable_page_save_widget : function(){
$('#page_save input').attr('checked', $('input#cms_page_is_published').is(':checked'));
public/stylesheets/comfortable_mexican_sofa/content.css +6 -1
@@ @@ -1,3 +1,8 @@
+ /* -- Mirrors widget ----------------------------------------------------- */
+ #mirrors.box select {
+ width: 100%;
+ }
+
/* -- Page saving widget ------------------------------------------------- */
#page_save button {
float: right;
@@ @@ -9,7 +14,6 @@
#page_save input {
margin-right: 5px;
}
-
/* -- File Upload widget ------------------------------------------------- */
#file_uploads .actions {
overflow: hidden;
@@ @@ -173,6 +177,7 @@ form.search {
}
/* -- Page Specific stuff ------------------------------------------------ */
+ .c_cms_admin_sites.a_index ul.list li .item .label,
.c_cms_admin_layouts.a_index ul.list li .item .label,
.c_cms_admin_snippets.a_index ul.list li .item .label {
margin-left: 32px;
test/integration/mirrors_test.rb +75 -0
@@ @@ -0,0 +1,75 @@
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
+
+ class MirrorsTest < ActionDispatch::IntegrationTest
+
+ def setup
+ ComfortableMexicanSofa.config.enable_mirror_sites = true
+ Cms::Site.create!(:hostname => 'test-b.host')
+ load(File.expand_path('app/models/cms/layout.rb', Rails.root))
+ load(File.expand_path('app/models/cms/page.rb', Rails.root))
+ load(File.expand_path('app/models/cms/snippet.rb', Rails.root))
+
+ # making mirrors
+ Cms::Layout.all.each{ |l| l.save! }
+ Cms::Page.all.each{ |p| p.save! }
+ Cms::Snippet.all.each { |s| s.save! }
+ end
+
+ def test_get_layouts
+ http_auth :get, cms_admin_layouts_path
+ assert_response :success
+ assert_select 'select#mirror' do
+ assert_select 'option[value="http://test-b.host/cms-admin/layouts"]'
+ end
+ end
+
+ def test_get_layouts_edit
+ layout = cms_layouts(:default)
+ assert mirror = layout.mirrors.first
+
+ http_auth :get, edit_cms_admin_layout_path(layout)
+ assert_response :success
+ assert_select 'select#mirror' do
+ assert_select "option[value='http://test-b.host/cms-admin/layouts/#{mirror.id}/edit']"
+ end
+ end
+
+ def test_get_pages
+ http_auth :get, cms_admin_pages_path
+ assert_response :success
+ assert_select 'select#mirror' do
+ assert_select 'option[value="http://test-b.host/cms-admin/pages"]'
+ end
+ end
+
+ def test_get_pages_edit
+ page = cms_pages(:default)
+ assert mirror = page.mirrors.first
+
+ http_auth :get, edit_cms_admin_page_path(page)
+ assert_response :success
+ assert_select 'select#mirror' do
+ assert_select "option[value='http://test-b.host/cms-admin/pages/#{mirror.id}/edit']"
+ end
+ end
+
+ def test_get_snippets
+ http_auth :get, cms_admin_snippets_path
+ assert_response :success
+ assert_select 'select#mirror' do
+ assert_select 'option[value="http://test-b.host/cms-admin/snippets"]'
+ end
+ end
+
+ def test_get_snippets_edit
+ snippet = cms_snippets(:default)
+ assert mirror = snippet.mirrors.first
+
+ http_auth :get, edit_cms_admin_snippet_path(snippet)
+ assert_response :success
+ assert_select 'select#mirror' do
+ assert_select "option[value='http://test-b.host/cms-admin/snippets/#{mirror.id}/edit']"
+ end
+ end
+
+ end
\ No newline at end of file