inversion 0.1.1 → 0.2.0
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.tar.gz.sig +0 -0
- data/ChangeLog +157 -28
- data/History.rdoc +8 -0
- data/Manifest.txt +2 -3
- data/Rakefile +1 -3
- data/lib/inversion.rb +2 -2
- data/lib/inversion/exceptions.rb +1 -1
- data/lib/inversion/{template/parser.rb → parser.rb} +5 -5
- data/lib/inversion/renderstate.rb +55 -5
- data/lib/inversion/template.rb +5 -3
- data/lib/inversion/template/attrtag.rb +19 -12
- data/lib/inversion/template/begintag.rb +1 -2
- data/lib/inversion/template/configtag.rb +7 -1
- data/lib/inversion/template/containertag.rb +8 -3
- data/lib/inversion/template/elsetag.rb +16 -0
- data/lib/inversion/template/elsiftag.rb +16 -0
- data/lib/inversion/template/escapetag.rb +1 -1
- data/lib/inversion/template/fortag.rb +2 -5
- data/lib/inversion/template/iftag.rb +17 -35
- data/lib/inversion/template/importtag.rb +2 -1
- data/lib/inversion/template/includetag.rb +2 -0
- data/lib/inversion/template/node.rb +1 -1
- data/lib/inversion/template/tag.rb +5 -2
- data/lib/inversion/template/textnode.rb +1 -2
- data/lib/inversion/template/unlesstag.rb +16 -26
- data/lib/inversion/template/yieldtag.rb +3 -8
- data/spec/inversion/{template/parser_spec.rb → parser_spec.rb} +14 -14
- data/spec/inversion/renderstate_spec.rb +242 -165
- data/spec/inversion/template/attrtag_spec.rb +10 -18
- data/spec/inversion/template/begintag_spec.rb +13 -12
- data/spec/inversion/template/configtag_spec.rb +5 -7
- data/spec/inversion/template/elsetag_spec.rb +5 -5
- data/spec/inversion/template/elsiftag_spec.rb +5 -5
- data/spec/inversion/template/endtag_spec.rb +1 -1
- data/spec/inversion/template/fortag_spec.rb +22 -1
- data/spec/inversion/template/iftag_spec.rb +14 -0
- data/spec/inversion/template/rescuetag_spec.rb +4 -4
- data/spec/inversion/template/tag_spec.rb +6 -4
- data/spec/inversion/template/unlesstag_spec.rb +12 -6
- data/spec/inversion/template/yieldtag_spec.rb +2 -2
- metadata +31 -32
- metadata.gz.sig +0 -0
- data/lib/inversion/template/conditionaltag.rb +0 -49
@@ -99,18 +99,18 @@ describe Inversion::Template::AttrTag do
|
|
99
99
|
end
|
100
100
|
|
101
101
|
it "renders as the stringified contents of the template attribute with the same name" do
|
102
|
-
|
103
|
-
@tag.render(
|
102
|
+
state = Inversion::RenderState.new( :foo => %w[floppy the turtle] )
|
103
|
+
@tag.render( state ).should == ["floppy", "the", "turtle"]
|
104
104
|
end
|
105
105
|
|
106
106
|
it "doesn't error if the attribute isn't set on the template" do
|
107
|
-
|
108
|
-
@tag.render(
|
107
|
+
state = Inversion::RenderState.new( :foo => nil )
|
108
|
+
@tag.render( state ).should == nil
|
109
109
|
end
|
110
110
|
|
111
111
|
it "returns false when the rendered value is false" do
|
112
|
-
|
113
|
-
@tag.render(
|
112
|
+
state = Inversion::RenderState.new( :foo => false )
|
113
|
+
@tag.render( state ).should equal( false )
|
114
114
|
end
|
115
115
|
|
116
116
|
it "can render itself as a comment for template debugging" do
|
@@ -127,21 +127,13 @@ describe Inversion::Template::AttrTag do
|
|
127
127
|
end
|
128
128
|
|
129
129
|
it "renders as the formatted contents of the template attribute with the same name" do
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
attributes.should_receive( :[] ).with( :foo ).and_return( Math::PI )
|
134
|
-
|
135
|
-
@tag.render( template ).should == '3.14'
|
130
|
+
state = Inversion::RenderState.new( :foo => Math::PI )
|
131
|
+
@tag.render( state ).should == '3.14'
|
136
132
|
end
|
137
133
|
|
138
134
|
it "doesn't error if the attribute isn't set on the template" do
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
attributes.should_receive( :[] ).with( :foo ).and_return( nil )
|
143
|
-
|
144
|
-
@tag.render( template ).should == nil
|
135
|
+
state = Inversion::RenderState.new( :foo => nil )
|
136
|
+
@tag.render( state ).should == nil
|
145
137
|
end
|
146
138
|
|
147
139
|
it "can render itself as a comment for template debugging" do
|
@@ -39,13 +39,13 @@ describe Inversion::Template::BeginTag do
|
|
39
39
|
@tag << Inversion::Template::TextNode.new( ':the stuff after the attr' )
|
40
40
|
end
|
41
41
|
|
42
|
-
it "
|
42
|
+
it "renders its subnodes as-is if none of them raise an exception" do
|
43
43
|
renderstate = Inversion::RenderState.new( :foo => OpenStruct.new(:baz => 'the body') )
|
44
44
|
renderstate << @tag
|
45
45
|
renderstate.to_s.should == 'the body:the stuff after the attr'
|
46
46
|
end
|
47
47
|
|
48
|
-
it "
|
48
|
+
it "uses the configured error behavior of the template if a subnode raises any exception" do
|
49
49
|
renderstate = Inversion::RenderState.new
|
50
50
|
renderstate << @tag
|
51
51
|
renderstate.to_s.should =~ /NoMethodError/
|
@@ -74,13 +74,13 @@ describe Inversion::Template::BeginTag do
|
|
74
74
|
@tag.rescue_clauses.should == [ [[::RuntimeError], [@rescue_textnode]] ]
|
75
75
|
end
|
76
76
|
|
77
|
-
it "
|
77
|
+
it "renders its subnodes as-is if none of them raise an exception" do
|
78
78
|
renderstate = Inversion::RenderState.new( :foo => OpenStruct.new(:baz => 'the body') )
|
79
79
|
renderstate << @tag
|
80
80
|
renderstate.to_s.should == 'the body:the stuff after the attr'
|
81
81
|
end
|
82
82
|
|
83
|
-
it "
|
83
|
+
it "renders the rescue section if a subnode raises a RuntimeError" do
|
84
84
|
fooobj = Object.new
|
85
85
|
def fooobj.baz; raise "An exception"; end
|
86
86
|
|
@@ -89,7 +89,7 @@ describe Inversion::Template::BeginTag do
|
|
89
89
|
renderstate.to_s.should == 'rescue stuff'
|
90
90
|
end
|
91
91
|
|
92
|
-
it "
|
92
|
+
it "uses the configured error behavior of the template if a subnode raises an " +
|
93
93
|
"exception other than RuntimeError" do
|
94
94
|
fooobj = Object.new
|
95
95
|
def fooobj.baz; raise Errno::ENOENT, "No such file or directory"; end
|
@@ -105,6 +105,7 @@ describe Inversion::Template::BeginTag do
|
|
105
105
|
|
106
106
|
context "with a single rescue clause with an exception type" do
|
107
107
|
before( :each ) do
|
108
|
+
|
108
109
|
@tag = Inversion::Template::BeginTag.new( ' ' )
|
109
110
|
|
110
111
|
@attrtag = Inversion::Template::AttrTag.new( 'foo.baz' )
|
@@ -122,13 +123,13 @@ describe Inversion::Template::BeginTag do
|
|
122
123
|
@tag.rescue_clauses.should == [ [[::SystemCallError], [@rescue_textnode]] ]
|
123
124
|
end
|
124
125
|
|
125
|
-
it "
|
126
|
+
it "renders its subnodes as-is if none of them raise an exception" do
|
126
127
|
renderstate = Inversion::RenderState.new( :foo => OpenStruct.new(:baz => 'the body') )
|
127
128
|
renderstate << @tag
|
128
129
|
renderstate.to_s.should == 'the body:the stuff after the attr'
|
129
130
|
end
|
130
131
|
|
131
|
-
it "
|
132
|
+
it "renders the rescue section if a subnode raises the specified exception type" do
|
132
133
|
fooobj = Object.new
|
133
134
|
def fooobj.baz; raise Errno::ENOENT, "no such file or directory"; end
|
134
135
|
|
@@ -137,7 +138,7 @@ describe Inversion::Template::BeginTag do
|
|
137
138
|
renderstate.to_s.should == 'rescue stuff'
|
138
139
|
end
|
139
140
|
|
140
|
-
it "
|
141
|
+
it "uses the configured error behavior of the template if a subnode raises an " +
|
141
142
|
"exception other than the specified type" do
|
142
143
|
fooobj = Object.new
|
143
144
|
def fooobj.baz; raise "SPlat!"; end
|
@@ -175,13 +176,13 @@ describe Inversion::Template::BeginTag do
|
|
175
176
|
]
|
176
177
|
end
|
177
178
|
|
178
|
-
it "
|
179
|
+
it "renders its subnodes as-is if none of them raise an exception" do
|
179
180
|
renderstate = Inversion::RenderState.new( :foo => OpenStruct.new(:baz => 'the body') )
|
180
181
|
renderstate << @tag
|
181
182
|
renderstate.to_s.should == 'the body:the stuff after the attr'
|
182
183
|
end
|
183
184
|
|
184
|
-
it "
|
185
|
+
it "renders the first rescue section if a subnode raises the exception it " +
|
185
186
|
"specifies" do
|
186
187
|
fooobj = Object.new
|
187
188
|
def fooobj.baz; raise "An exception"; end
|
@@ -191,7 +192,7 @@ describe Inversion::Template::BeginTag do
|
|
191
192
|
renderstate.to_s.should == 'rescue stuff'
|
192
193
|
end
|
193
194
|
|
194
|
-
it "
|
195
|
+
it "renders the second rescue section if a subnode raises the exception it " +
|
195
196
|
"specifies" do
|
196
197
|
fooobj = Object.new
|
197
198
|
def fooobj.baz; raise Errno::ENOENT, "no such file or directory"; end
|
@@ -201,7 +202,7 @@ describe Inversion::Template::BeginTag do
|
|
201
202
|
renderstate.to_s.should == 'alternative rescue stuff'
|
202
203
|
end
|
203
204
|
|
204
|
-
it "
|
205
|
+
it "uses the configured error behavior of the template if a subnode raises an " +
|
205
206
|
"exception other than those specified by the rescue clauses" do
|
206
207
|
fooobj = Object.new
|
207
208
|
def fooobj.baz; raise Errno::ENOMEM, "All out!"; end
|
@@ -86,17 +86,15 @@ describe Inversion::Template::ConfigTag do
|
|
86
86
|
}.to raise_exception( Inversion::ParseError, /unknown tag "what"/i )
|
87
87
|
end
|
88
88
|
|
89
|
-
it "can
|
89
|
+
it "can turn on debugging comments in rendered output" do
|
90
90
|
source = <<-TEMPLATE
|
91
|
-
<?
|
92
|
-
<?config ignore_unknown_tags: false ?>
|
91
|
+
<?config debugging_comments: true ?>
|
93
92
|
something
|
94
|
-
<?
|
93
|
+
<?if foo ?>Van!<?end if ?>
|
95
94
|
something else
|
96
95
|
TEMPLATE
|
97
|
-
|
98
|
-
|
99
|
-
}.to raise_exception( Inversion::ParseError, /unknown tag "what"/i )
|
96
|
+
tmpl = Inversion::Template.new( source )
|
97
|
+
tmpl.render.should include( "<!-- If: { template.foo } -->" )
|
100
98
|
end
|
101
99
|
|
102
100
|
end
|
@@ -35,7 +35,7 @@ describe Inversion::Template::ElseTag do
|
|
35
35
|
|
36
36
|
it "can be appended to an 'if' tag" do
|
37
37
|
template = double( "template object" )
|
38
|
-
parserstate = Inversion::
|
38
|
+
parserstate = Inversion::Parser::State.new( template )
|
39
39
|
iftag = Inversion::Template::IfTag.new( 'foo' )
|
40
40
|
elsetag = Inversion::Template::ElseTag.new
|
41
41
|
endtag = Inversion::Template::EndTag.new
|
@@ -47,7 +47,7 @@ describe Inversion::Template::ElseTag do
|
|
47
47
|
|
48
48
|
it "can be appended to an 'unless' tag" do
|
49
49
|
template = double( "template object" )
|
50
|
-
parserstate = Inversion::
|
50
|
+
parserstate = Inversion::Parser::State.new( template )
|
51
51
|
unlesstag = Inversion::Template::UnlessTag.new( 'foo' )
|
52
52
|
elsetag = Inversion::Template::ElseTag.new
|
53
53
|
endtag = Inversion::Template::EndTag.new
|
@@ -60,7 +60,7 @@ describe Inversion::Template::ElseTag do
|
|
60
60
|
|
61
61
|
it "can be appended to a 'comment' tag" do
|
62
62
|
template = double( "template object" )
|
63
|
-
parserstate = Inversion::
|
63
|
+
parserstate = Inversion::Parser::State.new( template )
|
64
64
|
commenttag = Inversion::Template::CommentTag.new( 'else section for later' )
|
65
65
|
elsetag = Inversion::Template::ElseTag.new
|
66
66
|
endtag = Inversion::Template::EndTag.new
|
@@ -74,7 +74,7 @@ describe Inversion::Template::ElseTag do
|
|
74
74
|
it "raises an error if it's about to be appended to anything other than an 'if', 'unless', " +
|
75
75
|
"or 'comment' tag" do
|
76
76
|
template = double( "template object" )
|
77
|
-
parserstate = Inversion::
|
77
|
+
parserstate = Inversion::Parser::State.new( template )
|
78
78
|
parserstate << Inversion::Template::ForTag.new( 'foo in bar' )
|
79
79
|
|
80
80
|
expect {
|
@@ -85,7 +85,7 @@ describe Inversion::Template::ElseTag do
|
|
85
85
|
|
86
86
|
it "raises an error if it's about to be appended without an opening 'if' or 'unless'" do
|
87
87
|
template = double( "template object" )
|
88
|
-
parserstate = Inversion::
|
88
|
+
parserstate = Inversion::Parser::State.new( template )
|
89
89
|
|
90
90
|
expect {
|
91
91
|
parserstate << Inversion::Template::ElseTag.new
|
@@ -31,7 +31,7 @@ describe Inversion::Template::ElsifTag do
|
|
31
31
|
|
32
32
|
it "can be appended to an 'if' tag" do
|
33
33
|
template = double( "template object" )
|
34
|
-
parserstate = Inversion::
|
34
|
+
parserstate = Inversion::Parser::State.new( template )
|
35
35
|
iftag = Inversion::Template::IfTag.new( 'foo' )
|
36
36
|
elsetag = Inversion::Template::ElsifTag.new( 'bar' )
|
37
37
|
endtag = Inversion::Template::EndTag.new
|
@@ -43,7 +43,7 @@ describe Inversion::Template::ElsifTag do
|
|
43
43
|
|
44
44
|
it "can be appended to a 'comment' tag" do
|
45
45
|
template = double( "template object" )
|
46
|
-
parserstate = Inversion::
|
46
|
+
parserstate = Inversion::Parser::State.new( template )
|
47
47
|
commenttag = Inversion::Template::CommentTag.new( 'else section for later' )
|
48
48
|
elsetag = Inversion::Template::ElsifTag.new( 'bar' )
|
49
49
|
endtag = Inversion::Template::EndTag.new
|
@@ -56,7 +56,7 @@ describe Inversion::Template::ElsifTag do
|
|
56
56
|
|
57
57
|
it "raises an error if it's about to be appended to anything other than an 'if' or 'comment' tag" do
|
58
58
|
template = double( "template object" )
|
59
|
-
parserstate = Inversion::
|
59
|
+
parserstate = Inversion::Parser::State.new( template )
|
60
60
|
parserstate << Inversion::Template::UnlessTag.new( 'foo in bar' )
|
61
61
|
|
62
62
|
expect {
|
@@ -67,7 +67,7 @@ describe Inversion::Template::ElsifTag do
|
|
67
67
|
|
68
68
|
it "raises an error if it's about to be appended without an opening 'if'" do
|
69
69
|
template = double( "template object" )
|
70
|
-
parserstate = Inversion::
|
70
|
+
parserstate = Inversion::Parser::State.new( template )
|
71
71
|
|
72
72
|
expect {
|
73
73
|
parserstate << Inversion::Template::ElsifTag.new( 'bar' )
|
@@ -78,7 +78,7 @@ describe Inversion::Template::ElsifTag do
|
|
78
78
|
it "renders as its attribute value if it's a simple attribute" do
|
79
79
|
renderstate = Inversion::RenderState.new( :bar => :the_attribute_value )
|
80
80
|
tag = Inversion::Template::ElsifTag.new( 'bar' )
|
81
|
-
tag.
|
81
|
+
tag.evaluate( renderstate ).should == :the_attribute_value
|
82
82
|
end
|
83
83
|
|
84
84
|
end
|
@@ -61,7 +61,7 @@ describe Inversion::Template::EndTag do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it "raises an error on the addition of a mismatched end tag" do
|
64
|
-
state = Inversion::
|
64
|
+
state = Inversion::Parser::State.new( :template )
|
65
65
|
opener = Inversion::Template::ForTag.new( 'foo in bar' )
|
66
66
|
state << opener
|
67
67
|
|
@@ -66,7 +66,28 @@ describe Inversion::Template::ForTag do
|
|
66
66
|
tag << Inversion::Template::AttrTag.new( 'foo' )
|
67
67
|
tag << Inversion::Template::TextNode.new( ']' )
|
68
68
|
|
69
|
-
tag.render( render_state )
|
69
|
+
tag.render( render_state )
|
70
|
+
render_state.to_s.should == "[monkey][goat]"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "supports nested iterators" do
|
74
|
+
render_state = Inversion::RenderState.new( :tic => [ 'x', 'o'], :tac => ['o', 'x'] )
|
75
|
+
|
76
|
+
# <?for omarker in tic ?><?for imarker in tac ?>
|
77
|
+
outer = Inversion::Template::ForTag.new( 'omarker in tic' )
|
78
|
+
inner = Inversion::Template::ForTag.new( 'imarker in tac' )
|
79
|
+
|
80
|
+
# [<?attr omarker?>, <?attr imarker?>]
|
81
|
+
inner << Inversion::Template::TextNode.new( '[' )
|
82
|
+
inner << Inversion::Template::AttrTag.new( 'omarker' )
|
83
|
+
inner << Inversion::Template::TextNode.new( ', ' )
|
84
|
+
inner << Inversion::Template::AttrTag.new( 'imarker' )
|
85
|
+
inner << Inversion::Template::TextNode.new( ']' )
|
86
|
+
|
87
|
+
outer << inner
|
88
|
+
|
89
|
+
outer.render( render_state )
|
90
|
+
render_state.to_s.should == "[x, o][x, x][o, o][o, x]"
|
70
91
|
end
|
71
92
|
|
72
93
|
it "raises a ParseError if a keyword other than 'in' is used" do
|
@@ -64,6 +64,20 @@ describe Inversion::Template::IfTag do
|
|
64
64
|
renderstate.to_s.should == ''
|
65
65
|
end
|
66
66
|
|
67
|
+
it "works inside an iterator (ticket #3)" do
|
68
|
+
template = Inversion::Template.new( <<-END_TEMPLATE )
|
69
|
+
<?for item in items ?>
|
70
|
+
Item: <?if item ?>Yep.<?else?>Nope.<?end?>
|
71
|
+
<?end for ?>
|
72
|
+
END_TEMPLATE
|
73
|
+
|
74
|
+
template.items = [ true, false ]
|
75
|
+
|
76
|
+
template.render.should include( "Item: Yep." )
|
77
|
+
template.render.should include( "Item: Nope." )
|
78
|
+
end
|
79
|
+
|
80
|
+
|
67
81
|
context "with a single 'else' clause" do
|
68
82
|
|
69
83
|
before( :each ) do
|
@@ -50,7 +50,7 @@ describe Inversion::Template::RescueTag do
|
|
50
50
|
|
51
51
|
it "can be appended to a 'begin' tag" do
|
52
52
|
template = double( "template object" )
|
53
|
-
parserstate = Inversion::
|
53
|
+
parserstate = Inversion::Parser::State.new( template )
|
54
54
|
begintag = Inversion::Template::BeginTag.new
|
55
55
|
rescuetag = Inversion::Template::RescueTag.new
|
56
56
|
textnode = Inversion::Template::TextNode.new( 'Yeah!' )
|
@@ -64,7 +64,7 @@ describe Inversion::Template::RescueTag do
|
|
64
64
|
|
65
65
|
it "can be appended to a 'comment' tag" do
|
66
66
|
template = double( "template object" )
|
67
|
-
parserstate = Inversion::
|
67
|
+
parserstate = Inversion::Parser::State.new( template )
|
68
68
|
commenttag = Inversion::Template::CommentTag.new( 'rescue section for later' )
|
69
69
|
rescuetag = Inversion::Template::RescueTag.new
|
70
70
|
endtag = Inversion::Template::EndTag.new
|
@@ -78,7 +78,7 @@ describe Inversion::Template::RescueTag do
|
|
78
78
|
it "raises an error if it's about to be appended to anything other than a 'begin' or " +
|
79
79
|
"'comment' tag" do
|
80
80
|
template = double( "template object" )
|
81
|
-
parserstate = Inversion::
|
81
|
+
parserstate = Inversion::Parser::State.new( template )
|
82
82
|
parserstate << Inversion::Template::ForTag.new( 'foo in bar' )
|
83
83
|
|
84
84
|
expect {
|
@@ -89,7 +89,7 @@ describe Inversion::Template::RescueTag do
|
|
89
89
|
|
90
90
|
it "raises an error if it's about to be appended without an opening 'begin'" do
|
91
91
|
template = double( "template object" )
|
92
|
-
parserstate = Inversion::
|
92
|
+
parserstate = Inversion::Parser::State.new( template )
|
93
93
|
|
94
94
|
expect {
|
95
95
|
parserstate << Inversion::Template::RescueTag.new
|
@@ -35,11 +35,12 @@ describe Inversion::Template::Tag do
|
|
35
35
|
|
36
36
|
|
37
37
|
it "loads pluggable types via Rubygems" do
|
38
|
+
pluginfile = '/usr/lib/ruby/gems/1.8/gems/inversion-extra-1.0.8/lib/inversion/template/zebratag.rb'
|
38
39
|
Gem.stub( :find_files ).
|
39
40
|
with( Inversion::Template::Tag::TAG_PLUGIN_PATTERN ).
|
40
|
-
and_return([
|
41
|
+
and_return([ pluginfile ])
|
41
42
|
Inversion::Template::Tag.should_receive( :require ).
|
42
|
-
with( 'inversion/template/zebratag
|
43
|
+
with( 'inversion/template/zebratag' ).
|
43
44
|
and_return {
|
44
45
|
Class.new( Inversion::Template::Tag ) {
|
45
46
|
def self::name; "ZebraTag"; end
|
@@ -54,11 +55,12 @@ describe Inversion::Template::Tag do
|
|
54
55
|
end
|
55
56
|
|
56
57
|
it "doesn't include abstract tag types in its loading mechanism" do
|
58
|
+
pluginfile = '/usr/lib/ruby/gems/1.8/gems/inversion-extra-1.0.8/lib/inversion/template/zebratag.rb'
|
57
59
|
Gem.stub( :find_files ).
|
58
60
|
with( Inversion::Template::Tag::TAG_PLUGIN_PATTERN ).
|
59
|
-
and_return([
|
61
|
+
and_return([ pluginfile ])
|
60
62
|
Inversion::Template::Tag.should_receive( :require ).
|
61
|
-
with( 'inversion/template/zebratag
|
63
|
+
with( 'inversion/template/zebratag' ).
|
62
64
|
and_return {
|
63
65
|
Class.new( Inversion::Template::Tag ) {
|
64
66
|
include Inversion::AbstractClass
|
@@ -32,7 +32,8 @@ describe Inversion::Template::UnlessTag do
|
|
32
32
|
tag << Inversion::Template::TextNode.new( 'the body' )
|
33
33
|
|
34
34
|
renderstate = Inversion::RenderState.new( :attribute => false )
|
35
|
-
tag.render( renderstate )
|
35
|
+
tag.render( renderstate )
|
36
|
+
renderstate.to_s.should == 'the body'
|
36
37
|
end
|
37
38
|
|
38
39
|
it "renders its contents if its methodchain is false" do
|
@@ -40,7 +41,8 @@ describe Inversion::Template::UnlessTag do
|
|
40
41
|
tag << Inversion::Template::TextNode.new( 'the body' )
|
41
42
|
|
42
43
|
renderstate = Inversion::RenderState.new( :attribute => {:bar => 1} )
|
43
|
-
tag.render( renderstate )
|
44
|
+
tag.render( renderstate )
|
45
|
+
renderstate.to_s.should == 'the body'
|
44
46
|
end
|
45
47
|
|
46
48
|
it "doesn't render its contents if its attribute is true" do
|
@@ -48,7 +50,8 @@ describe Inversion::Template::UnlessTag do
|
|
48
50
|
tag << Inversion::Template::TextNode.new( 'the body' )
|
49
51
|
|
50
52
|
renderstate = Inversion::RenderState.new( :attribute => true )
|
51
|
-
tag.render( renderstate )
|
53
|
+
tag.render( renderstate )
|
54
|
+
renderstate.to_s.should == ''
|
52
55
|
end
|
53
56
|
|
54
57
|
it "doesn't render its contents if its methodchain is true" do
|
@@ -56,7 +59,8 @@ describe Inversion::Template::UnlessTag do
|
|
56
59
|
tag << Inversion::Template::TextNode.new( 'the body' )
|
57
60
|
|
58
61
|
renderstate = Inversion::RenderState.new( :attribute => {:foo => 1} )
|
59
|
-
tag.render( renderstate )
|
62
|
+
tag.render( renderstate )
|
63
|
+
renderstate.to_s.should == ''
|
60
64
|
end
|
61
65
|
|
62
66
|
context "with an 'else' clause" do
|
@@ -71,12 +75,14 @@ describe Inversion::Template::UnlessTag do
|
|
71
75
|
|
72
76
|
it "only renders the second half of the contents if its attribute is true" do
|
73
77
|
renderstate = Inversion::RenderState.new( :attribute => true )
|
74
|
-
@tag.render( renderstate )
|
78
|
+
@tag.render( renderstate )
|
79
|
+
renderstate.to_s.should == 'the body after else'
|
75
80
|
end
|
76
81
|
|
77
82
|
it "only renders the first half of the contents if its attribute is false" do
|
78
83
|
renderstate = Inversion::RenderState.new( :attribute => false )
|
79
|
-
@tag.render( renderstate )
|
84
|
+
@tag.render( renderstate )
|
85
|
+
renderstate.to_s.should == 'the body before else'
|
80
86
|
end
|
81
87
|
|
82
88
|
end
|