inversion 0.12.3 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +2 -1
- data.tar.gz.sig +0 -0
- data/ChangeLog +305 -9
- data/Examples.rdoc +134 -0
- data/GettingStarted.rdoc +44 -0
- data/Guide.rdoc +47 -0
- data/History.rdoc +15 -0
- data/Manifest.txt +7 -2
- data/README.rdoc +9 -10
- data/Rakefile +23 -10
- data/Tags.rdoc +561 -0
- data/lib/inversion.rb +2 -2
- data/lib/inversion/renderstate.rb +46 -11
- data/lib/inversion/template.rb +85 -7
- data/lib/inversion/template/attrtag.rb +1 -1
- data/lib/inversion/template/begintag.rb +8 -8
- data/lib/inversion/template/fragmenttag.rb +60 -0
- data/lib/inversion/template/rescuetag.rb +1 -1
- data/spec/{lib/helpers.rb → helpers.rb} +7 -30
- data/spec/inversion/mixins_spec.rb +55 -65
- data/spec/inversion/monkeypatches_spec.rb +2 -12
- data/spec/inversion/parser_spec.rb +34 -44
- data/spec/inversion/renderstate_spec.rb +123 -69
- data/spec/inversion/sinatra_spec.rb +6 -19
- data/spec/inversion/template/attrtag_spec.rb +56 -76
- data/spec/inversion/template/begintag_spec.rb +24 -41
- data/spec/inversion/template/calltag_spec.rb +1 -18
- data/spec/inversion/template/codetag_spec.rb +6 -24
- data/spec/inversion/template/commenttag_spec.rb +9 -27
- data/spec/inversion/template/configtag_spec.rb +5 -16
- data/spec/inversion/template/containertag_spec.rb +4 -21
- data/spec/inversion/template/defaulttag_spec.rb +6 -23
- data/spec/inversion/template/elsetag_spec.rb +9 -26
- data/spec/inversion/template/elsiftag_spec.rb +7 -24
- data/spec/inversion/template/endtag_spec.rb +6 -23
- data/spec/inversion/template/escapetag_spec.rb +10 -25
- data/spec/inversion/template/fortag_spec.rb +20 -37
- data/spec/inversion/template/fragmenttag_spec.rb +40 -0
- data/spec/inversion/template/iftag_spec.rb +23 -40
- data/spec/inversion/template/importtag_spec.rb +8 -25
- data/spec/inversion/template/includetag_spec.rb +27 -42
- data/spec/inversion/template/node_spec.rb +6 -15
- data/spec/inversion/template/pptag_spec.rb +10 -23
- data/spec/inversion/template/publishtag_spec.rb +4 -21
- data/spec/inversion/template/rescuetag_spec.rb +12 -29
- data/spec/inversion/template/subscribetag_spec.rb +8 -25
- data/spec/inversion/template/tag_spec.rb +24 -37
- data/spec/inversion/template/textnode_spec.rb +8 -24
- data/spec/inversion/template/timedeltatag_spec.rb +31 -43
- data/spec/inversion/template/unlesstag_spec.rb +7 -24
- data/spec/inversion/template/uriencodetag_spec.rb +6 -23
- data/spec/inversion/template/yieldtag_spec.rb +3 -20
- data/spec/inversion/template_spec.rb +155 -108
- data/spec/inversion/tilt_spec.rb +7 -16
- data/spec/inversion_spec.rb +7 -22
- metadata +63 -40
- metadata.gz.sig +0 -0
- data/spec/lib/constants.rb +0 -9
@@ -1,19 +1,10 @@
|
|
1
1
|
#!/usr/bin/env rspec -cfd -b
|
2
2
|
# vim: set noet nosta sw=4 ts=4 :
|
3
3
|
|
4
|
-
|
5
|
-
require 'pathname'
|
6
|
-
basedir = Pathname( __FILE__ ).dirname.parent.parent
|
7
|
-
libdir = basedir + 'lib'
|
8
|
-
|
9
|
-
$LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
|
10
|
-
$LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
|
11
|
-
}
|
12
|
-
|
13
|
-
require 'rspec'
|
14
|
-
require 'spec/lib/helpers'
|
4
|
+
require_relative '../helpers'
|
15
5
|
|
16
6
|
begin
|
7
|
+
require 'sinatra'
|
17
8
|
require 'rack/test'
|
18
9
|
require 'inversion/sinatra'
|
19
10
|
$sinatra_support = true
|
@@ -25,21 +16,17 @@ end
|
|
25
16
|
describe "Sinatra support", :if => $sinatra_support do
|
26
17
|
include Rack::Test::Methods if defined?( ::Rack )
|
27
18
|
|
28
|
-
before( :all ) do
|
29
|
-
setup_logging( :fatal )
|
30
|
-
end
|
31
|
-
|
32
19
|
before( :each ) do
|
33
20
|
@datadir = Pathname( __FILE__ ).dirname.parent + 'data'
|
34
|
-
Sinatra::Base.set :environment, :test
|
35
21
|
end
|
36
22
|
|
37
23
|
def app
|
24
|
+
Sinatra::Base.set :environment, :test
|
38
25
|
@app
|
39
26
|
end
|
40
27
|
|
41
28
|
it "extends the Sinatra DSL with an #inversion helper method" do
|
42
|
-
Sinatra::Base.instance_methods.
|
29
|
+
expect( Sinatra::Base.instance_methods ).to include( :inversion )
|
43
30
|
end
|
44
31
|
|
45
32
|
it "renders .inversion files in views path" do
|
@@ -51,8 +38,8 @@ describe "Sinatra support", :if => $sinatra_support do
|
|
51
38
|
end
|
52
39
|
|
53
40
|
get '/'
|
54
|
-
last_response.
|
55
|
-
|
41
|
+
expect( last_response ).to be_ok
|
42
|
+
expect( last_response.body ).to eq( 'Hello, Sinatra!' )
|
56
43
|
end
|
57
44
|
|
58
45
|
end
|
@@ -1,120 +1,103 @@
|
|
1
1
|
#!/usr/bin/env rspec -cfd -b
|
2
2
|
# vim: set noet nosta sw=4 ts=4 :
|
3
3
|
|
4
|
-
|
5
|
-
require 'pathname'
|
6
|
-
basedir = Pathname( __FILE__ ).dirname.parent.parent.parent
|
7
|
-
libdir = basedir + 'lib'
|
4
|
+
require_relative '../../helpers'
|
8
5
|
|
9
|
-
$LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
|
10
|
-
$LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
|
11
|
-
}
|
12
|
-
|
13
|
-
require 'rspec'
|
14
|
-
require 'spec/lib/helpers'
|
15
6
|
require 'inversion/template/attrtag'
|
16
7
|
|
17
8
|
describe Inversion::Template::AttrTag do
|
18
9
|
|
19
|
-
before( :all ) do
|
20
|
-
setup_logging( :fatal )
|
21
|
-
end
|
22
|
-
|
23
|
-
after( :all ) do
|
24
|
-
reset_logging()
|
25
|
-
end
|
26
|
-
|
27
10
|
describe "parsing" do
|
28
11
|
|
29
12
|
it "can have a simple attribute name" do
|
30
|
-
|
13
|
+
expect( described_class.new( 'foo' ).name ).to eq( :foo )
|
31
14
|
end
|
32
15
|
|
33
16
|
it "can have an attribute name and a format string" do
|
34
|
-
tag =
|
35
|
-
tag.name.
|
36
|
-
tag.format.
|
17
|
+
tag = described_class.new( '"%0.2f" % foo' )
|
18
|
+
expect( tag.name ).to eq( :foo )
|
19
|
+
expect( tag.format ).to eq( '%0.2f' )
|
37
20
|
end
|
38
21
|
|
39
22
|
it "raises an exception with an unknown operator" do
|
40
23
|
expect {
|
41
|
-
|
42
|
-
}.to
|
24
|
+
described_class.new( '"%0.2f" + foo' )
|
25
|
+
}.to raise_error( Inversion::ParseError, /expected/ )
|
43
26
|
end
|
44
27
|
|
45
28
|
it "raises an exception if it has more than one identifier" do
|
46
29
|
expect {
|
47
|
-
|
48
|
-
}.to
|
30
|
+
described_class.new( '"%0.2f" % [ foo, bar ]' )
|
31
|
+
}.to raise_error( Inversion::ParseError, /expected/ )
|
49
32
|
end
|
50
33
|
|
51
34
|
it "supports simple <identifier>.<methodname> syntax" do
|
52
|
-
tag =
|
35
|
+
tag = described_class.new( 'foo.bar' )
|
53
36
|
|
54
|
-
tag.name.
|
55
|
-
tag.methodchain.
|
37
|
+
expect( tag.name ).to eq( :foo )
|
38
|
+
expect( tag.methodchain ).to eq( '.bar' )
|
56
39
|
end
|
57
40
|
|
58
41
|
it "supports index operator (<identifier>.methodname[ <arguments> ]) syntax" do
|
59
|
-
tag =
|
42
|
+
tag = described_class.new( 'foo.bar[8]' )
|
60
43
|
|
61
|
-
tag.name.
|
62
|
-
tag.methodchain.
|
44
|
+
expect( tag.name ).to eq( :foo )
|
45
|
+
expect( tag.methodchain ).to eq( '.bar[8]' )
|
63
46
|
end
|
64
47
|
|
65
48
|
it "supports index operator (<identifier>[ <arguments> ]) syntax" do
|
66
|
-
tag =
|
49
|
+
tag = described_class.new( 'foo[8]' )
|
67
50
|
|
68
|
-
tag.name.
|
69
|
-
tag.methodchain.
|
51
|
+
expect( tag.name ).to eq( :foo )
|
52
|
+
expect( tag.methodchain ).to eq( '[8]' )
|
70
53
|
end
|
71
54
|
|
72
55
|
it "supports <identifier>.<methodname>( <arguments> ) syntax" do
|
73
|
-
tag =
|
56
|
+
tag = described_class.new( 'foo.bar( 8, :baz )' )
|
74
57
|
|
75
|
-
tag.name.
|
76
|
-
tag.methodchain.
|
58
|
+
expect( tag.name ).to eq( :foo )
|
59
|
+
expect( tag.methodchain ).to eq( '.bar( 8, :baz )' )
|
77
60
|
end
|
78
61
|
|
79
62
|
it "can have a format with a methodchain" do
|
80
|
-
tag =
|
63
|
+
tag = described_class.new( '"%0.02f" % foo.bar( 8 )' )
|
81
64
|
|
82
|
-
tag.name.
|
83
|
-
tag.methodchain.
|
84
|
-
tag.format.
|
65
|
+
expect( tag.name ).to eq( :foo )
|
66
|
+
expect( tag.methodchain ).to eq( '.bar( 8 )' )
|
67
|
+
expect( tag.format ).to eq( '%0.02f' )
|
85
68
|
end
|
86
69
|
end
|
87
70
|
|
88
71
|
describe "rendering" do
|
89
72
|
|
90
73
|
it "can render itself as a comment for template debugging" do
|
91
|
-
tag =
|
92
|
-
tag.as_comment_body.
|
74
|
+
tag = described_class.new( 'foo.bar( 8, :baz )' )
|
75
|
+
expect( tag.as_comment_body ).to eq( "Attr: { template.foo.bar( 8, :baz ) }" )
|
93
76
|
end
|
94
77
|
|
95
78
|
context "without a format" do
|
96
79
|
|
97
80
|
before( :each ) do
|
98
|
-
@tag =
|
81
|
+
@tag = described_class.new( 'foo' )
|
99
82
|
end
|
100
83
|
|
101
84
|
it "renders as the stringified contents of the template attribute with the same name" do
|
102
85
|
state = Inversion::RenderState.new( :foo => %w[floppy the turtle] )
|
103
|
-
@tag.render( state ).
|
86
|
+
expect( @tag.render( state ) ).to eq( ["floppy", "the", "turtle"] )
|
104
87
|
end
|
105
88
|
|
106
89
|
it "doesn't error if the attribute isn't set on the template" do
|
107
90
|
state = Inversion::RenderState.new( :foo => nil )
|
108
|
-
@tag.render( state ).
|
91
|
+
expect( @tag.render( state ) ).to eq( nil )
|
109
92
|
end
|
110
93
|
|
111
94
|
it "returns false when the rendered value is false" do
|
112
95
|
state = Inversion::RenderState.new( :foo => false )
|
113
|
-
@tag.render( state ).
|
96
|
+
expect( @tag.render( state ) ).to equal( false )
|
114
97
|
end
|
115
98
|
|
116
99
|
it "can render itself as a comment for template debugging" do
|
117
|
-
@tag.as_comment_body.
|
100
|
+
expect( @tag.as_comment_body ).to eq( 'Attr: { template.foo }' )
|
118
101
|
end
|
119
102
|
|
120
103
|
end
|
@@ -122,25 +105,22 @@ describe Inversion::Template::AttrTag do
|
|
122
105
|
context "with a format" do
|
123
106
|
|
124
107
|
before( :each ) do
|
125
|
-
@tag =
|
108
|
+
@tag = described_class.new( 'foo' )
|
126
109
|
@tag.format = "%0.2f"
|
127
110
|
end
|
128
111
|
|
129
112
|
it "renders as the formatted contents of the template attribute with the same name" do
|
130
113
|
state = Inversion::RenderState.new( :foo => Math::PI )
|
131
|
-
@tag.render( state ).
|
114
|
+
expect( @tag.render( state ) ).to eq( '3.14' )
|
132
115
|
end
|
133
116
|
|
134
117
|
it "doesn't error if the attribute isn't set on the template" do
|
135
|
-
|
136
|
-
|
137
|
-
@tag.render( state ).should == nil
|
138
|
-
end
|
118
|
+
state = Inversion::RenderState.new( :foo => nil )
|
119
|
+
expect( @tag.render(state) ).to eq( nil )
|
139
120
|
end
|
140
121
|
|
141
122
|
it "can render itself as a comment for template debugging" do
|
142
|
-
@tag.as_comment_body.
|
143
|
-
should == 'Attr: { template.foo } with format: "%0.2f"'
|
123
|
+
expect( @tag.as_comment_body ).to eq( 'Attr: { template.foo } with format: "%0.2f"' )
|
144
124
|
end
|
145
125
|
|
146
126
|
end
|
@@ -148,69 +128,69 @@ describe Inversion::Template::AttrTag do
|
|
148
128
|
context "with a methodchain" do
|
149
129
|
|
150
130
|
before( :each ) do
|
151
|
-
@attribute_object =
|
131
|
+
@attribute_object = double( "template attribute" )
|
152
132
|
end
|
153
133
|
|
154
134
|
it "renders a single method call with no arguments" do
|
155
135
|
template = Inversion::Template.new( 'this is <?attr foo.bar ?>' )
|
156
136
|
template.foo = @attribute_object
|
157
|
-
@attribute_object.
|
137
|
+
expect( @attribute_object ).to receive( :bar ).with( no_args() ).and_return( "the result" )
|
158
138
|
|
159
|
-
template.render.
|
139
|
+
expect( template.render ).to eq( "this is the result" )
|
160
140
|
end
|
161
141
|
|
162
142
|
it "renders a single method call with one argument" do
|
163
143
|
template = Inversion::Template.new( 'this is <?attr foo.bar(8) ?>' )
|
164
144
|
template.foo = @attribute_object
|
165
|
-
@attribute_object.
|
145
|
+
expect( @attribute_object ).to receive( :bar ).with( 8 ).and_return( "the result" )
|
166
146
|
|
167
|
-
template.render.
|
147
|
+
expect( template.render ).to eq( "this is the result" )
|
168
148
|
end
|
169
149
|
|
170
150
|
it "renders a call with a single index operator" do
|
171
151
|
template = Inversion::Template.new( 'lines end with <?attr config[:line_ending] ?>' )
|
172
152
|
template.config = { :line_ending => 'newline' }
|
173
153
|
|
174
|
-
template.render.
|
154
|
+
expect( template.render ).to eq( "lines end with newline" )
|
175
155
|
end
|
176
156
|
|
177
157
|
it "renders a single method call with multiple arguments" do
|
178
158
|
template = Inversion::Template.new( 'this is <?attr foo.bar(8, :woo) ?>' )
|
179
159
|
template.foo = @attribute_object
|
180
|
-
@attribute_object.
|
160
|
+
expect( @attribute_object ).to receive( :bar ).with( 8, :woo ).and_return( "the result" )
|
181
161
|
|
182
|
-
template.render.
|
162
|
+
expect( template.render ).to eq( "this is the result" )
|
183
163
|
end
|
184
164
|
|
185
165
|
it "renders multiple method calls with no arguments" do
|
186
|
-
additional_object =
|
166
|
+
additional_object = double( 'additional template attribute' )
|
187
167
|
template = Inversion::Template.new( 'this is <?attr foo.bar.baz ?>' )
|
188
168
|
template.foo = @attribute_object
|
189
|
-
template.foo.
|
190
|
-
additional_object.
|
169
|
+
expect( template.foo ).to receive( :bar ).and_return( additional_object )
|
170
|
+
expect( additional_object ).to receive( :baz ).with( no_args() ).and_return( "the result" )
|
191
171
|
|
192
|
-
template.render.
|
172
|
+
expect( template.render ).to eq( "this is the result" )
|
193
173
|
end
|
194
174
|
|
195
175
|
it "renders multiple method calls with arguments" do
|
196
|
-
additional_object =
|
176
|
+
additional_object = double( 'additional template attribute' )
|
197
177
|
template = Inversion::Template.new( 'this is <?attr foo.bar( 8 ).baz( :woo ) ?>' )
|
198
178
|
template.foo = @attribute_object
|
199
|
-
template.foo.
|
200
|
-
additional_object.
|
179
|
+
expect( template.foo ).to receive( :bar ).with( 8 ).and_return( additional_object )
|
180
|
+
expect( additional_object ).to receive( :baz ).with( :woo ).and_return( "the result" )
|
201
181
|
|
202
|
-
template.render.
|
182
|
+
expect( template.render ).to eq( "this is the result" )
|
203
183
|
end
|
204
184
|
|
205
185
|
it "renders method calls with template attribute arguments" do
|
206
186
|
template = Inversion::Template.new( 'this is <?attr foo.bar( baz ) ?>' )
|
207
|
-
foo =
|
187
|
+
foo = double( "foo attribute object" )
|
208
188
|
|
209
189
|
template.foo = foo
|
210
190
|
template.baz = 18
|
211
|
-
foo.
|
191
|
+
expect( foo ).to receive( :bar ).with( 18 ).and_return( "the result of calling bar" )
|
212
192
|
|
213
|
-
template.render.
|
193
|
+
expect( template.render ).to eq( "this is the result of calling bar" )
|
214
194
|
end
|
215
195
|
end
|
216
196
|
|
@@ -1,18 +1,9 @@
|
|
1
1
|
#!/usr/bin/env rspec -cfd -b
|
2
2
|
# vim: set noet nosta sw=4 ts=4 :
|
3
3
|
|
4
|
-
|
5
|
-
require 'pathname'
|
6
|
-
basedir = Pathname( __FILE__ ).dirname.parent.parent.parent
|
7
|
-
libdir = basedir + 'lib'
|
4
|
+
require_relative '../../helpers'
|
8
5
|
|
9
|
-
$LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
|
10
|
-
$LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
|
11
|
-
}
|
12
|
-
|
13
|
-
require 'rspec'
|
14
6
|
require 'ostruct'
|
15
|
-
require 'spec/lib/helpers'
|
16
7
|
require 'inversion/template/begintag'
|
17
8
|
require 'inversion/template/textnode'
|
18
9
|
require 'inversion/template/attrtag'
|
@@ -22,14 +13,6 @@ require 'inversion/renderstate'
|
|
22
13
|
|
23
14
|
describe Inversion::Template::BeginTag do
|
24
15
|
|
25
|
-
before( :all ) do
|
26
|
-
setup_logging( :fatal )
|
27
|
-
end
|
28
|
-
|
29
|
-
after( :all ) do
|
30
|
-
reset_logging()
|
31
|
-
end
|
32
|
-
|
33
16
|
|
34
17
|
context "without any rescue clauses" do
|
35
18
|
|
@@ -42,14 +25,14 @@ describe Inversion::Template::BeginTag do
|
|
42
25
|
it "renders its subnodes as-is if none of them raise an exception" do
|
43
26
|
renderstate = Inversion::RenderState.new( :foo => OpenStruct.new(:baz => 'the body') )
|
44
27
|
renderstate << @tag
|
45
|
-
renderstate.to_s.
|
28
|
+
expect( renderstate.to_s ).to eq( 'the body:the stuff after the attr' )
|
46
29
|
end
|
47
30
|
|
48
31
|
it "uses the configured error behavior of the template if a subnode raises any exception" do
|
49
32
|
renderstate = Inversion::RenderState.new
|
50
33
|
renderstate << @tag
|
51
|
-
renderstate.to_s.
|
52
|
-
renderstate.to_s.
|
34
|
+
expect( renderstate.to_s ).to match( /NoMethodError/ )
|
35
|
+
expect( renderstate.to_s ).to_not match( /the stuff after the attr/i )
|
53
36
|
end
|
54
37
|
|
55
38
|
end
|
@@ -71,13 +54,13 @@ describe Inversion::Template::BeginTag do
|
|
71
54
|
end
|
72
55
|
|
73
56
|
it "contains one rescue clause for RuntimeErrors" do
|
74
|
-
@tag.rescue_clauses.
|
57
|
+
expect( @tag.rescue_clauses ).to eq([ [[::RuntimeError], [@rescue_textnode]] ])
|
75
58
|
end
|
76
59
|
|
77
60
|
it "renders its subnodes as-is if none of them raise an exception" do
|
78
61
|
renderstate = Inversion::RenderState.new( :foo => OpenStruct.new(:baz => 'the body') )
|
79
62
|
renderstate << @tag
|
80
|
-
renderstate.to_s.
|
63
|
+
expect( renderstate.to_s ).to eq( 'the body:the stuff after the attr' )
|
81
64
|
end
|
82
65
|
|
83
66
|
it "renders the rescue section if a subnode raises a RuntimeError" do
|
@@ -86,7 +69,7 @@ describe Inversion::Template::BeginTag do
|
|
86
69
|
|
87
70
|
renderstate = Inversion::RenderState.new( :foo => fooobj )
|
88
71
|
renderstate << @tag
|
89
|
-
renderstate.to_s.
|
72
|
+
expect( renderstate.to_s ).to eq( 'rescue stuff' )
|
90
73
|
end
|
91
74
|
|
92
75
|
it "uses the configured error behavior of the template if a subnode raises an " +
|
@@ -96,9 +79,9 @@ describe Inversion::Template::BeginTag do
|
|
96
79
|
|
97
80
|
renderstate = Inversion::RenderState.new( :foo => fooobj )
|
98
81
|
renderstate << @tag
|
99
|
-
renderstate.to_s.
|
100
|
-
renderstate.to_s.
|
101
|
-
renderstate.to_s.
|
82
|
+
expect( renderstate.to_s ).to match( /ENOENT/i )
|
83
|
+
expect( renderstate.to_s ).to_not match( /rescue stuff/i )
|
84
|
+
expect( renderstate.to_s ).to_not match( /the stuff after the attr/i )
|
102
85
|
end
|
103
86
|
end
|
104
87
|
|
@@ -120,13 +103,13 @@ describe Inversion::Template::BeginTag do
|
|
120
103
|
end
|
121
104
|
|
122
105
|
it "contains one rescue clause for the specified exception type" do
|
123
|
-
@tag.rescue_clauses.
|
106
|
+
expect( @tag.rescue_clauses ).to eq( [ [[::SystemCallError], [@rescue_textnode]] ] )
|
124
107
|
end
|
125
108
|
|
126
109
|
it "renders its subnodes as-is if none of them raise an exception" do
|
127
110
|
renderstate = Inversion::RenderState.new( :foo => OpenStruct.new(:baz => 'the body') )
|
128
111
|
renderstate << @tag
|
129
|
-
renderstate.to_s.
|
112
|
+
expect( renderstate.to_s ).to eq( 'the body:the stuff after the attr' )
|
130
113
|
end
|
131
114
|
|
132
115
|
it "renders the rescue section if a subnode raises the specified exception type" do
|
@@ -135,7 +118,7 @@ describe Inversion::Template::BeginTag do
|
|
135
118
|
|
136
119
|
renderstate = Inversion::RenderState.new( :foo => fooobj )
|
137
120
|
renderstate << @tag
|
138
|
-
renderstate.to_s.
|
121
|
+
expect( renderstate.to_s ).to eq( 'rescue stuff' )
|
139
122
|
end
|
140
123
|
|
141
124
|
it "uses the configured error behavior of the template if a subnode raises an " +
|
@@ -145,9 +128,9 @@ describe Inversion::Template::BeginTag do
|
|
145
128
|
|
146
129
|
renderstate = Inversion::RenderState.new( :foo => fooobj )
|
147
130
|
renderstate << @tag
|
148
|
-
renderstate.to_s.
|
149
|
-
renderstate.to_s.
|
150
|
-
renderstate.to_s.
|
131
|
+
expect( renderstate.to_s ).to match( /RuntimeError/i )
|
132
|
+
expect( renderstate.to_s ).to_not match( /rescue stuff/i )
|
133
|
+
expect( renderstate.to_s ).to_not match( /the stuff after the attr/i )
|
151
134
|
end
|
152
135
|
end
|
153
136
|
|
@@ -170,16 +153,16 @@ describe Inversion::Template::BeginTag do
|
|
170
153
|
end
|
171
154
|
|
172
155
|
it "contains a rescue tuple for each rescue tag" do
|
173
|
-
@tag.rescue_clauses.
|
156
|
+
expect( @tag.rescue_clauses ).to eq([
|
174
157
|
[[::RuntimeError], [@rescue_textnode]],
|
175
158
|
[[Errno::ENOENT, Errno::EWOULDBLOCK], [@rescue_textnode2]],
|
176
|
-
]
|
159
|
+
])
|
177
160
|
end
|
178
161
|
|
179
162
|
it "renders its subnodes as-is if none of them raise an exception" do
|
180
163
|
renderstate = Inversion::RenderState.new( :foo => OpenStruct.new(:baz => 'the body') )
|
181
164
|
renderstate << @tag
|
182
|
-
renderstate.to_s.
|
165
|
+
expect( renderstate.to_s ).to eq( 'the body:the stuff after the attr' )
|
183
166
|
end
|
184
167
|
|
185
168
|
it "renders the first rescue section if a subnode raises the exception it " +
|
@@ -189,7 +172,7 @@ describe Inversion::Template::BeginTag do
|
|
189
172
|
|
190
173
|
renderstate = Inversion::RenderState.new( :foo => fooobj )
|
191
174
|
renderstate << @tag
|
192
|
-
renderstate.to_s.
|
175
|
+
expect( renderstate.to_s ).to eq( 'rescue stuff' )
|
193
176
|
end
|
194
177
|
|
195
178
|
it "renders the second rescue section if a subnode raises the exception it " +
|
@@ -199,7 +182,7 @@ describe Inversion::Template::BeginTag do
|
|
199
182
|
|
200
183
|
renderstate = Inversion::RenderState.new( :foo => fooobj )
|
201
184
|
renderstate << @tag
|
202
|
-
renderstate.to_s.
|
185
|
+
expect( renderstate.to_s ).to eq( 'alternative rescue stuff' )
|
203
186
|
end
|
204
187
|
|
205
188
|
it "uses the configured error behavior of the template if a subnode raises an " +
|
@@ -209,9 +192,9 @@ describe Inversion::Template::BeginTag do
|
|
209
192
|
|
210
193
|
renderstate = Inversion::RenderState.new( :foo => fooobj )
|
211
194
|
renderstate << @tag
|
212
|
-
renderstate.to_s.
|
213
|
-
renderstate.to_s.
|
214
|
-
renderstate.to_s.
|
195
|
+
expect( renderstate.to_s ).to match( /ENOMEM/i )
|
196
|
+
expect( renderstate.to_s ).to_not match( /rescue stuff/i )
|
197
|
+
expect( renderstate.to_s ).to_not match( /the stuff after the attr/i )
|
215
198
|
end
|
216
199
|
end
|
217
200
|
|