sections_rails 0.6.0 → 0.6.1
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/README.md +24 -4
- data/Rakefile +3 -15
- data/lib/sections_rails/string_tools.rb +15 -0
- data/lib/sections_rails/version.rb +1 -1
- data/lib/sections_rails.rb +22 -15
- data/lib/tasks/sections_rails_tasks.rake +25 -27
- data/spec/lib/string_tools_spec.rb +69 -0
- data/spec/spec_helper.rb +0 -4
- metadata +33 -8
data/README.md
CHANGED
@@ -97,12 +97,18 @@ In this case, the _sections_ helper creates an empty div in the view.
|
|
97
97
|
## Options
|
98
98
|
|
99
99
|
By default, a section automatically includes partials, css, and js files with the section name if they exist.
|
100
|
-
This convention can be overridden
|
101
|
-
|
100
|
+
This convention can be overridden. The following example renders the _hello_world_ section with a different partial, with no stylesheet,
|
101
|
+
and it uses the custom _foobar.js_ instead of _hello_world.js_.
|
102
102
|
|
103
|
-
|
104
|
-
|
103
|
+
```erb
|
104
|
+
<%= section :hello_world, partial: 'hello_new', css: false, js: 'foobar.js' %>
|
105
|
+
```
|
105
106
|
|
107
|
+
It is also possible to provide parameters to the rendered partial.
|
108
|
+
|
109
|
+
```erb
|
110
|
+
<%= section :hello_world, locals: { message: 'Greetings!' } %>
|
111
|
+
```
|
106
112
|
|
107
113
|
## Creating new sections.
|
108
114
|
|
@@ -127,6 +133,20 @@ _This feature is still under development._
|
|
127
133
|
To test them for example using [Konacha](https://github.com/jfirebaugh/konacha), create a symlink to _app/sections_ in _spec/javascript_.
|
128
134
|
|
129
135
|
|
136
|
+
# Development
|
137
|
+
|
138
|
+
## Unit tests
|
139
|
+
|
140
|
+
```bash
|
141
|
+
$ rake
|
142
|
+
```
|
143
|
+
|
144
|
+
To automatically run unit tests when files change, run
|
145
|
+
|
146
|
+
```bash
|
147
|
+
$ bundle exec guard -c
|
148
|
+
```
|
149
|
+
|
130
150
|
# Missing features
|
131
151
|
|
132
152
|
_Sections_rails_ is in prototypical development and far from complete. Missing features are:
|
data/Rakefile
CHANGED
@@ -22,18 +22,6 @@ end
|
|
22
22
|
|
23
23
|
Bundler::GemHelper.install_tasks
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
namespace :spec do
|
31
|
-
|
32
|
-
desc "Run unit specs"
|
33
|
-
RSpec::Core::RakeTask.new('unit') do |t|
|
34
|
-
t.pattern = 'spec/{*_spec.rb}'
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
desc "Run the unit tests"
|
39
|
-
task :spec => ['spec:unit']
|
25
|
+
require 'rspec/core/rake_task'
|
26
|
+
RSpec::Core::RakeTask.new :spec
|
27
|
+
task :default => :spec
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Returns a list of all section names in the given text.
|
2
|
+
def find_sections text
|
3
|
+
result = text.scan(/<%=\s*section\s+['":]([^'",\s]+)/).flatten.sort.uniq
|
4
|
+
result.concat text.scan(/^\s*\=\s*section\s+['":]([^'",\s]+)/).flatten.sort.uniq
|
5
|
+
result
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
# Returns directory and filename portion of the given path.
|
10
|
+
def split_path paths
|
11
|
+
segments = paths.split '/'
|
12
|
+
directory = segments[0..-2].join('/')
|
13
|
+
directory += '/' if directory.size > 0
|
14
|
+
[directory, segments[-1]]
|
15
|
+
end
|
data/lib/sections_rails.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
|
+
require 'sections_rails/string_tools'
|
2
|
+
|
1
3
|
module SectionsRails
|
2
4
|
|
3
5
|
require "sections_rails/railtie" if defined?(Rails)
|
4
6
|
|
5
7
|
def section combined_name, options = {}
|
6
|
-
|
8
|
+
result = []
|
7
9
|
|
8
10
|
# Split the parameter into file name and directory name.
|
9
|
-
|
10
|
-
filename = split_names[-1]
|
11
|
-
directory = (split_names.size > 1 ? split_names[0..-2] : []).join '/'
|
12
|
-
directory += '/' if directory.size > 0
|
11
|
+
directory, filename = split_path combined_name
|
13
12
|
directory_path = "#{Rails.root}/app/sections/#{directory}#{filename}" # Directory of section: /app/sections/admin/logo
|
14
13
|
|
15
14
|
# Add assets of section when in dev mode.
|
@@ -19,22 +18,30 @@ module SectionsRails
|
|
19
18
|
# Include JS assets.
|
20
19
|
if options.has_key? :js
|
21
20
|
if options[:js]
|
22
|
-
|
21
|
+
# Custom :js filename given --> load the given JS file.
|
22
|
+
result << javascript_include_tag("#{directory}#{filename}/#{options[:js]}")
|
23
|
+
else
|
24
|
+
# js: false given --> don't do anything here.
|
23
25
|
end
|
24
26
|
else
|
27
|
+
# No :js option given --> load the default JS file.
|
25
28
|
if File.exists?("#{file_path}.js") || File.exists?("#{file_path}.js.coffee") || File.exists?("#{file_path}.coffee")
|
26
|
-
|
29
|
+
result << javascript_include_tag("#{directory}#{filename}/#{filename}")
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
30
33
|
# Include CSS assets.
|
31
34
|
if options.has_key? :css
|
32
35
|
if options[:css]
|
33
|
-
|
36
|
+
# Custom :css option given --> render the given file.
|
37
|
+
result << stylesheet_link_tag("#{directory}#{filename}/#{options[:css]}")
|
38
|
+
else
|
39
|
+
# css: false given --> don't render any css.
|
34
40
|
end
|
35
41
|
else
|
42
|
+
# No :css option given --> render the default :css file.
|
36
43
|
if File.exists?("#{file_path}.css") || File.exists?("#{file_path}.css.scss") || File.exists?("#{file_path}.css.sass") || File.exists?("#{file_path}.scss") || File.exists?("#{file_path}.sass")
|
37
|
-
|
44
|
+
result << stylesheet_link_tag("#{directory}#{filename}/#{filename}")
|
38
45
|
end
|
39
46
|
end
|
40
47
|
end
|
@@ -44,22 +51,22 @@ module SectionsRails
|
|
44
51
|
if options.has_key? :partial
|
45
52
|
if options[:partial] == :tag
|
46
53
|
# :partial => :tag given --> render the tag.
|
47
|
-
|
54
|
+
result << content_tag(:div, '', :class => filename)
|
48
55
|
elsif options[:partial]
|
49
56
|
# some value for :partial given --> render the given partial.
|
50
|
-
|
57
|
+
result << render(:partial => "/../sections/#{directory}#{filename}/#{options[:partial]}", :locals => options[:locals])
|
51
58
|
else
|
52
|
-
# :
|
59
|
+
# partial: false or nil given --> render nothing
|
53
60
|
end
|
54
61
|
else
|
55
62
|
# No :partial option given --> render the file or tag per convention.
|
56
63
|
if File.exists?("#{partial_path}.erb") || File.exists?("#{partial_path}.haml")
|
57
|
-
|
64
|
+
result << render(:partial => "/../sections/#{directory}#{filename}/#{filename}", :locals => options[:locals])
|
58
65
|
else
|
59
|
-
|
66
|
+
result << content_tag(:div, '', :class => filename)
|
60
67
|
end
|
61
68
|
end
|
62
|
-
|
69
|
+
result.join("\n").html_safe
|
63
70
|
end
|
64
71
|
|
65
72
|
end
|
@@ -4,18 +4,26 @@ namespace :sections do
|
|
4
4
|
task :prepare do
|
5
5
|
puts "\nPreparing sections assets ..."
|
6
6
|
|
7
|
-
# Find all
|
8
|
-
|
9
|
-
|
10
|
-
# Get all sections used in the views.
|
11
|
-
sections = views.map do |view|
|
12
|
-
find_sections_in_view IO.read "app/views/#{view}"
|
7
|
+
# Find all sections used in the views.
|
8
|
+
sections = find_all_views('app/views').map do |view|
|
9
|
+
find_sections IO.read"app/views/#{view}"
|
13
10
|
end.flatten
|
14
11
|
|
12
|
+
# Find all sections within the already known sections.
|
13
|
+
i = 0
|
14
|
+
while i < sections.size
|
15
|
+
section = sections[i]
|
16
|
+
referenced_sections = find_sections_in_section section
|
17
|
+
referenced_sections.each do |referenced_section|
|
18
|
+
sections << referenced_section unless sections.include? referenced_section
|
19
|
+
end
|
20
|
+
i += 1
|
21
|
+
end
|
22
|
+
sections.sort!
|
23
|
+
|
15
24
|
# Create the require file for application.js.
|
16
25
|
File.open "app/assets/javascripts/application_sections.js", 'w' do |file|
|
17
26
|
sections.each do |section|
|
18
|
-
|
19
27
|
if File.exists?(asset_path section, '.js') || File.exists?(asset_path section, '.js.coffee') || File.exists?(asset_path section, '.coffee')
|
20
28
|
file.write "//= require #{require_path section}\n"
|
21
29
|
end
|
@@ -100,42 +108,32 @@ namespace :sections do
|
|
100
108
|
result
|
101
109
|
end
|
102
110
|
|
111
|
+
# Used for :prepare_pages. Not used right now.
|
103
112
|
def parse_views views
|
104
113
|
result = {}
|
105
114
|
views_to_parse.each do |view_to_parse|
|
106
115
|
view_text = IO.read(File.join root, view_to_parse)
|
107
|
-
result[view_to_parse] =
|
116
|
+
result[view_to_parse] = find_sections_in_text view_text
|
108
117
|
end
|
109
118
|
result
|
110
119
|
end
|
111
120
|
|
112
|
-
|
113
|
-
def
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
|
-
# Returns whether the given file contains the given text somewhere in its content.
|
120
|
-
def file_contains file_name, text
|
121
|
-
IO.read(file_name) =~ text
|
121
|
+
|
122
|
+
def find_sections_in_section section_name
|
123
|
+
directory, filename = split_path section_name
|
124
|
+
section_content = IO.read "app/sections/#{directory}#{filename}/_#{filename}.html.haml"
|
125
|
+
find_sections section_content
|
122
126
|
end
|
123
|
-
|
127
|
+
|
124
128
|
# Returns the path to the asset in the given section.
|
125
129
|
def asset_path section_name, asset_extension = nil, asset_prefix = nil
|
126
|
-
|
127
|
-
filename = split_names[-1]
|
128
|
-
directory = split_names[0..-2].join '/'
|
129
|
-
directory += '/' if directory.size > 0
|
130
|
+
directory, filename = split_path section_name
|
130
131
|
"app/sections/#{directory}#{filename}/#{asset_prefix}#{filename}#{asset_extension}"
|
131
132
|
end
|
132
133
|
|
133
134
|
# Returns the relative path to the asset for the asset pipeline.
|
134
135
|
def require_path section_name
|
135
|
-
|
136
|
-
filename = split_names[-1]
|
137
|
-
directory = split_names[0..-2].join '/'
|
138
|
-
directory += '/' if directory.size > 0
|
136
|
+
directory, filename = split_path section_name
|
139
137
|
"../../sections/#{directory}#{filename}/#{filename}"
|
140
138
|
end
|
141
139
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'sections_rails/string_tools'
|
3
|
+
|
4
|
+
describe 'string_tools' do
|
5
|
+
|
6
|
+
describe 'find_sections' do
|
7
|
+
it 'finds ERB sections with symbols' do
|
8
|
+
find_sections("one <%= section :alpha %> two").should == ['alpha']
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'finds ERB sections with single quotes' do
|
12
|
+
find_sections("one <%= section 'alpha' %> two").should == ['alpha']
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'finds ERB sections with double quotes' do
|
16
|
+
find_sections('one <%= section "alpha" %> two').should == ['alpha']
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'finds ERB sections with parameters' do
|
20
|
+
find_sections('one <%= section "alpha", css: false %> two').should == ['alpha']
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'finds HAML sections with symbols' do
|
24
|
+
find_sections("= section :alpha").should == ['alpha']
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'finds HAML sections with single quotes' do
|
28
|
+
find_sections("= section 'alpha'").should == ['alpha']
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'finds HAML sections with double quotes' do
|
32
|
+
find_sections('= section "alpha"').should == ['alpha']
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'finds indented HAML sections' do
|
36
|
+
find_sections(' = section "alpha"').should == ['alpha']
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'finds HAML sections with parameters' do
|
40
|
+
find_sections('= section "alpha", css: false').should == ['alpha']
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'finds all results in the text' do
|
44
|
+
find_sections("one <%= section 'alpha' \ntwo <%= section 'beta'").should == ['alpha', 'beta']
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'sorts the results' do
|
48
|
+
find_sections("one <%= section 'beta' \ntwo <%= section 'alpha'").should == ['alpha', 'beta']
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'removes duplicates' do
|
52
|
+
find_sections("one <%= section 'alpha' \ntwo <%= section 'alpha'").should == ['alpha']
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'split_path' do
|
57
|
+
it 'returns the directory and filename of the given path' do
|
58
|
+
directory, filename = split_path '/one/two/three.js'
|
59
|
+
directory.should == '/one/two/'
|
60
|
+
filename.should == 'three.js'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns '' if there is no directory" do
|
64
|
+
directory, filename = split_path 'three.js'
|
65
|
+
directory.should == ''
|
66
|
+
filename.should == 'three.js'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler/setup'
|
3
|
-
#require "lib/sections_rails"
|
4
3
|
require 'rspec'
|
5
4
|
|
6
5
|
# Configure Rails Environment
|
7
6
|
ENV["RAILS_ENV"] = "test"
|
8
7
|
#Rails = Hashie::Mash.new({:env => 'test'})
|
9
8
|
|
10
|
-
require 'sections_rails' # and any other gems you need
|
11
|
-
|
12
|
-
|
13
9
|
# Load support files
|
14
10
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
15
11
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sections_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70244820224220 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70244820224220
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70244820223480 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70244820223480
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sqlite3
|
38
|
-
requirement: &
|
38
|
+
requirement: &70244820222620 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,29 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70244820222620
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: guard-rspec
|
49
|
+
requirement: &70244820221720 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70244820221720
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rb-fsevent
|
60
|
+
requirement: &70244820220540 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70244820220540
|
47
69
|
description: Sections_rails adds infrastructure to the view layer of Ruby on Rails.
|
48
70
|
It allows to define and use the HTML, CSS, and JavaScript code of dedicated sections
|
49
71
|
of pages together in one place.
|
@@ -56,12 +78,14 @@ files:
|
|
56
78
|
- lib/generators/section_generator.rb
|
57
79
|
- lib/generators/sections_generator.rb
|
58
80
|
- lib/sections_rails/railtie.rb
|
81
|
+
- lib/sections_rails/string_tools.rb
|
59
82
|
- lib/sections_rails/version.rb
|
60
83
|
- lib/sections_rails.rb
|
61
84
|
- lib/tasks/sections_rails_tasks.rake
|
62
85
|
- MIT-LICENSE
|
63
86
|
- Rakefile
|
64
87
|
- README.md
|
88
|
+
- spec/lib/string_tools_spec.rb
|
65
89
|
- spec/spec_helper.rb
|
66
90
|
homepage: https://github.com/kevgo/sections_rails
|
67
91
|
licenses: []
|
@@ -89,4 +113,5 @@ specification_version: 3
|
|
89
113
|
summary: A rails plugin that allows to define the HTML, CSS, and JS for individual
|
90
114
|
sections of pages as one unit.
|
91
115
|
test_files:
|
116
|
+
- spec/lib/string_tools_spec.rb
|
92
117
|
- spec/spec_helper.rb
|