sections_rails 0.6.10 → 0.6.11
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/lib/sections_rails/section.rb +60 -30
- data/lib/sections_rails/version.rb +1 -1
- data/spec/controllers/errors_controller_spec.rb +15 -0
- data/spec/controllers/partials_controller_spec.rb +74 -0
- data/spec/controllers/script_assets_controller_spec.rb +68 -0
- data/spec/controllers/style_assets_controller_spec.rb +82 -0
- data/spec/controllers/view_types_controller_spec.rb +22 -0
- data/spec/dummy/app/assets/images/rails.png +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/errors_controller.rb +5 -0
- data/spec/dummy/app/controllers/partials_controller.rb +20 -0
- data/spec/dummy/app/controllers/script_assets_controller.rb +18 -0
- data/spec/dummy/app/controllers/style_assets_controller.rb +27 -0
- data/spec/dummy/app/controllers/view_types_controller.rb +10 -0
- data/spec/dummy/app/views/errors/missing_section.html.erb +1 -0
- data/spec/dummy/app/views/layouts/application.html.erb +1 -0
- data/spec/dummy/app/views/partials/custom_partial.html.erb +1 -0
- data/spec/dummy/app/views/partials/disabled.html.erb +2 -0
- data/spec/dummy/app/views/partials/erb_section.html.erb +1 -0
- data/spec/dummy/app/views/partials/haml_section.html.erb +1 -0
- data/spec/dummy/app/views/partials/no_options.html.erb +1 -0
- data/spec/dummy/app/views/partials/production_mode.html.erb +1 -0
- data/spec/dummy/app/views/script_assets/coffeescript.html.erb +1 -0
- data/spec/dummy/app/views/script_assets/custom_script.html.erb +1 -0
- data/spec/dummy/app/views/script_assets/javascript.html.erb +1 -0
- data/spec/dummy/app/views/script_assets/no_script.html.erb +2 -0
- data/spec/dummy/app/views/script_assets/production_mode.html.erb +1 -0
- data/spec/dummy/app/views/style_assets/css.html.erb +1 -0
- data/spec/dummy/app/views/style_assets/css_sass.html.erb +1 -0
- data/spec/dummy/app/views/style_assets/css_scss.html.erb +1 -0
- data/spec/dummy/app/views/style_assets/custom_style.html.erb +1 -0
- data/spec/dummy/app/views/style_assets/no_style.html.erb +2 -0
- data/spec/dummy/app/views/style_assets/production_mode.html.erb +1 -0
- data/spec/dummy/app/views/style_assets/sass.html.erb +1 -0
- data/spec/dummy/app/views/style_assets/scss.html.erb +1 -0
- data/spec/dummy/app/views/view_types/erb.html.erb +1 -0
- data/spec/dummy/app/views/view_types/haml.html.haml +1 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +18 -0
- data/spec/dummy/config/boot.rb +7 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +27 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/sections_rails.rb +0 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/log/development.log +16367 -0
- data/spec/dummy/tmp/cache/assets/CB9/B60/sprockets%2Fe7b839a0806e5c20e5018197f56cd656 +0 -0
- data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/dummy/tmp/cache/assets/D76/4D0/sprockets%2F8a096b6dd59bfda3e461617a95524eaf +0 -0
- data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/dummy/tmp/cache/assets/DE1/6A0/sprockets%2Fcae9aba95894da8a28fa8a5387dc565f +0 -0
- data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/E1D/010/sprockets%2Fdffad412d86bfdfbb1f307d711da21d3 +0 -0
- data/spec/sections_rails/section_spec.rb +24 -1
- data/spec/spec_helper.rb +3 -1
- metadata +137 -14
@@ -23,6 +23,12 @@ module SectionsRails
|
|
23
23
|
@filename ||= File.basename @section_name, '.*'
|
24
24
|
end
|
25
25
|
|
26
|
+
# Path to the folder for asset includes.
|
27
|
+
# Example: 'folder/section'
|
28
|
+
def folder_includepath
|
29
|
+
@folder_includepath ||= File.join directory_name, filename
|
30
|
+
end
|
31
|
+
|
26
32
|
# Path of the folder on the file system.
|
27
33
|
# Example: 'app/sections/folder/section'
|
28
34
|
def folder_filepath
|
@@ -44,8 +50,14 @@ module SectionsRails
|
|
44
50
|
|
45
51
|
# The path for accessing the partial on the filesystem.
|
46
52
|
# Example: '
|
47
|
-
def
|
48
|
-
|
53
|
+
def partial_renderpath partial_filename = nil
|
54
|
+
File.join(directory_name, filename, partial_filename || filename).gsub(/^\//, '')
|
55
|
+
end
|
56
|
+
|
57
|
+
# The path for accessing the partial on the filesystem.
|
58
|
+
# Example: '
|
59
|
+
def partial_filepath partial_filename = nil
|
60
|
+
File.join(SectionsRails.config.path, directory_name,filename, "_#{partial_filename or filename}").gsub(/^\//, '')
|
49
61
|
end
|
50
62
|
|
51
63
|
# For including the partial into views.
|
@@ -76,14 +88,24 @@ module SectionsRails
|
|
76
88
|
end
|
77
89
|
|
78
90
|
# Returns the filename of the partial of this section, or nil if this section has no partial.
|
79
|
-
|
91
|
+
# Uses the given custom partial name, or the default partial name if none is given.
|
92
|
+
def find_partial_filepath partial_filename = nil
|
80
93
|
SectionsRails.config.partial_extensions.each do |ext|
|
81
|
-
path = "#{partial_filepath}.#{ext}"
|
94
|
+
path = "#{partial_filepath(filename)}.#{ext}"
|
82
95
|
return path if File.exists? path
|
83
96
|
end
|
84
97
|
nil
|
85
98
|
end
|
86
99
|
|
100
|
+
# Returns the path of the partial of this section for rendering, or nil if this section has no partial.
|
101
|
+
# Uses the given custom partial name, or the default partial name if none is given.
|
102
|
+
def find_partial_renderpath partial_filename = nil
|
103
|
+
SectionsRails.config.partial_extensions.each do |ext|
|
104
|
+
return partial_renderpath(partial_filename) if File.exists? "#{partial_filepath(filename)}.#{ext}"
|
105
|
+
end
|
106
|
+
nil
|
107
|
+
end
|
108
|
+
|
87
109
|
# Returns a list of all section names in the given text.
|
88
110
|
#
|
89
111
|
# @param [ String ] text
|
@@ -123,54 +145,62 @@ module SectionsRails
|
|
123
145
|
@view.lookup_context.template_exists? partial_includepath
|
124
146
|
end
|
125
147
|
|
126
|
-
# TODO(SZ): missing specs.
|
127
148
|
def render
|
128
149
|
result = []
|
129
150
|
|
151
|
+
# Check if section exists.
|
152
|
+
raise "Section #{folder_filepath} doesn't exist." unless Dir.exists? folder_filepath
|
153
|
+
|
130
154
|
# Include assets only for development mode.
|
131
155
|
if Rails.env != 'production'
|
132
156
|
|
133
157
|
# Include JS assets.
|
134
|
-
if @options
|
135
|
-
|
136
|
-
|
137
|
-
|
158
|
+
if @options.has_key? :js
|
159
|
+
if @options[:js]
|
160
|
+
result << @view.javascript_include_tag(File.join(folder_includepath, @options[:js]))
|
161
|
+
else
|
162
|
+
# :js => (false|nil) given --> don't include any JS.
|
163
|
+
end
|
138
164
|
else
|
165
|
+
# No :js configuration option given --> include the default script.
|
139
166
|
js_includepath = find_js_includepath
|
140
167
|
result << @view.javascript_include_tag(js_includepath) if js_includepath
|
141
168
|
end
|
142
169
|
|
143
170
|
# Include CSS assets.
|
144
|
-
if @options
|
145
|
-
|
146
|
-
|
147
|
-
|
171
|
+
if @options.has_key? :css
|
172
|
+
if @options[:css]
|
173
|
+
# Custom filename for :css given --> include the given CSS file.
|
174
|
+
result << @view.stylesheet_link_tag(File.join(folder_includepath, @options[:css]))
|
175
|
+
else
|
176
|
+
# ":css => false" given --> don't include any CSS.
|
177
|
+
end
|
148
178
|
else
|
179
|
+
# No option for :css given --> include the default stylesheet.
|
149
180
|
css_includepath = find_css_includepath
|
150
181
|
result << @view.stylesheet_link_tag(css_includepath) if css_includepath
|
151
182
|
end
|
152
183
|
end
|
153
184
|
|
154
185
|
# Render the section partial into the view.
|
155
|
-
|
156
|
-
|
186
|
+
if @options.has_key? :partial
|
187
|
+
if @options[:partial] == :tag
|
188
|
+
# :partial => :tag given --> render the empty tag even if there is a partial present.
|
157
189
|
result << @view.content_tag(:div, '', :class => filename)
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
end
|
170
|
-
|
190
|
+
elsif @options[:partial]
|
191
|
+
# Custom partial name given --> render that partial.
|
192
|
+
result << @view.render(find_partial_renderpath(@options[:partial]), @options[:locals])
|
193
|
+
else
|
194
|
+
# :partial => (false|nil) given --> render nothing.
|
195
|
+
end
|
196
|
+
else
|
197
|
+
# No :partial option given --> render the default partial.
|
198
|
+
partial_filepath = find_partial_filepath
|
199
|
+
if partial_filepath
|
200
|
+
result << @view.render(:partial => partial_includepath, :locals => @options[:locals])
|
171
201
|
else
|
172
|
-
|
173
|
-
|
202
|
+
result << @view.content_tag(:div, '', :class => filename)
|
203
|
+
end
|
174
204
|
end
|
175
205
|
|
176
206
|
result.join("\n").html_safe
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PartialsController do
|
4
|
+
render_views
|
5
|
+
|
6
|
+
describe 'supported partial types' do
|
7
|
+
after :each do
|
8
|
+
response.should be_success
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'allows to use ERB partials' do
|
12
|
+
get :erb_section
|
13
|
+
response.body.strip.should == 'ERB partial content'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'allows to use HAML partials' do
|
17
|
+
get :haml_section
|
18
|
+
response.body.strip.should == 'HAML partial content'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'no partial options given' do
|
23
|
+
it 'renders the default partial' do
|
24
|
+
get :no_options
|
25
|
+
response.body.strip.should == 'default partial content'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'providing a custom partial name' do
|
30
|
+
before :each do
|
31
|
+
get :custom_partial
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'renders the given partial' do
|
35
|
+
response.body.should include 'custom partial content'
|
36
|
+
end
|
37
|
+
|
38
|
+
it "doesn't render the default partial" do
|
39
|
+
response.body.should_not include 'default partial content'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'disabling partials for a section' do
|
44
|
+
before :each do
|
45
|
+
get :disabled
|
46
|
+
end
|
47
|
+
|
48
|
+
it "doesn't render the partial tag" do
|
49
|
+
response.body.strip.should_not include '<div class="disabled">'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "doesn't render the partial" do
|
53
|
+
response.body.strip.should_not include 'disabled partial content'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'production mode' do
|
58
|
+
|
59
|
+
before :each do
|
60
|
+
Rails.env = 'production'
|
61
|
+
end
|
62
|
+
|
63
|
+
after :each do
|
64
|
+
Rails.env = 'test'
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'renders partials normally' do
|
68
|
+
get :production_mode
|
69
|
+
response.body.strip.should include 'partial content'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ScriptAssetsController do
|
4
|
+
render_views
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
RSpec::Matchers.define :have_script_tag do |tag_name|
|
8
|
+
match do |body|
|
9
|
+
body =~ Regexp.new("<script.*src=\"#{tag_name}\".*<\/script>")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
after :each do
|
15
|
+
response.should be_success
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'supported script languages' do
|
19
|
+
it 'allows to use JavaScript assets' do
|
20
|
+
get :javascript
|
21
|
+
response.body.should have_script_tag '/assets/script_assets/javascript/javascript.js'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'allows to use CoffeeScript assets' do
|
25
|
+
get :coffeescript
|
26
|
+
response.body.should have_script_tag '/assets/script_assets/coffeescript/coffeescript.js'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'setting a custom script filename' do
|
31
|
+
before :each do
|
32
|
+
get :custom_script
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'includes the given script file into the page' do
|
36
|
+
response.body.should have_script_tag '/assets/script_assets/custom_script/different_name.js'
|
37
|
+
end
|
38
|
+
|
39
|
+
it "doesn't include the default script file into the page" do
|
40
|
+
response.body.should_not have_script_tag '/assets/script_assets/custom_script/custom_script.js'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'setting the script configuration option to false' do
|
45
|
+
it "doesn't include any script tag into the page" do
|
46
|
+
get :no_script
|
47
|
+
response.body.should_not match /<script/
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'production mode' do
|
52
|
+
before :each do
|
53
|
+
Rails.env = 'production'
|
54
|
+
end
|
55
|
+
|
56
|
+
after :each do
|
57
|
+
Rails.env = 'test'
|
58
|
+
end
|
59
|
+
|
60
|
+
it "doesn't render script assets" do
|
61
|
+
get :production_mode
|
62
|
+
response.should_not have_script_tag '/assets/script_assets/production_mode/production_mode.js'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe StyleAssetsController do
|
4
|
+
render_views
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
RSpec::Matchers.define :have_style_tag do |tag_name|
|
8
|
+
match do |body|
|
9
|
+
body =~ Regexp.new("<link.*href=\"#{tag_name}\".*>")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
after :each do
|
15
|
+
response.should be_success
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'supported style languages' do
|
19
|
+
it 'CSS assets' do
|
20
|
+
get :css
|
21
|
+
response.body.should have_style_tag '/assets/style_assets/css/css.css'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'SASS assets' do
|
25
|
+
get :sass
|
26
|
+
response.body.should have_style_tag '/assets/style_assets/sass/sass.css'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'CSS.SASS assets' do
|
30
|
+
get :css_sass
|
31
|
+
response.body.should have_style_tag '/assets/style_assets/css_sass/css_sass.css'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'SCSS assets' do
|
35
|
+
get :scss
|
36
|
+
response.body.should have_style_tag '/assets/style_assets/scss/scss.css'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'CSS.SCSS assets' do
|
40
|
+
get :css_scss
|
41
|
+
response.body.should have_style_tag '/assets/style_assets/css_scss/css_scss.css'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'setting a custom style filename' do
|
46
|
+
before :each do
|
47
|
+
get :custom_style
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'includes the given style file into the page' do
|
51
|
+
response.body.should have_style_tag '/assets/style_assets/custom_style/different_name.css'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "doesn't include the default script file into the page" do
|
55
|
+
response.body.should_not have_style_tag '/assets/style_assets/custom_style/custom_style.css'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'setting the script configuration option to false' do
|
60
|
+
it "doesn't include any script tag into the page" do
|
61
|
+
get :no_style
|
62
|
+
response.body.should_not have_style_tag '/assets/style_assets/no_style/no_style.css'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'production_mode' do
|
67
|
+
|
68
|
+
before :each do
|
69
|
+
Rails.env = "production"
|
70
|
+
end
|
71
|
+
|
72
|
+
after :each do
|
73
|
+
Rails.env = "test"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "doesn't render style assets" do
|
77
|
+
get :production_mode
|
78
|
+
response.body.should_not have_style_tag '/assets/style_assets/production_mode/production_mode.css'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ViewTypesController do
|
4
|
+
render_views
|
5
|
+
|
6
|
+
describe 'supported view types' do
|
7
|
+
after :each do
|
8
|
+
response.should be_success
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'allows to use the section helper in ERB views' do
|
12
|
+
get :erb
|
13
|
+
response.body.strip.should == 'Foo partial content'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'allows to use the section helper in HAML views' do
|
17
|
+
get :haml
|
18
|
+
response.body.strip.should == 'Foo partial content'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// the compiled file.
|
9
|
+
//
|
10
|
+
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
11
|
+
// GO AFTER THE REQUIRES BELOW.
|
12
|
+
//
|
13
|
+
//= require jquery
|
14
|
+
//= require jquery_ujs
|
15
|
+
//= require_tree .
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
12
|
+
*= require_tree .
|
13
|
+
*/
|