erbal 1.0.rc7 → 1.0.rc8
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/erbal/erbal.c +2 -4
- data/ext/erbal/parser.c +29 -8
- data/ext/erbal/parser.rl +23 -2
- data/lib/erbal/rails.rb +17 -4
- data/spec/erbal_spec.rb +24 -4
- data/tasks/gem.rake +1 -1
- metadata +3 -3
data/ext/erbal/erbal.c
CHANGED
@@ -16,16 +16,14 @@ VALUE rb_erbal_alloc(VALUE klass) {
|
|
16
16
|
}
|
17
17
|
|
18
18
|
VALUE rb_erbal_initialize(int argc, VALUE *argv, VALUE self) {
|
19
|
-
VALUE str,
|
19
|
+
VALUE str, options;
|
20
20
|
|
21
|
-
rb_scan_args(argc, argv, "
|
21
|
+
rb_scan_args(argc, argv, "11", &str, &options);
|
22
22
|
|
23
23
|
Check_Type(str, T_STRING);
|
24
|
-
Check_Type(buffer_name, T_STRING);
|
25
24
|
|
26
25
|
erbal_parser *parser = NULL;
|
27
26
|
Data_Get_Struct(self, erbal_parser, parser);
|
28
|
-
parser->buffer_name = buffer_name;
|
29
27
|
parser->str = str;
|
30
28
|
|
31
29
|
if (NIL_P(options)) {
|
data/ext/erbal/parser.c
CHANGED
@@ -168,16 +168,37 @@ void erbal_parser_init(erbal_parser *parser) {
|
|
168
168
|
parser->chars_seen = 0;
|
169
169
|
parser->in_buffer_shift = 0;
|
170
170
|
parser->state = OUTSIDE_TAG;
|
171
|
-
parser->debug = 0;
|
172
171
|
|
173
172
|
if (rb_hash_aref(parser->options, ID2SYM(rb_intern("debug"))) == Qtrue) {
|
174
173
|
parser->debug = 1;
|
174
|
+
} else {
|
175
|
+
parser->debug = 0;
|
176
|
+
}
|
177
|
+
|
178
|
+
VALUE buffer_name_val = rb_hash_aref(parser->options, ID2SYM(rb_intern("buffer")));
|
179
|
+
|
180
|
+
if (!NIL_P(buffer_name_val)) {
|
181
|
+
Check_Type(buffer_name_val, T_STRING);
|
182
|
+
parser->buffer_name = buffer_name_val;
|
183
|
+
} else {
|
184
|
+
parser->buffer_name = rb_str_new2("@output_buffer");
|
175
185
|
}
|
176
186
|
|
177
187
|
parser->src = rb_str_dup(parser->buffer_name);
|
178
|
-
|
188
|
+
|
189
|
+
VALUE buffer_init_val = rb_hash_aref(parser->options, ID2SYM(rb_intern("buffer_initial_value")));
|
190
|
+
|
191
|
+
if (!NIL_P(buffer_init_val)) {
|
192
|
+
Check_Type(buffer_init_val, T_STRING);
|
193
|
+
rb_str_buf_cat(parser->src, " = ", 3);
|
194
|
+
rb_str_concat(parser->src, buffer_init_val);
|
195
|
+
rb_str_buf_cat(parser->src, ";", 1);
|
196
|
+
} else {
|
197
|
+
rb_str_buf_cat(parser->src, " = '';", 6);
|
198
|
+
}
|
199
|
+
|
179
200
|
|
180
|
-
#line
|
201
|
+
#line 202 "parser.c"
|
181
202
|
{
|
182
203
|
cs = erbal_parser_start;
|
183
204
|
ts = 0;
|
@@ -185,14 +206,14 @@ void erbal_parser_init(erbal_parser *parser) {
|
|
185
206
|
act = 0;
|
186
207
|
}
|
187
208
|
|
188
|
-
#line
|
209
|
+
#line 200 "parser.rl"
|
189
210
|
}
|
190
211
|
|
191
212
|
void erbal_parser_exec(erbal_parser *parser) {
|
192
213
|
p = RSTRING(parser->str)->ptr;
|
193
214
|
pe = p + strlen(p);
|
194
215
|
|
195
|
-
#line
|
216
|
+
#line 217 "parser.c"
|
196
217
|
{
|
197
218
|
if ( p == pe )
|
198
219
|
goto _test_eof;
|
@@ -242,7 +263,7 @@ st1:
|
|
242
263
|
case 1:
|
243
264
|
#line 1 "NONE"
|
244
265
|
{ts = p;}
|
245
|
-
#line
|
266
|
+
#line 267 "parser.c"
|
246
267
|
switch( (*p) ) {
|
247
268
|
case 37: goto st2;
|
248
269
|
case 45: goto tr4;
|
@@ -264,7 +285,7 @@ st3:
|
|
264
285
|
if ( ++p == pe )
|
265
286
|
goto _test_eof3;
|
266
287
|
case 3:
|
267
|
-
#line
|
288
|
+
#line 289 "parser.c"
|
268
289
|
if ( (*p) == 37 )
|
269
290
|
goto st0;
|
270
291
|
goto tr6;
|
@@ -314,6 +335,6 @@ case 5:
|
|
314
335
|
|
315
336
|
}
|
316
337
|
|
317
|
-
#line
|
338
|
+
#line 206 "parser.rl"
|
318
339
|
erbal_parser_finish(parser);
|
319
340
|
}
|
data/ext/erbal/parser.rl
CHANGED
@@ -167,14 +167,35 @@ void erbal_parser_init(erbal_parser *parser) {
|
|
167
167
|
parser->chars_seen = 0;
|
168
168
|
parser->in_buffer_shift = 0;
|
169
169
|
parser->state = OUTSIDE_TAG;
|
170
|
-
parser->debug = 0;
|
171
170
|
|
172
171
|
if (rb_hash_aref(parser->options, ID2SYM(rb_intern("debug"))) == Qtrue) {
|
173
172
|
parser->debug = 1;
|
173
|
+
} else {
|
174
|
+
parser->debug = 0;
|
175
|
+
}
|
176
|
+
|
177
|
+
VALUE buffer_name_val = rb_hash_aref(parser->options, ID2SYM(rb_intern("buffer")));
|
178
|
+
|
179
|
+
if (!NIL_P(buffer_name_val)) {
|
180
|
+
Check_Type(buffer_name_val, T_STRING);
|
181
|
+
parser->buffer_name = buffer_name_val;
|
182
|
+
} else {
|
183
|
+
parser->buffer_name = rb_str_new2("@output_buffer");
|
174
184
|
}
|
175
185
|
|
176
186
|
parser->src = rb_str_dup(parser->buffer_name);
|
177
|
-
|
187
|
+
|
188
|
+
VALUE buffer_init_val = rb_hash_aref(parser->options, ID2SYM(rb_intern("buffer_initial_value")));
|
189
|
+
|
190
|
+
if (!NIL_P(buffer_init_val)) {
|
191
|
+
Check_Type(buffer_init_val, T_STRING);
|
192
|
+
rb_str_buf_cat(parser->src, " = ", 3);
|
193
|
+
rb_str_concat(parser->src, buffer_init_val);
|
194
|
+
rb_str_buf_cat(parser->src, ";", 1);
|
195
|
+
} else {
|
196
|
+
rb_str_buf_cat(parser->src, " = '';", 6);
|
197
|
+
}
|
198
|
+
|
178
199
|
%% write init;
|
179
200
|
}
|
180
201
|
|
data/lib/erbal/rails.rb
CHANGED
@@ -1,8 +1,21 @@
|
|
1
1
|
require 'erbal'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
::
|
3
|
+
if ActiveSupport.const_defined?('SafeBuffer')
|
4
|
+
|
5
|
+
class ErbalTemplateHandler < ActionView::TemplateHandler
|
6
|
+
include ActionView::TemplateHandlers::Compilable
|
7
|
+
def compile(template)
|
8
|
+
::Erbal.new("<% __in_erb_template=true %>#{template.source}", {:buffer => '@output_buffer', :buffer_initial_value => 'ActiveSupport::SafeBuffer.new'}).parse
|
9
|
+
end
|
7
10
|
end
|
11
|
+
|
12
|
+
else
|
13
|
+
|
14
|
+
class ErbalTemplateHandler < ActionView::TemplateHandler
|
15
|
+
include ActionView::TemplateHandlers::Compilable
|
16
|
+
def compile(template)
|
17
|
+
::Erbal.new("<% __in_erb_template=true %>#{template.source}", {:buffer => '@output_buffer'}).parse
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
8
21
|
end
|
data/spec/erbal_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Erbal do
|
4
|
-
def erbal_parse(str)
|
5
|
-
Erbal.new(str,
|
4
|
+
def erbal_parse(str, options = {:buffer => '@out'})
|
5
|
+
Erbal.new(str, options).parse
|
6
6
|
end
|
7
7
|
|
8
8
|
def erubis_parse(str)
|
@@ -11,8 +11,28 @@ describe Erbal do
|
|
11
11
|
Erubis::FastEruby.new.convert(str)
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
erbal_parse(
|
14
|
+
it "should default to @output_buffer if the :buffer option is not specified" do
|
15
|
+
erbal_parse("", :buffer => nil).should == "@output_buffer = '';@output_buffer"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should use the buffer specified via the :buffer option" do
|
19
|
+
erbal_parse("", :buffer => "_woot").should == "_woot = '';_woot"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should raise an error if the value given as the :buffer option is not a string" do
|
23
|
+
expect { erbal_parse("", :buffer => Class.new) }.should raise_error("wrong argument type Class (expected String)")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should default to an empty string as the initial buffer value if the :buffer_initial_value is not specified" do
|
27
|
+
erbal_parse("", :buffer_initial_value => nil).should == "@output_buffer = '';@output_buffer"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should use the initial value for the buffer specified by the :buffer_initial_value option" do
|
31
|
+
erbal_parse("", :buffer_initial_value => 'MyClass.new').should == "@output_buffer = MyClass.new;@output_buffer"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should raise an error if the value given as the :buffer_initial_value option is not a string" do
|
35
|
+
expect { erbal_parse("", :buffer_initial_value => Class.new) }.should raise_error("wrong argument type Class (expected String)")
|
16
36
|
end
|
17
37
|
|
18
38
|
it "should parse a blank string" do
|
data/tasks/gem.rake
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erbal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 977940497
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- rc8
|
10
|
+
version: 1.0.rc8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ian Leitch
|