sinatra_more 0.3.7 → 0.3.8
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.rdoc +11 -0
- data/TODO +1 -0
- data/VERSION +1 -1
- data/lib/sinatra_more/markup_plugin/output_helpers.rb +35 -10
- data/sinatra_more.gemspec +3 -1
- data/test/fixtures/markup_app/views/content_for.erb +11 -0
- data/test/fixtures/markup_app/views/content_for.haml +9 -0
- data/test/generators/test_skeleton_generator.rb +1 -1
- data/test/markup_plugin/test_output_helpers.rb +14 -0
- metadata +3 -1
data/README.rdoc
CHANGED
@@ -93,6 +93,16 @@ methods should be very familiar to anyone who has used rails view helpers.
|
|
93
93
|
|
94
94
|
==== Output Helpers
|
95
95
|
|
96
|
+
* <tt>content_for(key, &block)</tt>
|
97
|
+
* Capture a block of content to be rendered at a later time.
|
98
|
+
* content_for(:head) { ...content... }
|
99
|
+
* Also supports arguments passed to the content block
|
100
|
+
* content_for(:head) { |param1, param2| ...content... }
|
101
|
+
* <tt>yield_content(key, *args)</tt>
|
102
|
+
* Render the captured content blocks for a given key.
|
103
|
+
* yield_content :head
|
104
|
+
* Also supports arguments yielded to the content block
|
105
|
+
* yield_content :head, param1, param2
|
96
106
|
* <tt>capture_html(*args, &block)</tt>
|
97
107
|
* Captures the html from a block of template code for erb or haml
|
98
108
|
* <tt>capture_html(&block)</tt> => "...html..."
|
@@ -603,6 +613,7 @@ See the wiki article for additional information: <http://wiki.github.com/nesquen
|
|
603
613
|
* Thanks to kelredd (http://github.com/kelredd) for the <tt>sinatra_helpers</tt> code that helped me to create erb capture and concat methods.
|
604
614
|
* Thanks to sbfaulkner for the <tt>sinatra-helpers</tt> code that I browsed through many times while starting this library.
|
605
615
|
* Thanks to vestel for the excellent modified <tt>pony</tt> fork which in part powers the mailer_plugin (http://github.com/vestel/pony)
|
616
|
+
* Thanks to focat and sinatra-content-for library (http://github.com/focat/sinatra-content-for) for a good content_for starting point
|
606
617
|
* Thanks to wycats and all for the awesome Thor gem which made creating the sinatra generator relatively painless
|
607
618
|
|
608
619
|
== Contributors
|
data/TODO
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
|
11
11
|
= COMPLETED
|
12
12
|
|
13
|
+
* Add content_for / yield tags similar to rails
|
13
14
|
* Created application generator using thor
|
14
15
|
* Add support for a MailerPlugin which will make sending emails a breeze (http://github.com/hiroshi/pony)
|
15
16
|
* Add support for missing formbuilder fields (select, and standard_form_builder methods i.e check_box_group)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.8
|
@@ -4,7 +4,7 @@ module SinatraMore
|
|
4
4
|
# capture_html(&block) => "...html..."
|
5
5
|
def capture_html(*args, &block)
|
6
6
|
if self.respond_to?(:is_haml?) && is_haml?
|
7
|
-
|
7
|
+
block_is_haml?(block) ? capture_haml(*args, &block) : block.call
|
8
8
|
elsif has_erb_buffer?
|
9
9
|
result_text = capture_erb(*args, &block)
|
10
10
|
result_text.present? ? result_text : (block_given? && block.call(*args))
|
@@ -12,7 +12,7 @@ module SinatraMore
|
|
12
12
|
block.call(*args)
|
13
13
|
end
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
# Outputs the given text to the templates buffer directly
|
17
17
|
# concat_content("This will be output to the template buffer in erb or haml")
|
18
18
|
def concat_content(text="")
|
@@ -24,36 +24,61 @@ module SinatraMore
|
|
24
24
|
text
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
# Returns true if the block is from an ERB or HAML template; false otherwise.
|
29
29
|
# Used to determine if html should be returned or concatted to view
|
30
30
|
# block_is_template?(block)
|
31
31
|
def block_is_template?(block)
|
32
|
-
|
32
|
+
block && (block_is_erb?(block) || (self.respond_to?(:block_is_haml?) && block_is_haml?(block)))
|
33
|
+
end
|
34
|
+
|
35
|
+
# Capture a block of content to be rendered at a later time.
|
36
|
+
# Your blocks can also receive values, which are passed to them by <tt>yield_content</tt>
|
37
|
+
# content_for(:name) { ...content... }
|
38
|
+
# content_for(:name) { |name| ...content... }
|
39
|
+
def content_for(key, &block)
|
40
|
+
content_blocks[key.to_sym] << block
|
33
41
|
end
|
34
|
-
|
42
|
+
|
43
|
+
# Render the captured content blocks for a given key.
|
44
|
+
# You can also pass values to the content blocks by passing them
|
45
|
+
# as arguments after the key.
|
46
|
+
# yield_content :include
|
47
|
+
# yield_content :head, "param1", "param2"
|
48
|
+
def yield_content(key, *args)
|
49
|
+
content_blocks[key.to_sym].map { |content|
|
50
|
+
capture_html(*args, &content)
|
51
|
+
}.join
|
52
|
+
end
|
53
|
+
|
35
54
|
protected
|
36
|
-
|
55
|
+
|
56
|
+
# Retrieves content_blocks stored by content_for or within yield_content
|
57
|
+
# content_blocks[:name] => ['...', '...']
|
58
|
+
def content_blocks
|
59
|
+
@content_blocks ||= Hash.new {|h,k| h[k] = [] }
|
60
|
+
end
|
61
|
+
|
37
62
|
# Used to capture the html from a block of erb code
|
38
63
|
# capture_erb(&block) => '...html...'
|
39
64
|
def capture_erb(*args, &block)
|
40
65
|
erb_with_output_buffer { block_given? && block.call(*args) }
|
41
66
|
end
|
42
|
-
|
67
|
+
|
43
68
|
# Concats directly to an erb template
|
44
69
|
# erb_concat("Direct to buffer")
|
45
70
|
def erb_concat(text)
|
46
71
|
@_out_buf << text if has_erb_buffer?
|
47
72
|
end
|
48
|
-
|
73
|
+
|
49
74
|
# Returns true if an erb buffer is detected
|
50
75
|
# has_erb_buffer? => true
|
51
76
|
def has_erb_buffer?
|
52
77
|
!@_out_buf.nil?
|
53
78
|
end
|
54
|
-
|
79
|
+
|
55
80
|
# Used to determine if a block is called from ERB.
|
56
|
-
# NOTE: This doesn't actually work yet because the variable __in_erb_template
|
81
|
+
# NOTE: This doesn't actually work yet because the variable __in_erb_template
|
57
82
|
# hasn't been defined in ERB. We need to find a way to fix this.
|
58
83
|
def block_is_erb?(block)
|
59
84
|
has_erb_buffer? || block && eval('defined? __in_erb_template', block)
|
data/sinatra_more.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sinatra_more}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Nathan Esquenazi"]
|
@@ -94,6 +94,8 @@ Gem::Specification.new do |s|
|
|
94
94
|
"test/fixtures/markup_app/app.rb",
|
95
95
|
"test/fixtures/markup_app/views/capture_concat.erb",
|
96
96
|
"test/fixtures/markup_app/views/capture_concat.haml",
|
97
|
+
"test/fixtures/markup_app/views/content_for.erb",
|
98
|
+
"test/fixtures/markup_app/views/content_for.haml",
|
97
99
|
"test/fixtures/markup_app/views/content_tag.erb",
|
98
100
|
"test/fixtures/markup_app/views/content_tag.haml",
|
99
101
|
"test/fixtures/markup_app/views/form_for.erb",
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% content_for :demo do %>
|
2
|
+
<h1>This is content yielded from a content_for</h1>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div class='demo'><%= yield_content :demo %></p>
|
6
|
+
|
7
|
+
<% content_for :demo2 do |fname, lname| %>
|
8
|
+
<h1>This is content yielded with name <%= fname + " " + lname %></h1>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<div class='demo2'><%= yield_content :demo2, "Johnny", "Smith" %></div>
|
@@ -146,7 +146,7 @@ class TestSkeletonGenerator < Test::Unit::TestCase
|
|
146
146
|
buffer = silence_logger { SinatraMore::SkeletonGenerator.start(['sample_app', '/tmp', '--test=riot', '--script=none']) }
|
147
147
|
assert_match /Applying.*?riot.*?test/, buffer
|
148
148
|
assert_match_in_file(/require 'riot'/, '/tmp/sample_app/test/test_config.rb')
|
149
|
-
assert_match_in_file(/Riot::
|
149
|
+
assert_match_in_file(/Riot::Situation/, '/tmp/sample_app/test/test_config.rb')
|
150
150
|
end
|
151
151
|
|
152
152
|
should "properly generate for rspec" do
|
@@ -6,6 +6,20 @@ class TestOutputHelpers < Test::Unit::TestCase
|
|
6
6
|
MarkupDemo.tap { |app| app.set :environment, :test }
|
7
7
|
end
|
8
8
|
|
9
|
+
context 'for #content_for method' do
|
10
|
+
should 'work for erb templates' do
|
11
|
+
visit '/erb/content_for'
|
12
|
+
assert_have_selector '.demo h1', :content => "This is content yielded from a content_for"
|
13
|
+
assert_have_selector '.demo2 h1', :content => "This is content yielded with name Johnny Smith"
|
14
|
+
end
|
15
|
+
|
16
|
+
should "work for haml templates" do
|
17
|
+
visit '/haml/content_for'
|
18
|
+
assert_have_selector '.demo h1', :content => "This is content yielded from a content_for"
|
19
|
+
assert_have_selector '.demo2 h1', :content => "This is content yielded with name Johnny Smith"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
9
23
|
context 'for #capture_html method' do
|
10
24
|
should "work for erb templates" do
|
11
25
|
visit '/erb/capture_concat'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra_more
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Esquenazi
|
@@ -187,6 +187,8 @@ files:
|
|
187
187
|
- test/fixtures/markup_app/app.rb
|
188
188
|
- test/fixtures/markup_app/views/capture_concat.erb
|
189
189
|
- test/fixtures/markup_app/views/capture_concat.haml
|
190
|
+
- test/fixtures/markup_app/views/content_for.erb
|
191
|
+
- test/fixtures/markup_app/views/content_for.haml
|
190
192
|
- test/fixtures/markup_app/views/content_tag.erb
|
191
193
|
- test/fixtures/markup_app/views/content_tag.haml
|
192
194
|
- test/fixtures/markup_app/views/form_for.erb
|