comfortable_mexican_sofa 1.0.2 → 1.0.3
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/Gemfile +1 -1
- data/Gemfile.lock +30 -31
- data/VERSION +1 -1
- data/app/controllers/cms_admin/base_controller.rb +2 -3
- data/app/controllers/cms_content_controller.rb +6 -1
- data/app/models/cms_layout.rb +23 -5
- data/app/models/cms_page.rb +14 -0
- data/app/models/cms_snippet.rb +13 -1
- data/app/views/cms_admin/layouts/_form.html.erb +2 -1
- data/app/views/cms_admin/layouts/_index_branch.html.erb +3 -0
- data/comfortable_mexican_sofa.gemspec +14 -5
- data/config/routes.rb +3 -3
- data/db/migrate/01_create_cms.rb +2 -1
- data/lib/comfortable_mexican_sofa/cms_tag/helper.rb +20 -0
- data/lib/comfortable_mexican_sofa/configuration.rb +6 -5
- data/lib/generators/README +16 -11
- data/test/cms_seeds/test.host/layouts/default.yml +2 -0
- data/test/cms_seeds/test.host/layouts/nested.yml +3 -0
- data/test/cms_seeds/test.host/pages/child.yml +10 -0
- data/test/cms_seeds/test.host/pages/child/subchild.yml +10 -0
- data/test/cms_seeds/test.host/pages/index.yml +10 -0
- data/test/cms_seeds/test.host/snippets/default.yml +3 -0
- data/test/fixtures/cms_layouts.yml +9 -20
- data/test/functional/cms_admin/layouts_controller_test.rb +1 -0
- data/test/integration/render_cms_seed_test.rb +16 -0
- data/test/test_helper.rb +1 -0
- data/test/unit/cms_configuration_test.rb +1 -0
- data/test/unit/cms_layout_test.rb +26 -8
- data/test/unit/cms_page_test.rb +33 -4
- data/test/unit/cms_snippet_test.rb +12 -0
- data/test/unit/cms_tags/helper_test.rb +29 -0
- metadata +15 -6
- data/test/fixtures/README.md +0 -22
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -2,12 +2,12 @@ GEM
|
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
4
|
abstract (1.0.0)
|
|
5
|
-
actionmailer (3.0.
|
|
6
|
-
actionpack (= 3.0.
|
|
5
|
+
actionmailer (3.0.1)
|
|
6
|
+
actionpack (= 3.0.1)
|
|
7
7
|
mail (~> 2.2.5)
|
|
8
|
-
actionpack (3.0.
|
|
9
|
-
activemodel (= 3.0.
|
|
10
|
-
activesupport (= 3.0.
|
|
8
|
+
actionpack (3.0.1)
|
|
9
|
+
activemodel (= 3.0.1)
|
|
10
|
+
activesupport (= 3.0.1)
|
|
11
11
|
builder (~> 2.1.2)
|
|
12
12
|
erubis (~> 2.6.6)
|
|
13
13
|
i18n (~> 0.4.1)
|
|
@@ -16,26 +16,25 @@ GEM
|
|
|
16
16
|
rack-test (~> 0.5.4)
|
|
17
17
|
tzinfo (~> 0.3.23)
|
|
18
18
|
active_link_to (0.0.6)
|
|
19
|
-
activemodel (3.0.
|
|
20
|
-
activesupport (= 3.0.
|
|
19
|
+
activemodel (3.0.1)
|
|
20
|
+
activesupport (= 3.0.1)
|
|
21
21
|
builder (~> 2.1.2)
|
|
22
22
|
i18n (~> 0.4.1)
|
|
23
|
-
activerecord (3.0.
|
|
24
|
-
activemodel (= 3.0.
|
|
25
|
-
activesupport (= 3.0.
|
|
23
|
+
activerecord (3.0.1)
|
|
24
|
+
activemodel (= 3.0.1)
|
|
25
|
+
activesupport (= 3.0.1)
|
|
26
26
|
arel (~> 1.0.0)
|
|
27
27
|
tzinfo (~> 0.3.23)
|
|
28
|
-
activeresource (3.0.
|
|
29
|
-
activemodel (= 3.0.
|
|
30
|
-
activesupport (= 3.0.
|
|
31
|
-
activesupport (3.0.
|
|
28
|
+
activeresource (3.0.1)
|
|
29
|
+
activemodel (= 3.0.1)
|
|
30
|
+
activesupport (= 3.0.1)
|
|
31
|
+
activesupport (3.0.1)
|
|
32
32
|
arel (1.0.1)
|
|
33
33
|
activesupport (~> 3.0.0)
|
|
34
34
|
builder (2.1.2)
|
|
35
35
|
erubis (2.6.6)
|
|
36
36
|
abstract (>= 1.0.0)
|
|
37
|
-
gemcutter (0.
|
|
38
|
-
json_pure
|
|
37
|
+
gemcutter (0.6.1)
|
|
39
38
|
git (1.2.5)
|
|
40
39
|
i18n (0.4.1)
|
|
41
40
|
jeweler (1.4.0)
|
|
@@ -43,38 +42,38 @@ GEM
|
|
|
43
42
|
git (>= 1.2.5)
|
|
44
43
|
rubyforge (>= 2.0.0)
|
|
45
44
|
json_pure (1.4.6)
|
|
46
|
-
mail (2.2.
|
|
45
|
+
mail (2.2.7)
|
|
47
46
|
activesupport (>= 2.3.6)
|
|
48
47
|
mime-types
|
|
49
48
|
treetop (>= 1.4.5)
|
|
50
49
|
mime-types (1.16)
|
|
51
|
-
paperclip (2.3.
|
|
50
|
+
paperclip (2.3.4)
|
|
52
51
|
activerecord
|
|
53
52
|
activesupport
|
|
54
53
|
polyglot (0.3.1)
|
|
55
54
|
rack (1.2.1)
|
|
56
55
|
rack-mount (0.6.13)
|
|
57
56
|
rack (>= 1.0.0)
|
|
58
|
-
rack-test (0.5.
|
|
57
|
+
rack-test (0.5.6)
|
|
59
58
|
rack (>= 1.0)
|
|
60
|
-
rails (3.0.
|
|
61
|
-
actionmailer (= 3.0.
|
|
62
|
-
actionpack (= 3.0.
|
|
63
|
-
activerecord (= 3.0.
|
|
64
|
-
activeresource (= 3.0.
|
|
65
|
-
activesupport (= 3.0.
|
|
59
|
+
rails (3.0.1)
|
|
60
|
+
actionmailer (= 3.0.1)
|
|
61
|
+
actionpack (= 3.0.1)
|
|
62
|
+
activerecord (= 3.0.1)
|
|
63
|
+
activeresource (= 3.0.1)
|
|
64
|
+
activesupport (= 3.0.1)
|
|
66
65
|
bundler (~> 1.0.0)
|
|
67
|
-
railties (= 3.0.
|
|
68
|
-
railties (3.0.
|
|
69
|
-
actionpack (= 3.0.
|
|
70
|
-
activesupport (= 3.0.
|
|
66
|
+
railties (= 3.0.1)
|
|
67
|
+
railties (3.0.1)
|
|
68
|
+
actionpack (= 3.0.1)
|
|
69
|
+
activesupport (= 3.0.1)
|
|
71
70
|
rake (>= 0.8.4)
|
|
72
71
|
thor (~> 0.14.0)
|
|
73
72
|
rake (0.8.7)
|
|
74
73
|
rubyforge (2.0.4)
|
|
75
74
|
json_pure (>= 1.1.7)
|
|
76
75
|
sqlite3-ruby (1.3.1)
|
|
77
|
-
thor (0.14.
|
|
76
|
+
thor (0.14.3)
|
|
78
77
|
treetop (1.4.8)
|
|
79
78
|
polyglot (>= 0.3.1)
|
|
80
79
|
tzinfo (0.3.23)
|
|
@@ -87,5 +86,5 @@ DEPENDENCIES
|
|
|
87
86
|
jeweler (>= 1.4.0)
|
|
88
87
|
mime-types
|
|
89
88
|
paperclip (>= 2.3.3)
|
|
90
|
-
rails (>= 3.0.
|
|
89
|
+
rails (>= 3.0.1)
|
|
91
90
|
sqlite3-ruby
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.3
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
# Authentication module must have #authenticate method
|
|
2
|
-
include ComfortableMexicanSofa.config.authentication.to_s.constantize
|
|
3
|
-
|
|
4
1
|
class CmsAdmin::BaseController < ApplicationController
|
|
2
|
+
# Authentication module must have #authenticate method
|
|
3
|
+
include ComfortableMexicanSofa.config.authentication.to_s.constantize
|
|
5
4
|
|
|
6
5
|
before_filter :authenticate,
|
|
7
6
|
:load_admin_cms_site
|
|
@@ -26,7 +26,12 @@ protected
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def load_cms_page
|
|
29
|
-
|
|
29
|
+
# Attempting to load seed page
|
|
30
|
+
if ComfortableMexicanSofa.configuration.seed_data_path
|
|
31
|
+
@cms_page = CmsPage.load_from_file(@cms_site, "/#{params[:cms_path]}")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
@cms_page ||= @cms_site.cms_pages.find_by_full_path!("/#{params[:cms_path]}")
|
|
30
35
|
return redirect_to(@cms_page.target_page.full_path) if @cms_page.target_page
|
|
31
36
|
rescue ActiveRecord::RecordNotFound
|
|
32
37
|
if @cms_page = @cms_site.cms_pages.find_by_full_path('/404')
|
data/app/models/cms_layout.rb
CHANGED
|
@@ -7,9 +7,16 @@ class CmsLayout < ActiveRecord::Base
|
|
|
7
7
|
has_many :cms_pages, :dependent => :nullify
|
|
8
8
|
|
|
9
9
|
# -- Validations ----------------------------------------------------------
|
|
10
|
-
validates :cms_site_id,
|
|
11
|
-
|
|
12
|
-
validates :
|
|
10
|
+
validates :cms_site_id,
|
|
11
|
+
:presence => true
|
|
12
|
+
validates :label,
|
|
13
|
+
:presence => true
|
|
14
|
+
validates :slug,
|
|
15
|
+
:presence => true,
|
|
16
|
+
:uniqueness => { :scope => :cms_site_id },
|
|
17
|
+
:format => { :with => /^\w[a-z0-9_-]*$/i }
|
|
18
|
+
validates :content,
|
|
19
|
+
:presence => true
|
|
13
20
|
|
|
14
21
|
# -- Class Methods --------------------------------------------------------
|
|
15
22
|
# Tree-like structure for layouts
|
|
@@ -33,6 +40,17 @@ class CmsLayout < ActiveRecord::Base
|
|
|
33
40
|
end.compact
|
|
34
41
|
end
|
|
35
42
|
|
|
43
|
+
# Attempting to initialize layout object from yaml file that is found in config.seed_data_path
|
|
44
|
+
def self.load_from_file(site, name)
|
|
45
|
+
return nil if ComfortableMexicanSofa.config.seed_data_path.blank?
|
|
46
|
+
file_path = "#{ComfortableMexicanSofa.config.seed_data_path}/#{site.hostname}/layouts/#{name}.yml"
|
|
47
|
+
return nil unless File.exists?(file_path)
|
|
48
|
+
attributes = YAML.load_file(file_path).symbolize_keys!
|
|
49
|
+
attributes[:parent] = CmsLayout.load_from_file(site, attributes[:parent])
|
|
50
|
+
attributes[:cms_site] = site
|
|
51
|
+
new(attributes)
|
|
52
|
+
end
|
|
53
|
+
|
|
36
54
|
# -- Instance Methods -----------------------------------------------------
|
|
37
55
|
# magical merging tag is <cms:page:content> If parent layout has this tag
|
|
38
56
|
# defined its content will be merged. If no such tag found, parent content
|
|
@@ -47,10 +65,10 @@ class CmsLayout < ActiveRecord::Base
|
|
|
47
65
|
end
|
|
48
66
|
|
|
49
67
|
def merged_css
|
|
50
|
-
self.parent ? self.parent.merged_css
|
|
68
|
+
self.parent ? [self.parent.merged_css, self.css].join("\n") : self.css.to_s
|
|
51
69
|
end
|
|
52
70
|
|
|
53
71
|
def merged_js
|
|
54
|
-
self.parent ? self.parent.merged_js
|
|
72
|
+
self.parent ? [self.parent.merged_js, self.js].join("\n") : self.js.to_s
|
|
55
73
|
end
|
|
56
74
|
end
|
data/app/models/cms_page.rb
CHANGED
|
@@ -45,6 +45,20 @@ class CmsPage < ActiveRecord::Base
|
|
|
45
45
|
return out.compact
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
# Attempting to initialize page object from yaml file that is found in config.seed_data_path
|
|
49
|
+
# This file defines all attributes of the page plus all the block information
|
|
50
|
+
def self.load_from_file(site, url)
|
|
51
|
+
return nil if ComfortableMexicanSofa.config.seed_data_path.blank?
|
|
52
|
+
url = (url == '/')? '/index' : url.to_s.chomp('/')
|
|
53
|
+
file_path = "#{ComfortableMexicanSofa.config.seed_data_path}/#{site.hostname}/pages#{url}.yml"
|
|
54
|
+
return nil unless File.exists?(file_path)
|
|
55
|
+
attributes = YAML.load_file(file_path).symbolize_keys!
|
|
56
|
+
attributes[:cms_layout] = CmsLayout.load_from_file(site, attributes[:cms_layout])
|
|
57
|
+
attributes[:parent] = CmsPage.load_from_file(site, attributes[:parent])
|
|
58
|
+
attributes[:cms_site] = site
|
|
59
|
+
new(attributes)
|
|
60
|
+
end
|
|
61
|
+
|
|
48
62
|
# -- Instance Methods -----------------------------------------------------
|
|
49
63
|
# Processing content will return rendered content and will populate
|
|
50
64
|
# self.cms_tags with instances of CmsTag
|
data/app/models/cms_snippet.rb
CHANGED
|
@@ -19,7 +19,19 @@ class CmsSnippet < ActiveRecord::Base
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def self.initialize_or_find(cms_page, slug)
|
|
22
|
-
|
|
22
|
+
if ComfortableMexicanSofa.configuration.seed_data_path
|
|
23
|
+
s = CmsTag::Snippet.load_from_file(cms_page.cms_site, slug)
|
|
24
|
+
end
|
|
25
|
+
s || find_by_slug(slug) || new(:slug => slug)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Attempting to initialize snippet object from yaml file that is found in config.seed_data_path
|
|
29
|
+
def self.load_from_file(site, name)
|
|
30
|
+
return nil if ComfortableMexicanSofa.config.seed_data_path.blank?
|
|
31
|
+
file_path = "#{ComfortableMexicanSofa.config.seed_data_path}/#{site.hostname}/snippets/#{name}.yml"
|
|
32
|
+
return nil unless File.exists?(file_path)
|
|
33
|
+
attributes = YAML.load_file(file_path).symbolize_keys!
|
|
34
|
+
new(attributes)
|
|
23
35
|
end
|
|
24
36
|
|
|
25
37
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
<%= form.text_field :label, :label => 'Layout Name' %>
|
|
1
|
+
<%= form.text_field :label, :label => 'Layout Name', :id => (@cms_layout.new_record?? 'slugify' : nil)%>
|
|
2
|
+
<%= form.text_field :slug, :id => 'slug' %>
|
|
2
3
|
<%= form.select :parent_id, CmsLayout.options_for_select(@cms_site, @cms_layout), :include_blank => true %>
|
|
3
4
|
<%= form.select :app_layout, CmsLayout.app_layouts_for_select, :include_blank => true %>
|
|
4
5
|
<%= form.text_area :content %>
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
</div>
|
|
15
15
|
<div class='label'>
|
|
16
16
|
<%= link_to cms_layout.label, edit_cms_admin_layout_path(cms_layout) %>
|
|
17
|
+
<div class='sublabel'>
|
|
18
|
+
<%= link_to cms_layout.slug, edit_cms_admin_layout_path(cms_layout) %>
|
|
19
|
+
</div>
|
|
17
20
|
</div>
|
|
18
21
|
</div>
|
|
19
22
|
<% if cms_layout.children.present? %>
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{comfortable_mexican_sofa}
|
|
8
|
-
s.version = "1.0.
|
|
8
|
+
s.version = "1.0.3"
|
|
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 = %q{2010-10-
|
|
12
|
+
s.date = %q{2010-10-25}
|
|
13
13
|
s.description = %q{}
|
|
14
14
|
s.email = %q{oleg@theworkinggroup.ca}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -85,6 +85,7 @@ Gem::Specification.new do |s|
|
|
|
85
85
|
"lib/comfortable_mexican_sofa/cms_tag/field_integer.rb",
|
|
86
86
|
"lib/comfortable_mexican_sofa/cms_tag/field_string.rb",
|
|
87
87
|
"lib/comfortable_mexican_sofa/cms_tag/field_text.rb",
|
|
88
|
+
"lib/comfortable_mexican_sofa/cms_tag/helper.rb",
|
|
88
89
|
"lib/comfortable_mexican_sofa/cms_tag/page_datetime.rb",
|
|
89
90
|
"lib/comfortable_mexican_sofa/cms_tag/page_integer.rb",
|
|
90
91
|
"lib/comfortable_mexican_sofa/cms_tag/page_string.rb",
|
|
@@ -120,7 +121,12 @@ Gem::Specification.new do |s|
|
|
|
120
121
|
"public/stylesheets/comfortable_mexican_sofa/structure.css",
|
|
121
122
|
"public/stylesheets/comfortable_mexican_sofa/typography.css",
|
|
122
123
|
"script/rails",
|
|
123
|
-
"test/
|
|
124
|
+
"test/cms_seeds/test.host/layouts/default.yml",
|
|
125
|
+
"test/cms_seeds/test.host/layouts/nested.yml",
|
|
126
|
+
"test/cms_seeds/test.host/pages/child.yml",
|
|
127
|
+
"test/cms_seeds/test.host/pages/child/subchild.yml",
|
|
128
|
+
"test/cms_seeds/test.host/pages/index.yml",
|
|
129
|
+
"test/cms_seeds/test.host/snippets/default.yml",
|
|
124
130
|
"test/fixtures/cms_blocks.yml",
|
|
125
131
|
"test/fixtures/cms_layouts.yml",
|
|
126
132
|
"test/fixtures/cms_pages.yml",
|
|
@@ -136,6 +142,7 @@ Gem::Specification.new do |s|
|
|
|
136
142
|
"test/functional/cms_admin/uploads_controller_test.rb",
|
|
137
143
|
"test/functional/cms_content_controller_test.rb",
|
|
138
144
|
"test/integration/authentication_test.rb",
|
|
145
|
+
"test/integration/render_cms_seed_test.rb",
|
|
139
146
|
"test/integration/render_cms_test.rb",
|
|
140
147
|
"test/integration/sites_test.rb",
|
|
141
148
|
"test/test_helper.rb",
|
|
@@ -150,14 +157,14 @@ Gem::Specification.new do |s|
|
|
|
150
157
|
"test/unit/cms_tags/field_integer_test.rb",
|
|
151
158
|
"test/unit/cms_tags/field_string_test.rb",
|
|
152
159
|
"test/unit/cms_tags/field_text_test.rb",
|
|
160
|
+
"test/unit/cms_tags/helper_test.rb",
|
|
153
161
|
"test/unit/cms_tags/page_datetime_test.rb",
|
|
154
162
|
"test/unit/cms_tags/page_integer_test.rb",
|
|
155
163
|
"test/unit/cms_tags/page_string_test.rb",
|
|
156
164
|
"test/unit/cms_tags/page_text_test.rb",
|
|
157
165
|
"test/unit/cms_tags/partial_test.rb",
|
|
158
166
|
"test/unit/cms_tags/snippet_test.rb",
|
|
159
|
-
"test/unit/cms_upload_test.rb"
|
|
160
|
-
"tmp/restart.txt"
|
|
167
|
+
"test/unit/cms_upload_test.rb"
|
|
161
168
|
]
|
|
162
169
|
s.homepage = %q{http://github.com/theworkinggroup/comfortable-mexican-sofa}
|
|
163
170
|
s.rdoc_options = ["--charset=UTF-8"]
|
|
@@ -172,6 +179,7 @@ Gem::Specification.new do |s|
|
|
|
172
179
|
"test/functional/cms_admin/uploads_controller_test.rb",
|
|
173
180
|
"test/functional/cms_content_controller_test.rb",
|
|
174
181
|
"test/integration/authentication_test.rb",
|
|
182
|
+
"test/integration/render_cms_seed_test.rb",
|
|
175
183
|
"test/integration/render_cms_test.rb",
|
|
176
184
|
"test/integration/sites_test.rb",
|
|
177
185
|
"test/test_helper.rb",
|
|
@@ -186,6 +194,7 @@ Gem::Specification.new do |s|
|
|
|
186
194
|
"test/unit/cms_tags/field_integer_test.rb",
|
|
187
195
|
"test/unit/cms_tags/field_string_test.rb",
|
|
188
196
|
"test/unit/cms_tags/field_text_test.rb",
|
|
197
|
+
"test/unit/cms_tags/helper_test.rb",
|
|
189
198
|
"test/unit/cms_tags/page_datetime_test.rb",
|
|
190
199
|
"test/unit/cms_tags/page_integer_test.rb",
|
|
191
200
|
"test/unit/cms_tags/page_string_test.rb",
|
data/config/routes.rb
CHANGED
|
@@ -14,9 +14,9 @@ Rails.application.routes.draw do
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
scope :controller => :cms_content do
|
|
17
|
-
get '/cms-css/:id' => :render_css, :format => 'css'
|
|
18
|
-
get '/cms-js/:id' => :render_js, :format => 'js'
|
|
19
|
-
get '/' => :render_html, :path => '(*cms_path)'
|
|
17
|
+
get '/cms-css/:id' => :render_css, :as => 'cms_css', :format => 'css'
|
|
18
|
+
get '/cms-js/:id' => :render_js, :as => 'cms_js', :format => 'js'
|
|
19
|
+
get '/' => :render_html, :as => 'cms_html', :path => '(*cms_path)'
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
end
|
data/db/migrate/01_create_cms.rb
CHANGED
|
@@ -14,14 +14,15 @@ class CreateCms < ActiveRecord::Migration
|
|
|
14
14
|
t.integer :parent_id
|
|
15
15
|
t.string :app_layout
|
|
16
16
|
t.string :label
|
|
17
|
+
t.string :slug
|
|
17
18
|
t.text :content
|
|
18
19
|
t.text :css
|
|
19
20
|
t.text :js
|
|
20
21
|
t.integer :position, :null => false, :default => 0
|
|
21
22
|
t.timestamps
|
|
22
23
|
end
|
|
23
|
-
add_index :cms_layouts, [:cms_site_id, :label]
|
|
24
24
|
add_index :cms_layouts, [:parent_id, :position]
|
|
25
|
+
add_index :cms_layouts, [:cms_site_id, :slug], :unique => true
|
|
25
26
|
|
|
26
27
|
# -- Pages --------------------------------------------------------------
|
|
27
28
|
create_table :cms_pages do |t|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class CmsTag::Helper
|
|
2
|
+
|
|
3
|
+
attr_accessor :label
|
|
4
|
+
|
|
5
|
+
include CmsTag
|
|
6
|
+
|
|
7
|
+
def self.regex_tag_signature(label = nil)
|
|
8
|
+
label ||= /\w+/
|
|
9
|
+
/<\s*cms:helper:(#{label})\s*\/?>/
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def regex_tag_signature
|
|
13
|
+
self.class.regex_tag_signature(label)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def content
|
|
17
|
+
"<%= #{label} %>"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -6,14 +6,15 @@ class ComfortableMexicanSofa::Configuration
|
|
|
6
6
|
# Module that will handle authentication to access cms-admin area
|
|
7
7
|
attr_accessor :authentication
|
|
8
8
|
|
|
9
|
-
#
|
|
10
|
-
|
|
9
|
+
# Location of YAML files that can be used to render pages instead of pulling
|
|
10
|
+
# data from the database. Not active if not specified.
|
|
11
|
+
attr_accessor :seed_data_path
|
|
11
12
|
|
|
12
13
|
# Configuration defaults
|
|
13
14
|
def initialize
|
|
14
|
-
@cms_title
|
|
15
|
-
@authentication
|
|
16
|
-
@
|
|
15
|
+
@cms_title = 'ComfortableMexicanSofa'
|
|
16
|
+
@authentication = 'ComfortableMexicanSofa::HttpAuth'
|
|
17
|
+
@seed_data_path = nil
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
end
|
data/lib/generators/README
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
| | / _ \| '_ ` _ \| |_ / _ \| '__| __/ _` | '_ \| |/ _ \
|
|
4
|
-
| |__| (_) | | | | | | _| (_) | | | || (_| | |_) | | __/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
| \/ | _____ _(_) ___ __ _ _ __ / ___| ___ / _| __ _
|
|
8
|
-
| |\/| |/ _ \ \/ / |/ __/ _` | '_ \ \___ \ / _ \| |_ / _` |
|
|
9
|
-
| | | | __/> <| | (_| (_| | | | | ___) | (_) | _| (_| |
|
|
10
|
-
|_| |_|\___/_/\_\_|\___\__,_|_| |_| |____/ \___/|_| \__,_|
|
|
1
|
+
____ __ _ _ _
|
|
2
|
+
/ ___|___ _ __ ___ / _| ___ _ __| |_ __ _| |__ | | ___
|
|
3
|
+
| | / _ \| '_ ` _ \| |_ / _ \| '__| __/ _` | '_ \| |/ _ \
|
|
4
|
+
| |__| (_) | | | | | | _| (_) | | | || (_| | |_) | | __/
|
|
5
|
+
\____\___/|_| |_| |_|_| \___/|_| \__\__,_|_.__/|_|\___|
|
|
6
|
+
__ __ _ ____ __
|
|
7
|
+
| \/ | _____ _(_) ___ __ _ _ __ / ___| ___ / _| __ _
|
|
8
|
+
| |\/| |/ _ \ \/ / |/ __/ _` | '_ \ \___ \ / _ \| |_ / _` |
|
|
9
|
+
| | | | __/> <| | (_| (_| | | | | ___) | (_) | _| (_| |
|
|
10
|
+
|_| |_|\___/_/\_\_|\___\__,_|_| |_| |____/ \___/|_| \__,_|
|
|
11
11
|
|
|
12
|
-
Hey
|
|
12
|
+
Hey! Everything is almost done. Please don't forget to
|
|
13
|
+
|
|
14
|
+
* run migrations -> `rake db:migrate`
|
|
15
|
+
|
|
16
|
+
After that go to http://your-awesome-app/cms-admin to start
|
|
17
|
+
populating content.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
default:
|
|
2
2
|
cms_site: default
|
|
3
3
|
label: Default Layout
|
|
4
|
+
slug: default
|
|
4
5
|
parent:
|
|
5
6
|
content: |-
|
|
6
7
|
<cms:field:default_field_text:text>
|
|
@@ -9,39 +10,27 @@ default:
|
|
|
9
10
|
layout_content_b
|
|
10
11
|
<cms:snippet:default>
|
|
11
12
|
layout_content_c
|
|
12
|
-
css:
|
|
13
|
-
|
|
14
|
-
p { color: #fff }
|
|
15
|
-
js: |-
|
|
16
|
-
$(document).ready(function() {
|
|
17
|
-
alert('hi');
|
|
18
|
-
})
|
|
13
|
+
css: default_css
|
|
14
|
+
js: default_js
|
|
19
15
|
|
|
20
16
|
nested:
|
|
21
17
|
cms_site: default
|
|
22
18
|
label: Nested Layout
|
|
19
|
+
slug: nested
|
|
23
20
|
parent:
|
|
24
21
|
content: |-
|
|
25
22
|
<cms:page:header/>
|
|
26
23
|
<cms:page:content/>
|
|
27
|
-
css:
|
|
28
|
-
|
|
29
|
-
js: |-
|
|
30
|
-
$(document).ready(function() {
|
|
31
|
-
alert('hi');
|
|
32
|
-
})
|
|
24
|
+
css: nested_css
|
|
25
|
+
js: nested_js
|
|
33
26
|
|
|
34
27
|
child:
|
|
35
28
|
cms_site: default
|
|
36
29
|
label: Child Layout
|
|
30
|
+
slug: child
|
|
37
31
|
parent: nested
|
|
38
32
|
content: |-
|
|
39
33
|
<cms:page:left_column>
|
|
40
34
|
<cms:page:right_column>
|
|
41
|
-
css:
|
|
42
|
-
|
|
43
|
-
js: |-
|
|
44
|
-
js: |-
|
|
45
|
-
$(document).ready(function() {
|
|
46
|
-
alert('sup');
|
|
47
|
-
})
|
|
35
|
+
css: child_css
|
|
36
|
+
js: child_js
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
2
|
+
|
|
3
|
+
class RenderCmsSeedTest < ActionDispatch::IntegrationTest
|
|
4
|
+
|
|
5
|
+
def test_render_with_seed_data_enabled
|
|
6
|
+
get '/child/subchild'
|
|
7
|
+
assert_response 404
|
|
8
|
+
|
|
9
|
+
ComfortableMexicanSofa.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
|
|
10
|
+
|
|
11
|
+
get '/child/subchild'
|
|
12
|
+
assert_response :success
|
|
13
|
+
assert_equal '<html><div>Sub Child Page Content Content for Default Snippet</div></html>', response.body
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
data/test/test_helper.rb
CHANGED
|
@@ -11,6 +11,7 @@ class ActiveSupport::TestCase
|
|
|
11
11
|
ComfortableMexicanSofa.configure do |config|
|
|
12
12
|
config.cms_title = 'ComfortableMexicanSofa'
|
|
13
13
|
config.authentication = 'ComfortableMexicanSofa::HttpAuth'
|
|
14
|
+
config.seed_data_path = nil
|
|
14
15
|
end
|
|
15
16
|
ComfortableMexicanSofa::HttpAuth.username = 'username'
|
|
16
17
|
ComfortableMexicanSofa::HttpAuth.password = 'password'
|
|
@@ -6,6 +6,7 @@ class CmsConfigurationTest < ActiveSupport::TestCase
|
|
|
6
6
|
assert config = ComfortableMexicanSofa.configuration
|
|
7
7
|
assert_equal 'ComfortableMexicanSofa', config.cms_title
|
|
8
8
|
assert_equal 'ComfortableMexicanSofa::HttpAuth', config.authentication
|
|
9
|
+
assert_equal nil, config.seed_data_path
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def test_initialization_overrides
|
|
@@ -11,13 +11,16 @@ class CmsLayoutTest < ActiveSupport::TestCase
|
|
|
11
11
|
def test_validations
|
|
12
12
|
layout = CmsLayout.create
|
|
13
13
|
assert layout.errors.present?
|
|
14
|
-
assert_has_errors_on layout, [:label, :content]
|
|
14
|
+
assert_has_errors_on layout, [:label, :slug, :content]
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def test_options_for_select
|
|
18
|
-
assert_equal ['Default Layout', 'Nested Layout', '. . Child Layout'],
|
|
19
|
-
|
|
20
|
-
assert_equal ['Default Layout'
|
|
18
|
+
assert_equal ['Default Layout', 'Nested Layout', '. . Child Layout'],
|
|
19
|
+
CmsLayout.options_for_select(cms_sites(:default)).collect{|t| t.first}
|
|
20
|
+
assert_equal ['Default Layout', 'Nested Layout'],
|
|
21
|
+
CmsLayout.options_for_select(cms_sites(:default), cms_layouts(:child)).collect{|t| t.first}
|
|
22
|
+
assert_equal ['Default Layout'],
|
|
23
|
+
CmsLayout.options_for_select(cms_sites(:default), cms_layouts(:nested)).collect{|t| t.first}
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
def test_app_layouts_for_select
|
|
@@ -36,13 +39,28 @@ class CmsLayoutTest < ActiveSupport::TestCase
|
|
|
36
39
|
end
|
|
37
40
|
|
|
38
41
|
def test_merged_css
|
|
39
|
-
|
|
40
|
-
assert_equal merged_css, cms_layouts(:child).merged_css
|
|
42
|
+
assert_equal "nested_css\nchild_css", cms_layouts(:child).merged_css
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
def test_merged_js
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
assert_equal "nested_js\nchild_js", cms_layouts(:child).merged_js
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_load_from_file
|
|
50
|
+
assert !CmsLayout.load_from_file(cms_sites(:default), 'default')
|
|
51
|
+
|
|
52
|
+
ComfortableMexicanSofa.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
|
|
53
|
+
|
|
54
|
+
assert !CmsLayout.load_from_file(cms_sites(:default), 'bogus')
|
|
55
|
+
|
|
56
|
+
assert layout = CmsLayout.load_from_file(cms_sites(:default), 'default')
|
|
57
|
+
assert_equal 'Default Layout', layout.label
|
|
58
|
+
assert_equal '<html><cms:page:content/></html>', layout.content
|
|
59
|
+
|
|
60
|
+
assert layout = CmsLayout.load_from_file(cms_sites(:default), 'nested')
|
|
61
|
+
assert_equal 'Nested Layout', layout.label
|
|
62
|
+
assert_equal '<div><cms:page:content/></div>', layout.content
|
|
63
|
+
assert_equal '<html><div><cms:page:content/></div></html>', layout.merged_content
|
|
46
64
|
end
|
|
47
65
|
|
|
48
66
|
end
|
data/test/unit/cms_page_test.rb
CHANGED
|
@@ -112,12 +112,41 @@ class CmsPageTest < ActiveSupport::TestCase
|
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
def test_options_for_select
|
|
115
|
-
assert_equal ['Default Page', '. . Child Page'],
|
|
116
|
-
|
|
117
|
-
assert_equal [],
|
|
115
|
+
assert_equal ['Default Page', '. . Child Page'],
|
|
116
|
+
CmsPage.options_for_select(cms_sites(:default)).collect{|t| t.first }
|
|
117
|
+
assert_equal ['Default Page'],
|
|
118
|
+
CmsPage.options_for_select(cms_sites(:default), cms_pages(:child)).collect{|t| t.first }
|
|
119
|
+
assert_equal [],
|
|
120
|
+
CmsPage.options_for_select(cms_sites(:default), cms_pages(:default))
|
|
118
121
|
|
|
119
122
|
page = CmsPage.new(new_params(:parent => cms_pages(:default)))
|
|
120
|
-
assert_equal ['Default Page', '. . Child Page'],
|
|
123
|
+
assert_equal ['Default Page', '. . Child Page'],
|
|
124
|
+
CmsPage.options_for_select(cms_sites(:default), page).collect{|t| t.first }
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_load_from_file
|
|
128
|
+
assert !CmsPage.load_from_file(cms_sites(:default), '/')
|
|
129
|
+
|
|
130
|
+
ComfortableMexicanSofa.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
|
|
131
|
+
|
|
132
|
+
assert !CmsPage.load_from_file(cms_sites(:default), '/bogus')
|
|
133
|
+
|
|
134
|
+
assert page = CmsPage.load_from_file(cms_sites(:default), '/')
|
|
135
|
+
assert_equal 'Default Page', page.label
|
|
136
|
+
assert_equal 1, page.cms_blocks.size
|
|
137
|
+
assert page.cms_layout
|
|
138
|
+
assert_equal '<html>Default Page Content</html>', page.content
|
|
139
|
+
|
|
140
|
+
assert page = CmsPage.load_from_file(cms_sites(:default), '/child')
|
|
141
|
+
assert_equal 1, page.cms_blocks.size
|
|
142
|
+
assert page.cms_layout
|
|
143
|
+
assert_equal '<html>Child Page Content</html>', page.content
|
|
144
|
+
|
|
145
|
+
assert page = CmsPage.load_from_file(cms_sites(:default), '/child/subchild')
|
|
146
|
+
assert_equal 1, page.cms_blocks.size
|
|
147
|
+
assert page.cms_layout
|
|
148
|
+
assert_equal 'Nested Layout', page.cms_layout.label
|
|
149
|
+
assert_equal '<html><div>Sub Child Page Content Content for Default Snippet</div></html>', page.content
|
|
121
150
|
end
|
|
122
151
|
|
|
123
152
|
protected
|
|
@@ -20,4 +20,16 @@ class CmsSnippetTest < ActiveSupport::TestCase
|
|
|
20
20
|
assert_equal '', CmsSnippet.content_for('nonexistent_snippet')
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
def test_load_from_file
|
|
24
|
+
assert !CmsSnippet.load_from_file(cms_sites(:default), 'default')
|
|
25
|
+
|
|
26
|
+
ComfortableMexicanSofa.configuration.seed_data_path = File.expand_path('../cms_seeds', File.dirname(__FILE__))
|
|
27
|
+
|
|
28
|
+
assert !CmsSnippet.load_from_file(cms_sites(:default), 'bogus')
|
|
29
|
+
|
|
30
|
+
assert snippet = CmsSnippet.load_from_file(cms_sites(:default), 'default')
|
|
31
|
+
assert_equal 'Default Snippet', snippet.label
|
|
32
|
+
assert_equal 'Content for Default Snippet', snippet.content
|
|
33
|
+
end
|
|
34
|
+
|
|
23
35
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
|
2
|
+
|
|
3
|
+
class HelperTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
def test_initialize_tag
|
|
6
|
+
%w(
|
|
7
|
+
<cms:helper:method_name/>
|
|
8
|
+
).each do |tag_signature|
|
|
9
|
+
assert tag = CmsTag::Helper.initialize_tag(cms_pages(:default), tag_signature)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_initialize_tag_failure
|
|
14
|
+
%w(
|
|
15
|
+
<cms:helper>
|
|
16
|
+
<cms:not_helper:method_name/>
|
|
17
|
+
not_a_tag
|
|
18
|
+
).each do |tag_signature|
|
|
19
|
+
assert_nil CmsTag::Helper.initialize_tag(cms_pages(:default), tag_signature)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_content_and_render
|
|
24
|
+
tag = CmsTag::Helper.initialize_tag(cms_pages(:default), "<cms:helper:method_name/>")
|
|
25
|
+
assert_equal "<%= method_name %>", tag.content
|
|
26
|
+
assert_equal "<%= method_name %>", tag.render
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: comfortable_mexican_sofa
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 17
|
|
5
5
|
prerelease: false
|
|
6
6
|
segments:
|
|
7
7
|
- 1
|
|
8
8
|
- 0
|
|
9
|
-
-
|
|
10
|
-
version: 1.0.
|
|
9
|
+
- 3
|
|
10
|
+
version: 1.0.3
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Oleg Khabarov
|
|
@@ -16,7 +16,7 @@ autorequire:
|
|
|
16
16
|
bindir: bin
|
|
17
17
|
cert_chain: []
|
|
18
18
|
|
|
19
|
-
date: 2010-10-
|
|
19
|
+
date: 2010-10-25 00:00:00 -04:00
|
|
20
20
|
default_executable:
|
|
21
21
|
dependencies:
|
|
22
22
|
- !ruby/object:Gem::Dependency
|
|
@@ -145,6 +145,7 @@ files:
|
|
|
145
145
|
- lib/comfortable_mexican_sofa/cms_tag/field_integer.rb
|
|
146
146
|
- lib/comfortable_mexican_sofa/cms_tag/field_string.rb
|
|
147
147
|
- lib/comfortable_mexican_sofa/cms_tag/field_text.rb
|
|
148
|
+
- lib/comfortable_mexican_sofa/cms_tag/helper.rb
|
|
148
149
|
- lib/comfortable_mexican_sofa/cms_tag/page_datetime.rb
|
|
149
150
|
- lib/comfortable_mexican_sofa/cms_tag/page_integer.rb
|
|
150
151
|
- lib/comfortable_mexican_sofa/cms_tag/page_string.rb
|
|
@@ -180,7 +181,12 @@ files:
|
|
|
180
181
|
- public/stylesheets/comfortable_mexican_sofa/structure.css
|
|
181
182
|
- public/stylesheets/comfortable_mexican_sofa/typography.css
|
|
182
183
|
- script/rails
|
|
183
|
-
- test/
|
|
184
|
+
- test/cms_seeds/test.host/layouts/default.yml
|
|
185
|
+
- test/cms_seeds/test.host/layouts/nested.yml
|
|
186
|
+
- test/cms_seeds/test.host/pages/child.yml
|
|
187
|
+
- test/cms_seeds/test.host/pages/child/subchild.yml
|
|
188
|
+
- test/cms_seeds/test.host/pages/index.yml
|
|
189
|
+
- test/cms_seeds/test.host/snippets/default.yml
|
|
184
190
|
- test/fixtures/cms_blocks.yml
|
|
185
191
|
- test/fixtures/cms_layouts.yml
|
|
186
192
|
- test/fixtures/cms_pages.yml
|
|
@@ -196,6 +202,7 @@ files:
|
|
|
196
202
|
- test/functional/cms_admin/uploads_controller_test.rb
|
|
197
203
|
- test/functional/cms_content_controller_test.rb
|
|
198
204
|
- test/integration/authentication_test.rb
|
|
205
|
+
- test/integration/render_cms_seed_test.rb
|
|
199
206
|
- test/integration/render_cms_test.rb
|
|
200
207
|
- test/integration/sites_test.rb
|
|
201
208
|
- test/test_helper.rb
|
|
@@ -210,6 +217,7 @@ files:
|
|
|
210
217
|
- test/unit/cms_tags/field_integer_test.rb
|
|
211
218
|
- test/unit/cms_tags/field_string_test.rb
|
|
212
219
|
- test/unit/cms_tags/field_text_test.rb
|
|
220
|
+
- test/unit/cms_tags/helper_test.rb
|
|
213
221
|
- test/unit/cms_tags/page_datetime_test.rb
|
|
214
222
|
- test/unit/cms_tags/page_integer_test.rb
|
|
215
223
|
- test/unit/cms_tags/page_string_test.rb
|
|
@@ -217,7 +225,6 @@ files:
|
|
|
217
225
|
- test/unit/cms_tags/partial_test.rb
|
|
218
226
|
- test/unit/cms_tags/snippet_test.rb
|
|
219
227
|
- test/unit/cms_upload_test.rb
|
|
220
|
-
- tmp/restart.txt
|
|
221
228
|
has_rdoc: true
|
|
222
229
|
homepage: http://github.com/theworkinggroup/comfortable-mexican-sofa
|
|
223
230
|
licenses: []
|
|
@@ -260,6 +267,7 @@ test_files:
|
|
|
260
267
|
- test/functional/cms_admin/uploads_controller_test.rb
|
|
261
268
|
- test/functional/cms_content_controller_test.rb
|
|
262
269
|
- test/integration/authentication_test.rb
|
|
270
|
+
- test/integration/render_cms_seed_test.rb
|
|
263
271
|
- test/integration/render_cms_test.rb
|
|
264
272
|
- test/integration/sites_test.rb
|
|
265
273
|
- test/test_helper.rb
|
|
@@ -274,6 +282,7 @@ test_files:
|
|
|
274
282
|
- test/unit/cms_tags/field_integer_test.rb
|
|
275
283
|
- test/unit/cms_tags/field_string_test.rb
|
|
276
284
|
- test/unit/cms_tags/field_text_test.rb
|
|
285
|
+
- test/unit/cms_tags/helper_test.rb
|
|
277
286
|
- test/unit/cms_tags/page_datetime_test.rb
|
|
278
287
|
- test/unit/cms_tags/page_integer_test.rb
|
|
279
288
|
- test/unit/cms_tags/page_string_test.rb
|
data/test/fixtures/README.md
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
Default Test Application Data Structure
|
|
2
|
-
=======================================
|
|
3
|
-
Layout
|
|
4
|
-
------
|
|
5
|
-
<cms:field:default_field:text>
|
|
6
|
-
layout_content_a
|
|
7
|
-
<cms:page:default_page:text>
|
|
8
|
-
layout_content_b
|
|
9
|
-
<cms:snippet:default_snippet>
|
|
10
|
-
layout_content_c
|
|
11
|
-
Page
|
|
12
|
-
----
|
|
13
|
-
### CmsBlock::FieldText
|
|
14
|
-
default_field_content
|
|
15
|
-
### CmsBlock::PageText
|
|
16
|
-
default_page_content_a
|
|
17
|
-
<cms:snippet:default_snippet>
|
|
18
|
-
default_page_content_a
|
|
19
|
-
Snippets
|
|
20
|
-
-------
|
|
21
|
-
### Snippet
|
|
22
|
-
default_snippet_content
|