comfortable_mexican_sofa 1.6.12 → 1.6.13
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/VERSION +1 -1
- data/app/models/cms/site.rb +17 -4
- data/app/views/cms_admin/pages/_index_branch.html.erb +1 -1
- data/comfortable_mexican_sofa.gemspec +2 -2
- data/lib/comfortable_mexican_sofa/extensions/acts_as_tree.rb +1 -1
- data/lib/comfortable_mexican_sofa/extensions/is_mirrored.rb +2 -2
- data/lib/comfortable_mexican_sofa/fixtures.rb +6 -6
- data/test/unit/mirrors_test.rb +99 -6
- metadata +9 -9
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.6.
|
|
1
|
+
1.6.13
|
data/app/models/cms/site.rb
CHANGED
|
@@ -5,16 +5,17 @@ class Cms::Site < ActiveRecord::Base
|
|
|
5
5
|
self.table_name = 'cms_sites'
|
|
6
6
|
|
|
7
7
|
# -- Relationships --------------------------------------------------------
|
|
8
|
-
has_many :layouts, :dependent => :
|
|
9
|
-
has_many :pages, :dependent => :
|
|
10
|
-
has_many :snippets, :dependent => :
|
|
8
|
+
has_many :layouts, :dependent => :delete_all
|
|
9
|
+
has_many :pages, :dependent => :delete_all
|
|
10
|
+
has_many :snippets, :dependent => :delete_all
|
|
11
11
|
has_many :files, :dependent => :destroy
|
|
12
|
-
has_many :categories, :dependent => :
|
|
12
|
+
has_many :categories, :dependent => :delete_all
|
|
13
13
|
|
|
14
14
|
# -- Callbacks ------------------------------------------------------------
|
|
15
15
|
before_validation :assign_identifier,
|
|
16
16
|
:assign_label
|
|
17
17
|
before_save :clean_path
|
|
18
|
+
after_save :sync_mirrors
|
|
18
19
|
|
|
19
20
|
# -- Validations ----------------------------------------------------------
|
|
20
21
|
validates :identifier,
|
|
@@ -63,4 +64,16 @@ protected
|
|
|
63
64
|
self.path.gsub!(/\/$/, '')
|
|
64
65
|
end
|
|
65
66
|
|
|
67
|
+
# When site is marked as a mirror we need to sync its structure
|
|
68
|
+
# with other mirrors.
|
|
69
|
+
def sync_mirrors
|
|
70
|
+
return unless is_mirrored_changed? && is_mirrored?
|
|
71
|
+
|
|
72
|
+
[self, Cms::Site.mirrored.where("id != #{id}").first].compact.each do |site|
|
|
73
|
+
(site.layouts(:reload).roots + site.layouts.roots.map(&:descendants)).flatten.map(&:sync_mirror)
|
|
74
|
+
(site.pages(:reload).roots + site.pages.roots.map(&:descendants)).flatten.map(&:sync_mirror)
|
|
75
|
+
site.snippets(:reload).map(&:sync_mirror)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
66
79
|
end
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<%= link_to page.label, edit_cms_admin_site_page_path(@site, page) %>
|
|
30
30
|
<%= render :partial => '/cms_admin/categories/categories', :object => page %>
|
|
31
31
|
<div class='sublabel'>
|
|
32
|
-
<%= link_to page.url, page.
|
|
32
|
+
<%= link_to page.url, page.url, :target => '_blank' %>
|
|
33
33
|
</div>
|
|
34
34
|
</div>
|
|
35
35
|
</div>
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "comfortable_mexican_sofa"
|
|
8
|
-
s.version = "1.6.
|
|
8
|
+
s.version = "1.6.13"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Oleg Khabarov", "The Working Group Inc"]
|
|
12
|
-
s.date = "2012-02-
|
|
12
|
+
s.date = "2012-02-23"
|
|
13
13
|
s.description = ""
|
|
14
14
|
s.email = "oleg@theworkinggroup.ca"
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -33,7 +33,7 @@ module ComfortableMexicanSofa::IsMirrored
|
|
|
33
33
|
# but content is unique. When updating need to grab mirrors based on
|
|
34
34
|
# self.slug_was, new objects will use self.slug.
|
|
35
35
|
def sync_mirror
|
|
36
|
-
return if self.is_mirrored
|
|
36
|
+
return if self.is_mirrored || !self.site.is_mirrored?
|
|
37
37
|
|
|
38
38
|
(Cms::Site.mirrored - [self.site]).each do |site|
|
|
39
39
|
mirror = case self
|
|
@@ -68,7 +68,7 @@ module ComfortableMexicanSofa::IsMirrored
|
|
|
68
68
|
|
|
69
69
|
# Mirrors should be destroyed
|
|
70
70
|
def destroy_mirror
|
|
71
|
-
return if self.is_mirrored
|
|
71
|
+
return if self.is_mirrored || !self.site.is_mirrored?
|
|
72
72
|
mirrors.each do |mirror|
|
|
73
73
|
mirror.is_mirrored = true
|
|
74
74
|
mirror.destroy
|
|
@@ -16,7 +16,7 @@ module ComfortableMexicanSofa::Fixtures
|
|
|
16
16
|
site = Cms::Site.find_or_create_by_hostname(to_hostname)
|
|
17
17
|
unless path ||= find_fixtures_path((from_hostname || to_hostname), 'layouts')
|
|
18
18
|
ComfortableMexicanSofa.logger.warn('Cannot find Layout fixtures')
|
|
19
|
-
return
|
|
19
|
+
return []
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
Dir.glob("#{path}/*").select{|f| File.directory?(f)}.each do |path|
|
|
@@ -60,7 +60,7 @@ module ComfortableMexicanSofa::Fixtures
|
|
|
60
60
|
ComfortableMexicanSofa.logger.warn("[Fixtures] Saved Layout {#{layout.identifier}}")
|
|
61
61
|
else
|
|
62
62
|
ComfortableMexicanSofa.logger.error("[Fixtures] Failed to save Layout {#{layout.errors.inspect}}")
|
|
63
|
-
|
|
63
|
+
next
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
layout_ids << layout.id
|
|
@@ -83,7 +83,7 @@ module ComfortableMexicanSofa::Fixtures
|
|
|
83
83
|
site = Cms::Site.find_or_create_by_hostname(to_hostname)
|
|
84
84
|
unless path ||= find_fixtures_path((from_hostname || to_hostname), 'pages')
|
|
85
85
|
ComfortableMexicanSofa.logger.warn('Cannot find Page fixtures')
|
|
86
|
-
return
|
|
86
|
+
return []
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
Dir.glob("#{path}/*").select{|f| File.directory?(f)}.each do |path|
|
|
@@ -138,7 +138,7 @@ module ComfortableMexicanSofa::Fixtures
|
|
|
138
138
|
ComfortableMexicanSofa.logger.warn("[Fixtures] Saved Page {#{page.full_path}}")
|
|
139
139
|
else
|
|
140
140
|
ComfortableMexicanSofa.logger.warn("[Fixtures] Failed to save Page {#{page.errors.inspect}}")
|
|
141
|
-
|
|
141
|
+
next
|
|
142
142
|
end
|
|
143
143
|
end
|
|
144
144
|
page_ids << page.id
|
|
@@ -161,7 +161,7 @@ module ComfortableMexicanSofa::Fixtures
|
|
|
161
161
|
site = Cms::Site.find_or_create_by_hostname(to_hostname)
|
|
162
162
|
unless path = find_fixtures_path((from_hostname || to_hostname), 'snippets')
|
|
163
163
|
ComfortableMexicanSofa.logger.warn('Cannot find Snippet fixtures')
|
|
164
|
-
return
|
|
164
|
+
return []
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
snippet_ids = []
|
|
@@ -192,7 +192,7 @@ module ComfortableMexicanSofa::Fixtures
|
|
|
192
192
|
ComfortableMexicanSofa.logger.warn("[Fixtures] Saved Snippet {#{snippet.identifier}}")
|
|
193
193
|
else
|
|
194
194
|
ComfortableMexicanSofa.logger.warn("[Fixtures] Failed to save Snippet {#{snippet.errors.inspect}}")
|
|
195
|
-
|
|
195
|
+
next
|
|
196
196
|
end
|
|
197
197
|
end
|
|
198
198
|
snippet_ids << snippet.id
|
data/test/unit/mirrors_test.rb
CHANGED
|
@@ -2,13 +2,8 @@ require File.expand_path('../test_helper', File.dirname(__FILE__))
|
|
|
2
2
|
|
|
3
3
|
class MirrorsTest < ActiveSupport::TestCase
|
|
4
4
|
|
|
5
|
-
def setup
|
|
6
|
-
Cms::Site.delete_all
|
|
7
|
-
@site_a = Cms::Site.create!(:identifier => 'site_a', :hostname => 'site-a.host', :is_mirrored => true)
|
|
8
|
-
@site_b = Cms::Site.create!(:identifier => 'site_b', :hostname => 'site-b.host', :is_mirrored => true)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
5
|
def test_layout_creation
|
|
6
|
+
setup_sites
|
|
12
7
|
assert_difference 'Cms::Layout.count', 2 do
|
|
13
8
|
layout = @site_a.layouts.create!(:identifier => 'test')
|
|
14
9
|
assert_equal 1, layout.mirrors.size
|
|
@@ -17,6 +12,7 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
17
12
|
end
|
|
18
13
|
|
|
19
14
|
def test_page_creation
|
|
15
|
+
setup_sites
|
|
20
16
|
layout = @site_a.layouts.create!(:identifier => 'test')
|
|
21
17
|
|
|
22
18
|
assert_difference 'Cms::Page.count', 2 do
|
|
@@ -30,6 +26,7 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
30
26
|
end
|
|
31
27
|
|
|
32
28
|
def test_snippet_creation
|
|
29
|
+
setup_sites
|
|
33
30
|
assert_difference 'Cms::Snippet.count', 2 do
|
|
34
31
|
snippet = @site_a.snippets.create(:identifier => 'test')
|
|
35
32
|
assert_equal 1, snippet.mirrors.size
|
|
@@ -38,6 +35,7 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
38
35
|
end
|
|
39
36
|
|
|
40
37
|
def test_layout_update
|
|
38
|
+
setup_sites
|
|
41
39
|
layout_1a = @site_a.layouts.create!(:identifier => 'test_a')
|
|
42
40
|
layout_1b = @site_a.layouts.create!(:identifier => 'test_b')
|
|
43
41
|
layout_1c = @site_a.layouts.create!(:identifier => 'nested', :parent => layout_1a)
|
|
@@ -59,6 +57,7 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
59
57
|
end
|
|
60
58
|
|
|
61
59
|
def test_page_update
|
|
60
|
+
setup_sites
|
|
62
61
|
layout_1a = @site_a.layouts.create!(:identifier => 'test_a')
|
|
63
62
|
layout_1b = @site_a.layouts.create!(:identifier => 'test_b')
|
|
64
63
|
|
|
@@ -84,6 +83,7 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
84
83
|
end
|
|
85
84
|
|
|
86
85
|
def test_snippet_update
|
|
86
|
+
setup_sites
|
|
87
87
|
snippet_1 = @site_a.snippets.create(:identifier => 'test')
|
|
88
88
|
assert snippet_2 = snippet_1.mirrors.first
|
|
89
89
|
snippet_1.update_attributes!(
|
|
@@ -96,6 +96,7 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
def test_layout_destroy
|
|
99
|
+
setup_sites
|
|
99
100
|
layout_1a = @site_a.layouts.create!(:identifier => 'test_a')
|
|
100
101
|
layout_1b = @site_a.layouts.create!(:identifier => 'test_b')
|
|
101
102
|
layout_1c = @site_a.layouts.create!(:identifier => 'nested', :parent => layout_1b)
|
|
@@ -116,6 +117,7 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
116
117
|
end
|
|
117
118
|
|
|
118
119
|
def test_page_destroy
|
|
120
|
+
setup_sites
|
|
119
121
|
layout = @site_a.layouts.create!(:identifier => 'test')
|
|
120
122
|
page_1r = @site_a.pages.create!(:slug => 'root', :layout => layout)
|
|
121
123
|
page_1a = @site_a.pages.create!(:slug => 'test_a', :layout => layout)
|
|
@@ -137,6 +139,7 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
137
139
|
end
|
|
138
140
|
|
|
139
141
|
def test_snippet_destroy
|
|
142
|
+
setup_sites
|
|
140
143
|
snippet_1 = @site_a.snippets.create(:identifier => 'test')
|
|
141
144
|
assert snippet_2 = snippet_1.mirrors.first
|
|
142
145
|
|
|
@@ -146,4 +149,94 @@ class MirrorsTest < ActiveSupport::TestCase
|
|
|
146
149
|
end
|
|
147
150
|
end
|
|
148
151
|
|
|
152
|
+
def test_site_creation_as_mirror
|
|
153
|
+
site = cms_sites(:default)
|
|
154
|
+
Cms::Site.update_all(:is_mirrored => true) # bypassing callbacks
|
|
155
|
+
|
|
156
|
+
assert_difference 'Cms::Site.count' do
|
|
157
|
+
assert_difference 'Cms::Layout.count', site.layouts.count do
|
|
158
|
+
assert_difference 'Cms::Page.count', site.pages.count do
|
|
159
|
+
assert_difference 'Cms::Snippet.count', site.snippets.count do
|
|
160
|
+
mirror = Cms::Site.create!(
|
|
161
|
+
:identifier => 'mirror',
|
|
162
|
+
:hostname => 'mirror.host',
|
|
163
|
+
:is_mirrored => true
|
|
164
|
+
)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def test_site_update_to_mirror
|
|
172
|
+
site = cms_sites(:default)
|
|
173
|
+
Cms::Site.update_all(:is_mirrored => true) # bypassing callbacks
|
|
174
|
+
|
|
175
|
+
mirror = Cms::Site.create!(
|
|
176
|
+
:identifier => 'mirror',
|
|
177
|
+
:hostname => 'mirror.host'
|
|
178
|
+
)
|
|
179
|
+
layout = mirror.layouts.create!(
|
|
180
|
+
:identifier => 'mirror_layout'
|
|
181
|
+
)
|
|
182
|
+
home_page = mirror.pages.create!(
|
|
183
|
+
:label => 'mirror home',
|
|
184
|
+
:layout => layout
|
|
185
|
+
)
|
|
186
|
+
child_page = mirror.pages.create!(
|
|
187
|
+
:label => 'mirror child',
|
|
188
|
+
:layout => layout,
|
|
189
|
+
:slug => 'mirror-child',
|
|
190
|
+
:parent => home_page
|
|
191
|
+
)
|
|
192
|
+
snippet = mirror.snippets.create!(
|
|
193
|
+
:identifier => 'mirror_snippet'
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
assert_difference ['site.layouts.count', 'site.pages.count', 'site.snippets.count'], 1 do
|
|
197
|
+
assert_difference 'mirror.layouts.count', 3 do
|
|
198
|
+
assert_difference 'mirror.pages.count', 1 do
|
|
199
|
+
assert_difference 'mirror.snippets.count', 1 do
|
|
200
|
+
|
|
201
|
+
mirror.update_attribute(:is_mirrored, true)
|
|
202
|
+
|
|
203
|
+
site.reload
|
|
204
|
+
assert site.layouts.where(:identifier => 'mirror_layout').present?
|
|
205
|
+
assert site.pages.where(:slug => 'mirror-child').present?
|
|
206
|
+
assert site.snippets.where(:identifier => 'mirror_snippet').present?
|
|
207
|
+
|
|
208
|
+
mirror.reload
|
|
209
|
+
assert mirror.layouts.where(:identifier => 'default').present?
|
|
210
|
+
assert mirror.pages.where(:slug => 'child-page').present?
|
|
211
|
+
assert mirror.snippets.where(:identifier => 'default').present?
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def test_site_destruction
|
|
219
|
+
site = cms_sites(:default)
|
|
220
|
+
Cms::Site.update_all(:is_mirrored => true) # bypassing callbacks
|
|
221
|
+
|
|
222
|
+
mirror = Cms::Site.create!(
|
|
223
|
+
:identifier => 'mirror',
|
|
224
|
+
:hostname => 'mirror.host',
|
|
225
|
+
:is_mirrored => true
|
|
226
|
+
)
|
|
227
|
+
mirror.reload
|
|
228
|
+
|
|
229
|
+
assert_no_difference ['site.layouts.count', 'site.pages.count', 'site.snippets.count'] do
|
|
230
|
+
mirror.destroy
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
protected
|
|
235
|
+
|
|
236
|
+
def setup_sites
|
|
237
|
+
Cms::Site.delete_all
|
|
238
|
+
@site_a = Cms::Site.create!(:identifier => 'site_a', :hostname => 'site-a.host', :is_mirrored => true)
|
|
239
|
+
@site_b = Cms::Site.create!(:identifier => 'site_b', :hostname => 'site-b.host', :is_mirrored => true)
|
|
240
|
+
end
|
|
241
|
+
|
|
149
242
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: comfortable_mexican_sofa
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.6.
|
|
4
|
+
version: 1.6.13
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -10,11 +10,11 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2012-02-
|
|
13
|
+
date: 2012-02-23 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: rails
|
|
17
|
-
requirement: &
|
|
17
|
+
requirement: &70242361677380 !ruby/object:Gem::Requirement
|
|
18
18
|
none: false
|
|
19
19
|
requirements:
|
|
20
20
|
- - ! '>='
|
|
@@ -22,10 +22,10 @@ dependencies:
|
|
|
22
22
|
version: 3.0.0
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
|
-
version_requirements: *
|
|
25
|
+
version_requirements: *70242361677380
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: active_link_to
|
|
28
|
-
requirement: &
|
|
28
|
+
requirement: &70242361676880 !ruby/object:Gem::Requirement
|
|
29
29
|
none: false
|
|
30
30
|
requirements:
|
|
31
31
|
- - ~>
|
|
@@ -33,10 +33,10 @@ dependencies:
|
|
|
33
33
|
version: 1.0.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
|
-
version_requirements: *
|
|
36
|
+
version_requirements: *70242361676880
|
|
37
37
|
- !ruby/object:Gem::Dependency
|
|
38
38
|
name: paperclip
|
|
39
|
-
requirement: &
|
|
39
|
+
requirement: &70242361676360 !ruby/object:Gem::Requirement
|
|
40
40
|
none: false
|
|
41
41
|
requirements:
|
|
42
42
|
- - ! '>='
|
|
@@ -44,7 +44,7 @@ dependencies:
|
|
|
44
44
|
version: 2.3.0
|
|
45
45
|
type: :runtime
|
|
46
46
|
prerelease: false
|
|
47
|
-
version_requirements: *
|
|
47
|
+
version_requirements: *70242361676360
|
|
48
48
|
description: ''
|
|
49
49
|
email: oleg@theworkinggroup.ca
|
|
50
50
|
executables: []
|
|
@@ -366,7 +366,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
366
366
|
version: '0'
|
|
367
367
|
segments:
|
|
368
368
|
- 0
|
|
369
|
-
hash: -
|
|
369
|
+
hash: -3226353458440503437
|
|
370
370
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
371
371
|
none: false
|
|
372
372
|
requirements:
|