comfortable_mexican_sofa 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|