erbal 0.0.2 → 0.0.3.rc1

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/benchmark/bench.rb CHANGED
@@ -3,7 +3,7 @@ require 'rubygems'
3
3
  require 'erubis'
4
4
  require File.expand_path(File.dirname(__FILE__)) + '/../lib/erbal'
5
5
 
6
- RUNS = 10000
6
+ RUNS = 3000
7
7
  REPEAT = 6
8
8
  SRC = File.read('sample.erb')
9
9
 
@@ -19,10 +19,10 @@ class Benchmark
19
19
  total += Time.now-start
20
20
  end
21
21
  times << total
22
- puts " #{i+1}) #{sprintf("%.2f", total)}" unless warmup
22
+ puts " #{i+1}) #{sprintf("%.3f", total)}" unless warmup
23
23
  end
24
24
  unless warmup
25
- puts "=> Average: #{sprintf("%.2f", times.inject(0){|c, n| c += n} / times.size)}"
25
+ puts "=> Average: #{sprintf("%.3f", times.inject(0){|c, n| c += n} / times.size)}"
26
26
  end
27
27
  end
28
28
  end
data/ext/erbal/erbal.c CHANGED
@@ -15,12 +15,12 @@ VALUE rb_erbal_alloc(VALUE klass) {
15
15
  return obj;
16
16
  }
17
17
 
18
- VALUE rb_erbal_initialize(VALUE self, VALUE str, VALUE buffer) {
18
+ VALUE rb_erbal_initialize(VALUE self, VALUE str, VALUE buffer_name) {
19
19
  Check_Type(str, T_STRING);
20
- Check_Type(buffer, T_STRING);
20
+ Check_Type(buffer_name, T_STRING);
21
21
  erbal_parser *parser = NULL;
22
22
  Data_Get_Struct(self, erbal_parser, parser);
23
- parser->buffer = buffer;
23
+ parser->buffer_name = buffer_name;
24
24
  parser->str = str;
25
25
  return self;
26
26
  }
data/ext/erbal/parser.c CHANGED
@@ -21,81 +21,86 @@ static const int erbal_parser_en_main = 1;
21
21
  static char *ts, *te, *p, *pe, *eof;
22
22
  static int act, cs;
23
23
 
24
- inline void erbal_parser_tag_open(erbal_parser *parser) {
25
- parser->open = 1;
26
- if (parser->mark) {
27
- parser->mark = 0;
24
+ inline void erbal_parser_tag_open_common(erbal_parser *parser, int shift) {
25
+ if (parser->chars_seen != 0) {
26
+ rb_str_concat(parser->src, parser->buffer_name);
27
+ rb_str_buf_cat(parser->src, ".concat(\"", 9);
28
+ erbal_concat_chars_seen(parser, shift);
28
29
  rb_str_buf_cat(parser->src, "\");", 3);
30
+ parser->chars_seen = 0;
29
31
  }
30
32
  }
31
33
 
32
- inline void erbal_parser_tag_open_with_output(erbal_parser *parser) {
33
- erbal_parser_tag_open(parser);
34
- parser->output = 1;
35
- rb_str_concat(parser->src, parser->buffer);
36
- rb_str_buf_cat(parser->src, ".concat((", 9);
34
+ inline void erbal_parser_tag_open(erbal_parser *parser) {
35
+ erbal_parser_tag_open_common(parser, -1);
36
+ parser->state = TAG_OPEN;
37
37
  }
38
38
 
39
- inline void erbal_parser_tag_open_with_comment(erbal_parser *parser) {
40
- erbal_parser_tag_open(parser);
41
- parser->comment = 1;
39
+ inline void erbal_parser_tag_open_for_output(erbal_parser *parser) {
40
+ erbal_parser_tag_open_common(parser, -2);
41
+ parser->state = TAG_OPEN_FOR_OUTPUT;
42
42
  }
43
43
 
44
- inline void erbal_parser_any(erbal_parser *parser) {
45
- if (parser->comment) {
46
- return;
47
- }
44
+ inline void erbal_parser_tag_open_for_comment(erbal_parser *parser) {
45
+ parser->state = TAG_OPEN_FOR_COMMENT;
46
+ }
48
47
 
49
- if (parser->open) {
50
- rb_str_buf_cat(parser->src, p, 1);
51
- } else {
52
- if (!parser->mark) {
53
- parser->mark = 1;
54
- rb_str_concat(parser->src, parser->buffer);
55
- rb_str_buf_cat(parser->src, ".concat(\"", 9);
56
- }
57
- if (p[0] == '"') {
58
- rb_str_buf_cat(parser->src, "\\\"", 2);
59
- } else {
60
- rb_str_buf_cat(parser->src, p, 1);
61
- }
48
+ inline void erbal_parser_non_tag(erbal_parser *parser) {
49
+ parser->chars_seen += 1;
50
+ }
51
+
52
+ inline void erbal_parser_tag_close_common(erbal_parser *parser, int tag_size) {
53
+ if (parser->state == TAG_OPEN_FOR_OUTPUT) {
54
+ rb_str_concat(parser->src, parser->buffer_name);
55
+ rb_str_buf_cat(parser->src, ".concat((", 9);
56
+ erbal_concat_chars_seen(parser, -tag_size);
57
+ rb_str_buf_cat(parser->src, ").to_s);", 8);
58
+ } else if (parser->state == TAG_OPEN) {
59
+ erbal_concat_chars_seen(parser, -tag_size);
60
+ rb_str_buf_cat(parser->src, ";", 1);
62
61
  }
62
+
63
+ parser->state = OUTSIDE_TAG;
64
+ parser->chars_seen = 0;
63
65
  }
64
66
 
65
67
  inline void erbal_parser_tag_close_with_trim(erbal_parser *parser) {
66
- erbal_parser_tag_close(parser);
67
- if (p[1] == '\n') {
68
+ erbal_parser_tag_close_common(parser, 2);
69
+
70
+ if (*(p + 1) == '\n') {
68
71
  p++;
69
72
  }
70
73
  }
71
74
 
72
75
  inline void erbal_parser_tag_close(erbal_parser *parser) {
73
- parser->open = 0;
74
- if (parser->output) {
75
- parser->output = 0;
76
- rb_str_buf_cat(parser->src, ").to_s);", 8);
77
- } else if (!parser->comment) {
78
- rb_str_buf_cat(parser->src, ";", 1);
76
+ erbal_parser_tag_close_common(parser, 1);
77
+ }
78
+
79
+ inline void erbal_concat_chars_seen(erbal_parser *parser, int rewind_chars) {
80
+ if (parser->chars_seen != 0) {
81
+ rb_str_buf_cat(parser->src, ((p + rewind_chars) - parser->chars_seen), parser->chars_seen);
79
82
  }
80
- parser->comment = 0;
83
+
84
+ parser->chars_seen = 0;
81
85
  }
82
86
 
83
87
  inline void erbal_parser_finish(erbal_parser *parser) {
84
- if (parser->mark) {
88
+ if (parser->chars_seen != 0) {
89
+ rb_str_concat(parser->src, parser->buffer_name);
90
+ rb_str_buf_cat(parser->src, ".concat(\"", 9);
91
+ erbal_concat_chars_seen(parser, 0);
85
92
  rb_str_buf_cat(parser->src, "\");", 3);
86
93
  }
87
- rb_str_concat(parser->src, parser->buffer);
94
+ rb_str_concat(parser->src, parser->buffer_name);
88
95
  }
89
96
 
90
97
  void erbal_parser_init(erbal_parser *parser) {
91
- parser->mark = 0;
92
- parser->open = 0;
93
- parser->output = 0;
94
- parser->comment = 0;
95
- parser->src = rb_str_dup(parser->buffer);
98
+ parser->state = 0;
99
+ parser->chars_seen = 0;
100
+ parser->src = rb_str_dup(parser->buffer_name);
96
101
  rb_str_buf_cat(parser->src, "=\"\";", 4);
97
102
 
98
- #line 99 "parser.c"
103
+ #line 104 "parser.c"
99
104
  {
100
105
  cs = erbal_parser_start;
101
106
  ts = 0;
@@ -103,37 +108,37 @@ void erbal_parser_init(erbal_parser *parser) {
103
108
  act = 0;
104
109
  }
105
110
 
106
- #line 96 "parser.rl"
111
+ #line 101 "parser.rl"
107
112
  }
108
113
 
109
114
  void erbal_parser_exec(erbal_parser *parser) {
110
115
  p = RSTRING(parser->str)->ptr;
111
116
  pe = p + strlen(p);
112
117
 
113
- #line 114 "parser.c"
118
+ #line 119 "parser.c"
114
119
  {
115
120
  if ( p == pe )
116
121
  goto _test_eof;
117
122
  switch ( cs )
118
123
  {
119
124
  tr0:
120
- #line 11 "parser.rl"
121
- {{p = ((te))-1;}{ erbal_parser_any(parser); }}
125
+ #line 13 "parser.rl"
126
+ {{p = ((te))-1;}{ erbal_parser_non_tag(parser); }}
122
127
  goto st1;
123
128
  tr1:
124
- #line 12 "parser.rl"
129
+ #line 11 "parser.rl"
125
130
  {te = p+1;{ erbal_parser_tag_close_with_trim(parser); }}
126
131
  goto st1;
127
132
  tr2:
128
- #line 11 "parser.rl"
129
- {te = p+1;{ erbal_parser_any(parser); }}
133
+ #line 13 "parser.rl"
134
+ {te = p+1;{ erbal_parser_non_tag(parser); }}
130
135
  goto st1;
131
136
  tr6:
132
- #line 11 "parser.rl"
133
- {te = p;p--;{ erbal_parser_any(parser); }}
137
+ #line 13 "parser.rl"
138
+ {te = p;p--;{ erbal_parser_non_tag(parser); }}
134
139
  goto st1;
135
140
  tr7:
136
- #line 13 "parser.rl"
141
+ #line 12 "parser.rl"
137
142
  {te = p+1;{ erbal_parser_tag_close(parser); }}
138
143
  goto st1;
139
144
  tr10:
@@ -142,21 +147,21 @@ tr10:
142
147
  goto st1;
143
148
  tr11:
144
149
  #line 9 "parser.rl"
145
- {te = p+1;{ erbal_parser_tag_open_with_comment(parser); }}
150
+ {te = p+1;{ erbal_parser_tag_open_for_comment(parser); }}
146
151
  goto st1;
147
152
  tr12:
148
153
  #line 10 "parser.rl"
149
- {te = p+1;{ erbal_parser_tag_open_with_output(parser); }}
154
+ {te = p+1;{ erbal_parser_tag_open_for_output(parser); }}
150
155
  goto st1;
151
156
  st1:
152
- #line 1 "parser.rl"
157
+ #line 1 "NONE"
153
158
  {ts = 0;}
154
159
  if ( ++p == pe )
155
160
  goto _test_eof1;
156
161
  case 1:
157
- #line 1 "parser.rl"
162
+ #line 1 "NONE"
158
163
  {ts = p;}
159
- #line 160 "parser.c"
164
+ #line 165 "parser.c"
160
165
  switch( (*p) ) {
161
166
  case 37: goto st2;
162
167
  case 45: goto tr4;
@@ -171,14 +176,14 @@ case 2:
171
176
  goto tr7;
172
177
  goto tr6;
173
178
  tr4:
174
- #line 1 "parser.rl"
179
+ #line 1 "NONE"
175
180
  {te = p+1;}
176
181
  goto st3;
177
182
  st3:
178
183
  if ( ++p == pe )
179
184
  goto _test_eof3;
180
185
  case 3:
181
- #line 182 "parser.c"
186
+ #line 187 "parser.c"
182
187
  if ( (*p) == 37 )
183
188
  goto st0;
184
189
  goto tr6;
@@ -227,6 +232,6 @@ case 5:
227
232
 
228
233
  }
229
234
 
230
- #line 102 "parser.rl"
235
+ #line 107 "parser.rl"
231
236
  erbal_parser_finish(parser);
232
237
  }
data/ext/erbal/parser.h CHANGED
@@ -4,16 +4,24 @@
4
4
  #include "ruby.h"
5
5
 
6
6
  typedef struct erbal_parser {
7
- int output, open, mark, comment;
8
- VALUE str, src, buffer;
7
+ unsigned int state, chars_seen, tag_seen;
8
+ VALUE str, src, buffer_name;
9
9
  } erbal_parser;
10
10
 
11
11
  inline void erbal_parser_tag_open(erbal_parser*);
12
- inline void erbal_parser_tag_open_with_comment(erbal_parser*);
13
- inline void erbal_parser_tag_open_with_output(erbal_parser*);
14
- inline void erbal_parser_any(erbal_parser*);
12
+ inline void erbal_parser_tag_open_for_comment(erbal_parser*);
13
+ inline void erbal_parser_tag_open_for_output(erbal_parser*);
14
+ inline void erbal_parser_non_tag(erbal_parser*);
15
15
  inline void erbal_parser_tag_close(erbal_parser*);
16
16
  inline void erbal_parser_tag_close_with_trim(erbal_parser*);
17
+ inline void erbal_parser_tag_close_common(erbal_parser*, int shift);
17
18
  inline void erbal_parser_finish(erbal_parser*);
19
+ inline void erbal_concat_chars_seen(erbal_parser*, int shift);
20
+ inline void erbal_parser_tag_open_common(erbal_parser*, int shift);
18
21
 
19
- #endif
22
+ #define TAG_OPEN 1
23
+ #define TAG_OPEN_FOR_COMMENT 2
24
+ #define TAG_OPEN_FOR_OUTPUT 3
25
+ #define OUTSIDE_TAG 4
26
+
27
+ #endif
data/ext/erbal/parser.rl CHANGED
@@ -6,11 +6,11 @@
6
6
 
7
7
  main := |*
8
8
  '<%' => { erbal_parser_tag_open(parser); };
9
- '<%#' => { erbal_parser_tag_open_with_comment(parser); };
10
- '<%=' => { erbal_parser_tag_open_with_output(parser); };
11
- any => { erbal_parser_any(parser); };
9
+ '<%#' => { erbal_parser_tag_open_for_comment(parser); };
10
+ '<%=' => { erbal_parser_tag_open_for_output(parser); };
12
11
  '-%>' => { erbal_parser_tag_close_with_trim(parser); };
13
12
  '%>' => { erbal_parser_tag_close(parser); };
13
+ any => { erbal_parser_non_tag(parser); };
14
14
  *|;
15
15
  }%%
16
16
 
@@ -19,78 +19,83 @@
19
19
  static char *ts, *te, *p, *pe, *eof;
20
20
  static int act, cs;
21
21
 
22
- inline void erbal_parser_tag_open(erbal_parser *parser) {
23
- parser->open = 1;
24
- if (parser->mark) {
25
- parser->mark = 0;
22
+ inline void erbal_parser_tag_open_common(erbal_parser *parser, int shift) {
23
+ if (parser->chars_seen != 0) {
24
+ rb_str_concat(parser->src, parser->buffer_name);
25
+ rb_str_buf_cat(parser->src, ".concat(\"", 9);
26
+ erbal_concat_chars_seen(parser, shift);
26
27
  rb_str_buf_cat(parser->src, "\");", 3);
28
+ parser->chars_seen = 0;
27
29
  }
28
30
  }
29
31
 
30
- inline void erbal_parser_tag_open_with_output(erbal_parser *parser) {
31
- erbal_parser_tag_open(parser);
32
- parser->output = 1;
33
- rb_str_concat(parser->src, parser->buffer);
34
- rb_str_buf_cat(parser->src, ".concat((", 9);
32
+ inline void erbal_parser_tag_open(erbal_parser *parser) {
33
+ erbal_parser_tag_open_common(parser, -1);
34
+ parser->state = TAG_OPEN;
35
35
  }
36
36
 
37
- inline void erbal_parser_tag_open_with_comment(erbal_parser *parser) {
38
- erbal_parser_tag_open(parser);
39
- parser->comment = 1;
37
+ inline void erbal_parser_tag_open_for_output(erbal_parser *parser) {
38
+ erbal_parser_tag_open_common(parser, -2);
39
+ parser->state = TAG_OPEN_FOR_OUTPUT;
40
40
  }
41
41
 
42
- inline void erbal_parser_any(erbal_parser *parser) {
43
- if (parser->comment) {
44
- return;
45
- }
42
+ inline void erbal_parser_tag_open_for_comment(erbal_parser *parser) {
43
+ parser->state = TAG_OPEN_FOR_COMMENT;
44
+ }
46
45
 
47
- if (parser->open) {
48
- rb_str_buf_cat(parser->src, p, 1);
49
- } else {
50
- if (!parser->mark) {
51
- parser->mark = 1;
52
- rb_str_concat(parser->src, parser->buffer);
53
- rb_str_buf_cat(parser->src, ".concat(\"", 9);
54
- }
55
- if (p[0] == '"') {
56
- rb_str_buf_cat(parser->src, "\\\"", 2);
57
- } else {
58
- rb_str_buf_cat(parser->src, p, 1);
59
- }
46
+ inline void erbal_parser_non_tag(erbal_parser *parser) {
47
+ parser->chars_seen += 1;
48
+ }
49
+
50
+ inline void erbal_parser_tag_close_common(erbal_parser *parser, int tag_size) {
51
+ if (parser->state == TAG_OPEN_FOR_OUTPUT) {
52
+ rb_str_concat(parser->src, parser->buffer_name);
53
+ rb_str_buf_cat(parser->src, ".concat((", 9);
54
+ erbal_concat_chars_seen(parser, -tag_size);
55
+ rb_str_buf_cat(parser->src, ").to_s);", 8);
56
+ } else if (parser->state == TAG_OPEN) {
57
+ erbal_concat_chars_seen(parser, -tag_size);
58
+ rb_str_buf_cat(parser->src, ";", 1);
60
59
  }
60
+
61
+ parser->state = OUTSIDE_TAG;
62
+ parser->chars_seen = 0;
61
63
  }
62
64
 
63
65
  inline void erbal_parser_tag_close_with_trim(erbal_parser *parser) {
64
- erbal_parser_tag_close(parser);
65
- if (p[1] == '\n') {
66
+ erbal_parser_tag_close_common(parser, 2);
67
+
68
+ if (*(p + 1) == '\n') {
66
69
  p++;
67
70
  }
68
71
  }
69
72
 
70
73
  inline void erbal_parser_tag_close(erbal_parser *parser) {
71
- parser->open = 0;
72
- if (parser->output) {
73
- parser->output = 0;
74
- rb_str_buf_cat(parser->src, ").to_s);", 8);
75
- } else if (!parser->comment) {
76
- rb_str_buf_cat(parser->src, ";", 1);
74
+ erbal_parser_tag_close_common(parser, 1);
75
+ }
76
+
77
+ inline void erbal_concat_chars_seen(erbal_parser *parser, int rewind_chars) {
78
+ if (parser->chars_seen != 0) {
79
+ rb_str_buf_cat(parser->src, ((p + rewind_chars) - parser->chars_seen), parser->chars_seen);
77
80
  }
78
- parser->comment = 0;
81
+
82
+ parser->chars_seen = 0;
79
83
  }
80
84
 
81
85
  inline void erbal_parser_finish(erbal_parser *parser) {
82
- if (parser->mark) {
86
+ if (parser->chars_seen != 0) {
87
+ rb_str_concat(parser->src, parser->buffer_name);
88
+ rb_str_buf_cat(parser->src, ".concat(\"", 9);
89
+ erbal_concat_chars_seen(parser, 0);
83
90
  rb_str_buf_cat(parser->src, "\");", 3);
84
91
  }
85
- rb_str_concat(parser->src, parser->buffer);
92
+ rb_str_concat(parser->src, parser->buffer_name);
86
93
  }
87
94
 
88
95
  void erbal_parser_init(erbal_parser *parser) {
89
- parser->mark = 0;
90
- parser->open = 0;
91
- parser->output = 0;
92
- parser->comment = 0;
93
- parser->src = rb_str_dup(parser->buffer);
96
+ parser->state = 0;
97
+ parser->chars_seen = 0;
98
+ parser->src = rb_str_dup(parser->buffer_name);
94
99
  rb_str_buf_cat(parser->src, "=\"\";", 4);
95
100
  %% write init;
96
101
  }
data/lib/erbal.bundle CHANGED
Binary file
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Erbal do
4
+ def parse(str)
5
+ Erbal.new(str, '@out').parse
6
+ end
7
+
8
+ it "should parse a blank string" do
9
+ parse("").should == '@out="";@out'
10
+ end
11
+
12
+ it "should parse content without any tags" do
13
+ parse("I love unicorns!").should == '@out="";@out.concat("I love unicorns!");@out'
14
+ end
15
+
16
+ it "should parse the <% tag" do
17
+ parse("<% 1 + 1 %>").should == '@out=""; 1 + 1 ;@out'
18
+ end
19
+
20
+ it "should parse the <%= tag" do
21
+ parse("<%= 1 + 1 %>").should == '@out="";@out.concat(( 1 + 1 ).to_s);@out'
22
+ end
23
+
24
+ it "should parse the comment tag <%#" do
25
+ parse("<%# I'm a comment %>").should == '@out="";@out'
26
+ end
27
+
28
+ it "should swallow the following newline if the -%> tag is used" do
29
+ parse("<%= 1 + 1 -%>\n").should == '@out="";@out.concat(( 1 + 1 ).to_s);@out'
30
+ end
31
+
32
+ it "should not swallow the following character if the -%> tag is used and the following character is not a newline" do
33
+ parse("<%= 1 + 1 -%>Z").should == '@out="";@out.concat(( 1 + 1 ).to_s);@out.concat("Z");@out'
34
+ end
35
+
36
+ it "should concat text surrounding the tags when the opening tag is <%" do
37
+ parse("1 + 1 is <% 1 + 1 %>. Easy!").should == '@out="";@out.concat("1 + 1 is "); 1 + 1 ;@out.concat(". Easy!");@out'
38
+ end
39
+
40
+ it "should concat text surrounding the tags when the opening tag is <%=" do
41
+ parse("1 + 1 is <%= 1 + 1 %>. Easy!").should == '@out="";@out.concat("1 + 1 is ");@out.concat(( 1 + 1 ).to_s);@out.concat(". Easy!");@out'
42
+ end
43
+
44
+ it "should escape double quotes used outside tags" do
45
+ puts eval(parse("1 + \" 1 is <%= \"weeee\" %>. Easy!"))
46
+ end
47
+ end
@@ -0,0 +1,10 @@
1
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
2
+ `rake clean`
3
+ `rake compile`
4
+ require 'erbal'
5
+ RSpec.configure do |config|
6
+ config.after :suite do
7
+ puts
8
+ `rake clean`
9
+ end
10
+ end
data/tasks/gem.rake CHANGED
@@ -2,7 +2,7 @@ require 'rake/gempackagetask'
2
2
  require 'yaml'
3
3
 
4
4
  WIN_SUFFIX = ENV['WIN_SUFFIX'] || 'i386-mswin32'
5
- ERBAL_VERSION = '0.0.2'
5
+ ERBAL_VERSION = '0.0.3.rc1'
6
6
 
7
7
  task :clean => :clobber_package
8
8
 
@@ -10,7 +10,7 @@ spec = Gem::Specification.new do |s|
10
10
  s.name = 'erbal'
11
11
  s.version = ERBAL_VERSION
12
12
  s.platform = WIN ? Gem::Platform::CURRENT : Gem::Platform::RUBY
13
- s.summary =
13
+ s.summary =
14
14
  s.description = "Very small, very fast Ragel/C based ERB parser"
15
15
  s.author = "Ian Leitch"
16
16
  s.email = 'ian.leitch@systino.net'
@@ -18,15 +18,15 @@ spec = Gem::Specification.new do |s|
18
18
  s.has_rdoc = false
19
19
 
20
20
  s.files = %w(COPYING CHANGELOG README.rdoc Rakefile) +
21
- Dir.glob("{lib,spec,tasks,benchmark}/**/*") +
21
+ Dir.glob("{lib,spec,tasks,benchmark}/**/*") +
22
22
  Dir.glob("ext/**/*.{h,c,rb,rl}")
23
-
23
+
24
24
  if WIN
25
25
  s.files += ["lib/erbal.#{Config::CONFIG['DLEXT']}"]
26
26
  else
27
27
  s.extensions = FileList["ext/**/extconf.rb"].to_a
28
28
  end
29
-
29
+
30
30
  s.require_path = "lib"
31
31
  end
32
32
 
@@ -38,7 +38,7 @@ namespace :gem do
38
38
  desc "Update the gemspec for GitHub's gem server"
39
39
  task :github do
40
40
  File.open("erbal.gemspec", 'w') { |f| f << YAML.dump(spec) }
41
- end
41
+ end
42
42
  end
43
43
 
44
44
  task :install => [:clean, :clobber, :ragel, :compile, :package] do
data/tasks/spec.rake CHANGED
@@ -0,0 +1,7 @@
1
+ require 'bundler'
2
+ Bundler.load
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec) do |t|
6
+ t.pattern = Dir.glob('spec/**/*_spec.rb')
7
+ end
metadata CHANGED
@@ -1,7 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erbal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ hash: 977940546
5
+ prerelease: true
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 3
10
+ - rc1
11
+ version: 0.0.3.rc1
5
12
  platform: ruby
6
13
  authors:
7
14
  - Ian Leitch
@@ -9,7 +16,7 @@ autorequire:
9
16
  bindir: bin
10
17
  cert_chain: []
11
18
 
12
- date: 2009-10-23 00:00:00 -04:00
19
+ date: 2010-12-17 00:00:00 +11:00
13
20
  default_executable:
14
21
  dependencies: []
15
22
 
@@ -28,6 +35,8 @@ files:
28
35
  - Rakefile
29
36
  - lib/erbal/rails.rb
30
37
  - lib/erbal.bundle
38
+ - spec/erbal_spec.rb
39
+ - spec/spec_helper.rb
31
40
  - tasks/ext.rake
32
41
  - tasks/gem.rake
33
42
  - tasks/spec.rake
@@ -48,21 +57,29 @@ rdoc_options: []
48
57
  require_paths:
49
58
  - lib
50
59
  required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
51
61
  requirements:
52
62
  - - ">="
53
63
  - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
54
67
  version: "0"
55
- version:
56
68
  required_rubygems_version: !ruby/object:Gem::Requirement
69
+ none: false
57
70
  requirements:
58
- - - ">="
71
+ - - ">"
59
72
  - !ruby/object:Gem::Version
60
- version: "0"
61
- version:
73
+ hash: 25
74
+ segments:
75
+ - 1
76
+ - 3
77
+ - 1
78
+ version: 1.3.1
62
79
  requirements: []
63
80
 
64
81
  rubyforge_project:
65
- rubygems_version: 1.3.5
82
+ rubygems_version: 1.3.7
66
83
  signing_key:
67
84
  specification_version: 3
68
85
  summary: Very small, very fast Ragel/C based ERB parser