erbal 1.0.rc4 → 1.0.rc6

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,7 +15,11 @@ 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_name, VALUE options) {
18
+ VALUE rb_erbal_initialize(int argc, VALUE *argv, VALUE self) {
19
+ VALUE str, buffer_name, options;
20
+
21
+ rb_scan_args(argc, argv, "21", &str, &buffer_name, &options);
22
+
19
23
  Check_Type(str, T_STRING);
20
24
  Check_Type(buffer_name, T_STRING);
21
25
 
@@ -24,7 +28,7 @@ VALUE rb_erbal_initialize(VALUE self, VALUE str, VALUE buffer_name, VALUE option
24
28
  parser->buffer_name = buffer_name;
25
29
  parser->str = str;
26
30
 
27
- if (options == Qtrue) {
31
+ if (NIL_P(options)) {
28
32
  parser->options = rb_hash_new();
29
33
  } else {
30
34
  Check_Type(options, T_HASH);
@@ -45,6 +49,6 @@ VALUE rb_erbal_parse(VALUE self) {
45
49
  void Init_erbal() {
46
50
  cErbal = rb_define_class("Erbal", rb_cObject);
47
51
  rb_define_alloc_func(cErbal, rb_erbal_alloc);
48
- rb_define_method(cErbal, "initialize", rb_erbal_initialize, 3);
52
+ rb_define_method(cErbal, "initialize", rb_erbal_initialize, -1);
49
53
  rb_define_method(cErbal, "parse", rb_erbal_parse, 0);
50
54
  }
@@ -122,7 +122,7 @@ inline VALUE erbal_escape_special_chars(erbal_parser *parser, int shift) {
122
122
 
123
123
  inline void erbal_concat_chars_seen(erbal_parser *parser, int shift) {
124
124
  if (parser->chars_seen != 0) {
125
- if (parser->in_buffer_shift) {
125
+ if (parser->in_buffer_shift && parser->state == OUTSIDE_TAG) {
126
126
  rb_str_concat(parser->src, erbal_escape_special_chars(parser, shift));
127
127
  } else {
128
128
  rb_str_buf_cat(parser->src, ((p + shift) - parser->chars_seen), parser->chars_seen);
@@ -157,7 +157,7 @@ inline void erbal_parser_finish(erbal_parser *parser) {
157
157
  }
158
158
 
159
159
  rb_str_concat(parser->src, parser->buffer_name);
160
-
160
+
161
161
  if (parser->debug) {
162
162
  printf("ERBAL DEBUG: %s\n", RSTRING(rb_inspect(parser->src))->ptr);
163
163
  }
@@ -121,7 +121,7 @@ inline VALUE erbal_escape_special_chars(erbal_parser *parser, int shift) {
121
121
 
122
122
  inline void erbal_concat_chars_seen(erbal_parser *parser, int shift) {
123
123
  if (parser->chars_seen != 0) {
124
- if (parser->in_buffer_shift) {
124
+ if (parser->in_buffer_shift && parser->state == OUTSIDE_TAG) {
125
125
  rb_str_concat(parser->src, erbal_escape_special_chars(parser, shift));
126
126
  } else {
127
127
  rb_str_buf_cat(parser->src, ((p + shift) - parser->chars_seen), parser->chars_seen);
@@ -156,7 +156,7 @@ inline void erbal_parser_finish(erbal_parser *parser) {
156
156
  }
157
157
 
158
158
  rb_str_concat(parser->src, parser->buffer_name);
159
-
159
+
160
160
  if (parser->debug) {
161
161
  printf("ERBAL DEBUG: %s\n", RSTRING(rb_inspect(parser->src))->ptr);
162
162
  }
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Erbal do
4
4
  def erbal_parse(str)
5
- Erbal.new(str, '@out', {:debug => false}).parse
5
+ Erbal.new(str, '@out').parse
6
6
  end
7
7
 
8
8
  def erubis_parse(str)
@@ -63,7 +63,7 @@ describe Erbal do
63
63
  erbal_parse("1 + 1 is <%= 1 + 1 %>, and 2 + 2 is <%= 2 + 2 %>. Easy!").should == "@out = '';@out << %Q`1 + 1 is \#{ 1 + 1 }, and 2 + 2 is \#{ 2 + 2 }. Easy!`;@out"
64
64
  end
65
65
 
66
- it "should escape a hash character that signifies the start of a string interpolation" do
66
+ it "should escape a hash character that signifies the start of a string interpolation when outside tags" do
67
67
  erbal_parse("<%= 1 + 1 -%> wee \#{1 + 3}").should == "@out = '';@out << %Q`\#{ 1 + 1 } wee \\\#{1 + 3}`;@out"
68
68
  eval(erbal_parse("<%= 1 + 1 -%> wee \#{1 + 3}")).should == eval(erubis_parse("<%= 1 + 1 -%> wee \#{1 + 3}"))
69
69
 
@@ -77,6 +77,11 @@ describe Erbal do
77
77
  eval(erbal_parse('<%= 1 + 1 -%> wee #{1 + 3}')).should == eval(erubis_parse('<%= 1 + 1 -%> wee #{1 + 3}'))
78
78
  end
79
79
 
80
+ it "should not escape a hash character that signifies the start of a string interpolation when inside tags" do
81
+ erbal_parse('<%= "#{1 + 1}" -%>').should == "@out = '';@out << %Q`\#{ \"\#{1 + 1}\" }`;@out"
82
+ eval(erbal_parse('<%= "#{1 + 1}" -%>')).should == eval(erubis_parse('<%= "#{1 + 1}" -%>'))
83
+ end
84
+
80
85
  it "should escape a backtick character that signifies the end off a buffer shift" do
81
86
  erbal_parse("weeee `").should == "@out = '';@out << %Q`weeee \\``;@out"
82
87
  eval(erbal_parse("weeee `")).should == eval(erubis_parse("weeee `"));
@@ -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 = '1.0.rc4'
5
+ ERBAL_VERSION = '1.0.rc6'
6
6
 
7
7
  task :clean => :clobber_package
8
8
 
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: 977940501
4
+ hash: 977940499
5
5
  prerelease: true
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - rc4
10
- version: 1.0.rc4
9
+ - rc6
10
+ version: 1.0.rc6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ian Leitch
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-29 00:00:00 +11:00
18
+ date: 2010-12-30 00:00:00 +11:00
19
19
  default_executable:
20
20
  dependencies: []
21
21