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 | |