mongrel_esi 0.4.0 → 0.4.1

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.
Files changed (153) hide show
  1. data/README +8 -8
  2. data/Rakefile +4 -12
  3. data/doc/rdoc/classes/ESI.html +169 -0
  4. data/doc/rdoc/classes/ESI/Cache.html +178 -0
  5. data/doc/rdoc/classes/ESI/Cache.src/M000060.html +17 -0
  6. data/doc/rdoc/classes/ESI/Cache.src/M000061.html +20 -0
  7. data/doc/rdoc/classes/ESI/Config.html +291 -0
  8. data/doc/rdoc/classes/ESI/Config.src/M000043.html +18 -0
  9. data/doc/rdoc/classes/ESI/Config.src/M000044.html +18 -0
  10. data/doc/rdoc/classes/ESI/Config.src/M000045.html +35 -0
  11. data/doc/rdoc/classes/ESI/Config.src/M000046.html +38 -0
  12. data/doc/rdoc/classes/ESI/Config.src/M000047.html +23 -0
  13. data/doc/rdoc/classes/ESI/Config.src/M000048.html +18 -0
  14. data/doc/rdoc/classes/ESI/Config.src/M000049.html +20 -0
  15. data/doc/rdoc/classes/ESI/Config.src/M000050.html +18 -0
  16. data/doc/rdoc/classes/ESI/Config.src/M000051.html +24 -0
  17. data/doc/rdoc/classes/ESI/Config/CacheConfig.html +212 -0
  18. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000055.html +19 -0
  19. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000056.html +19 -0
  20. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000057.html +18 -0
  21. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000058.html +18 -0
  22. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000059.html +18 -0
  23. data/doc/rdoc/classes/ESI/Config/ConfigRouter.html +187 -0
  24. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000052.html +19 -0
  25. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000053.html +21 -0
  26. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000054.html +21 -0
  27. data/doc/rdoc/classes/ESI/Dispatcher.html +172 -0
  28. data/doc/rdoc/classes/ESI/Dispatcher.src/M000062.html +23 -0
  29. data/doc/rdoc/classes/ESI/Dispatcher.src/M000063.html +20 -0
  30. data/doc/rdoc/classes/ESI/Fragment.html +218 -0
  31. data/doc/rdoc/classes/ESI/Fragment.src/M000076.html +21 -0
  32. data/doc/rdoc/classes/ESI/Fragment.src/M000077.html +18 -0
  33. data/doc/rdoc/classes/ESI/Fragment.src/M000078.html +18 -0
  34. data/doc/rdoc/classes/ESI/Handler.html +236 -0
  35. data/doc/rdoc/classes/ESI/Handler.src/M000079.html +19 -0
  36. data/doc/rdoc/classes/ESI/Handler.src/M000080.html +161 -0
  37. data/doc/rdoc/classes/ESI/Handler.src/M000081.html +24 -0
  38. data/doc/rdoc/classes/ESI/Handler.src/M000082.html +18 -0
  39. data/doc/rdoc/classes/ESI/Handler.src/M000083.html +26 -0
  40. data/doc/rdoc/classes/ESI/Handler.src/M000084.html +30 -0
  41. data/doc/rdoc/classes/ESI/Invalidator.html +131 -0
  42. data/doc/rdoc/classes/ESI/Invalidator.src/M000004.html +41 -0
  43. data/doc/rdoc/classes/ESI/Log.html +251 -0
  44. data/doc/rdoc/classes/ESI/Log.src/M000005.html +18 -0
  45. data/doc/rdoc/classes/ESI/Log.src/M000006.html +18 -0
  46. data/doc/rdoc/classes/ESI/Log.src/M000007.html +18 -0
  47. data/doc/rdoc/classes/ESI/Log.src/M000008.html +18 -0
  48. data/doc/rdoc/classes/ESI/Log.src/M000009.html +18 -0
  49. data/doc/rdoc/classes/ESI/Log.src/M000010.html +18 -0
  50. data/doc/rdoc/classes/ESI/Log.src/M000011.html +18 -0
  51. data/doc/rdoc/classes/ESI/Log.src/M000012.html +18 -0
  52. data/doc/rdoc/classes/ESI/Log.src/M000013.html +18 -0
  53. data/doc/rdoc/classes/ESI/MemcachedCache.html +314 -0
  54. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000034.html +24 -0
  55. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000035.html +22 -0
  56. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000036.html +19 -0
  57. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000037.html +23 -0
  58. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000038.html +18 -0
  59. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000039.html +19 -0
  60. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000040.html +18 -0
  61. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000041.html +18 -0
  62. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000042.html +17 -0
  63. data/doc/rdoc/classes/ESI/Router.html +229 -0
  64. data/doc/rdoc/classes/ESI/Router.src/M000073.html +36 -0
  65. data/doc/rdoc/classes/ESI/Router.src/M000074.html +25 -0
  66. data/doc/rdoc/classes/ESI/Router.src/M000075.html +24 -0
  67. data/doc/rdoc/classes/ESI/RubyCache.html +278 -0
  68. data/doc/rdoc/classes/ESI/RubyCache.src/M000064.html +20 -0
  69. data/doc/rdoc/classes/ESI/RubyCache.src/M000065.html +22 -0
  70. data/doc/rdoc/classes/ESI/RubyCache.src/M000066.html +21 -0
  71. data/doc/rdoc/classes/ESI/RubyCache.src/M000067.html +22 -0
  72. data/doc/rdoc/classes/ESI/RubyCache.src/M000068.html +18 -0
  73. data/doc/rdoc/classes/ESI/RubyCache.src/M000069.html +22 -0
  74. data/doc/rdoc/classes/ESI/RubyCache.src/M000070.html +18 -0
  75. data/doc/rdoc/classes/ESI/RubyCache.src/M000071.html +18 -0
  76. data/doc/rdoc/classes/ESI/RubyCache.src/M000072.html +18 -0
  77. data/doc/rdoc/classes/ESI/Tag.html +137 -0
  78. data/doc/rdoc/classes/ESI/Tag/Attempt.html +113 -0
  79. data/doc/rdoc/classes/ESI/Tag/Base.html +267 -0
  80. data/doc/rdoc/classes/ESI/Tag/Base.src/M000028.html +26 -0
  81. data/doc/rdoc/classes/ESI/Tag/Base.src/M000029.html +23 -0
  82. data/doc/rdoc/classes/ESI/Tag/Base.src/M000030.html +22 -0
  83. data/doc/rdoc/classes/ESI/Tag/Base.src/M000031.html +18 -0
  84. data/doc/rdoc/classes/ESI/Tag/Base.src/M000032.html +22 -0
  85. data/doc/rdoc/classes/ESI/Tag/Base.src/M000033.html +23 -0
  86. data/doc/rdoc/classes/ESI/Tag/Except.html +184 -0
  87. data/doc/rdoc/classes/ESI/Tag/Except.src/M000020.html +21 -0
  88. data/doc/rdoc/classes/ESI/Tag/Except.src/M000021.html +20 -0
  89. data/doc/rdoc/classes/ESI/Tag/Except.src/M000022.html +18 -0
  90. data/doc/rdoc/classes/ESI/Tag/Include.html +189 -0
  91. data/doc/rdoc/classes/ESI/Tag/Include.src/M000017.html +20 -0
  92. data/doc/rdoc/classes/ESI/Tag/Include.src/M000018.html +18 -0
  93. data/doc/rdoc/classes/ESI/Tag/Include.src/M000019.html +125 -0
  94. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.html +199 -0
  95. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000014.html +18 -0
  96. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000015.html +42 -0
  97. data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.html +155 -0
  98. data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.src/M000016.html +19 -0
  99. data/doc/rdoc/classes/ESI/Tag/Invalidate.html +171 -0
  100. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000025.html +19 -0
  101. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000026.html +51 -0
  102. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000027.html +19 -0
  103. data/doc/rdoc/classes/ESI/Tag/Try.html +161 -0
  104. data/doc/rdoc/classes/ESI/Tag/Try.src/M000023.html +40 -0
  105. data/doc/rdoc/classes/ESI/Tag/Try.src/M000024.html +18 -0
  106. data/doc/rdoc/classes/MultiDirHandler.html +198 -0
  107. data/doc/rdoc/classes/MultiDirHandler.src/M000001.html +20 -0
  108. data/doc/rdoc/classes/MultiDirHandler.src/M000002.html +28 -0
  109. data/doc/rdoc/classes/MultiDirHandler.src/M000003.html +22 -0
  110. data/doc/rdoc/classes/Net.html +119 -0
  111. data/doc/rdoc/classes/Net/An.html +114 -0
  112. data/doc/rdoc/classes/Net/An/HTTP.html +137 -0
  113. data/doc/rdoc/classes/Net/An/HTTP.src/M000087.html +17 -0
  114. data/doc/rdoc/classes/Net/An/IORequest.html +139 -0
  115. data/doc/rdoc/classes/Net/An/IORequest.src/M000088.html +17 -0
  116. data/doc/rdoc/classes/Net/An/IOResponse.html +139 -0
  117. data/doc/rdoc/classes/Net/An/IOResponse.src/M000085.html +17 -0
  118. data/doc/rdoc/classes/Net/An/IOSocket.html +137 -0
  119. data/doc/rdoc/classes/Net/An/IOSocket.src/M000086.html +17 -0
  120. data/doc/rdoc/created.rid +1 -0
  121. data/doc/rdoc/files/COPYING.html +168 -0
  122. data/doc/rdoc/files/LICENSE.html +605 -0
  123. data/doc/rdoc/files/README.html +361 -0
  124. data/doc/rdoc/files/lib/esi/cache_rb.html +113 -0
  125. data/doc/rdoc/files/lib/esi/config_rb.html +108 -0
  126. data/doc/rdoc/files/lib/esi/dispatcher_rb.html +109 -0
  127. data/doc/rdoc/files/lib/esi/handler_rb.html +121 -0
  128. data/doc/rdoc/files/lib/esi/invalidator_rb.html +117 -0
  129. data/doc/rdoc/files/lib/esi/logger_rb.html +108 -0
  130. data/doc/rdoc/files/lib/esi/router_rb.html +101 -0
  131. data/doc/rdoc/files/lib/esi/tag/attempt_rb.html +101 -0
  132. data/doc/rdoc/files/lib/esi/tag/base_rb.html +108 -0
  133. data/doc/rdoc/files/lib/esi/tag/except_rb.html +101 -0
  134. data/doc/rdoc/files/lib/esi/tag/include_rb.html +109 -0
  135. data/doc/rdoc/files/lib/esi/tag/invalidate_rb.html +109 -0
  136. data/doc/rdoc/files/lib/esi/tag/try_rb.html +108 -0
  137. data/doc/rdoc/files/lib/multi_dirhandler_rb.html +109 -0
  138. data/doc/rdoc/files/lib/net/ahttp_rb.html +109 -0
  139. data/doc/rdoc/fr_class_index.html +55 -0
  140. data/doc/rdoc/fr_file_index.html +44 -0
  141. data/doc/rdoc/fr_method_index.html +114 -0
  142. data/doc/rdoc/index.html +24 -0
  143. data/doc/rdoc/rdoc-style.css +208 -0
  144. data/ext/esi/esi_parser.c +36 -156
  145. data/ext/esi/test/parser.c +42 -43
  146. data/ext/esi/test1.rb +2 -2
  147. data/lib/esi/cache.rb +83 -72
  148. data/lib/esi/handler.rb +5 -20
  149. data/lib/multi_dirhandler.rb +13 -0
  150. data/lib/net/ahttp.rb +36 -0
  151. data/test/integration/handler_test.rb +1 -1
  152. metadata +222 -45
  153. data/test/unit/sample.html +0 -21
@@ -20,27 +20,13 @@
20
20
  #define RSTRING_LEN(str) RSTRING(str)->len
21
21
  #endif
22
22
 
23
- #define OUTPUT_BUFFER_SIZE 1024
24
-
25
23
  static VALUE rb_ESI;
26
24
  static VALUE rb_ESIParser;
27
25
 
28
- // TODO: we can use rb_iv_set instead and just pass the whole parser as the user_data to each call back
29
- typedef struct _ParserUserData{
30
- VALUE output_block;
31
- VALUE start_tag_block;
32
- VALUE end_tag_block;
33
- VALUE depth;
34
- VALUE esi_tag;
35
- char buffer[OUTPUT_BUFFER_SIZE]; /* buffer bytes before sending them to ruby */
36
- size_t buffered; /* amount buffered */
37
- }ParserUserData;
38
-
39
26
  static
40
27
  VALUE ESIParser_set_output_cb( VALUE self )
41
28
  {
42
29
  ESIParser *parser;
43
- ParserUserData *user_data;
44
30
 
45
31
  if( !rb_block_given_p() ){
46
32
  rb_raise(rb_eArgError, "Block expected. Call this method with a closure. { ... }");
@@ -48,9 +34,7 @@ VALUE ESIParser_set_output_cb( VALUE self )
48
34
 
49
35
  Data_Get_Struct( self, ESIParser, parser );
50
36
 
51
- user_data = (ParserUserData*)parser->user_data;
52
-
53
- user_data->output_block = rb_block_proc();
37
+ rb_ivar_set( self, rb_intern("@output"), rb_block_proc() );
54
38
 
55
39
  return Qnil;
56
40
  }
@@ -59,7 +43,6 @@ static
59
43
  VALUE ESIParser_set_start_tag_cb( VALUE self )
60
44
  {
61
45
  ESIParser *parser;
62
- ParserUserData *user_data;
63
46
 
64
47
  if( !rb_block_given_p() ){
65
48
  rb_raise(rb_eArgError, "Block expected. Call this method with a closure. { ... }");
@@ -67,9 +50,7 @@ VALUE ESIParser_set_start_tag_cb( VALUE self )
67
50
 
68
51
  Data_Get_Struct( self, ESIParser, parser );
69
52
 
70
- user_data = (ParserUserData*)parser->user_data;
71
-
72
- user_data->start_tag_block = rb_block_proc();
53
+ rb_ivar_set( self, rb_intern("@start_tag_block"), rb_block_proc() );
73
54
 
74
55
  return Qnil;
75
56
  }
@@ -78,7 +59,6 @@ static
78
59
  VALUE ESIParser_set_end_tag_cb( VALUE self )
79
60
  {
80
61
  ESIParser *parser;
81
- ParserUserData *user_data;
82
62
 
83
63
  if( !rb_block_given_p() ){
84
64
  rb_raise(rb_eArgError, "Block expected. Call this method with a closure. { ... }");
@@ -86,9 +66,7 @@ VALUE ESIParser_set_end_tag_cb( VALUE self )
86
66
 
87
67
  Data_Get_Struct( self, ESIParser, parser );
88
68
 
89
- user_data = (ParserUserData*)parser->user_data;
90
-
91
- user_data->end_tag_block = rb_block_proc();
69
+ rb_ivar_set( self, rb_intern("@end_tag_block"), rb_block_proc() );
92
70
 
93
71
  return Qnil;
94
72
  }
@@ -96,32 +74,8 @@ VALUE ESIParser_set_end_tag_cb( VALUE self )
96
74
  static
97
75
  void ESIParser_free( ESIParser *parser )
98
76
  {
99
- ParserUserData *user_data = (ParserUserData*)parser->user_data;
100
-
101
- free( user_data );
102
- parser->user_data = NULL;
103
-
104
77
  esi_parser_free( parser );
105
78
  }
106
- static
107
- void ESIParser_mark( ESIParser *parser )
108
- {
109
- ParserUserData *user_data = (ParserUserData*)parser->user_data;
110
- if( user_data ){
111
-
112
- if( !NIL_P( user_data->output_block ) )
113
- rb_gc_mark( user_data->output_block );
114
- if( !NIL_P( user_data->start_tag_block ) )
115
- rb_gc_mark( user_data->start_tag_block );
116
- if( !NIL_P( user_data->end_tag_block ) )
117
- rb_gc_mark( user_data->end_tag_block );
118
- if( !NIL_P( user_data->depth ) )
119
- rb_gc_mark( user_data->depth );
120
- if( !NIL_P( user_data->esi_tag ) )
121
- rb_gc_mark( user_data->esi_tag );
122
-
123
- }
124
- }
125
79
 
126
80
  /* default callbacks */
127
81
  static void
@@ -131,8 +85,9 @@ esi_parser_default_start_cb( const void *data,
131
85
  ESIAttribute *attr,
132
86
  void *user_data )
133
87
  {
134
- ParserUserData *ud = (ParserUserData*)user_data;
135
- if( ud->start_tag_block && !NIL_P(ud->start_tag_block) && rb_respond_to( ud->start_tag_block, rb_intern("call") ) ){
88
+ VALUE start_tag_block = rb_ivar_get( (VALUE)user_data, rb_intern("@start_tag_block") );
89
+
90
+ if( start_tag_block && !NIL_P(start_tag_block) && rb_respond_to( start_tag_block, rb_intern("call") ) ){
136
91
  VALUE attr_hash = rb_hash_new();
137
92
  VALUE tag_text = rb_str_new( name_start, name_length );
138
93
  while( attr ){
@@ -141,7 +96,7 @@ esi_parser_default_start_cb( const void *data,
141
96
  rb_hash_aset( attr_hash, name, value );
142
97
  attr = attr->next;
143
98
  }
144
- rb_funcall( ud->start_tag_block, rb_intern("call"), 2, tag_text, attr_hash );
99
+ rb_funcall( start_tag_block, rb_intern("call"), 2, tag_text, attr_hash );
145
100
  }
146
101
  }
147
102
 
@@ -151,10 +106,11 @@ esi_parser_default_end_cb( const void *data,
151
106
  size_t name_length,
152
107
  void *user_data )
153
108
  {
154
- ParserUserData *ud = (ParserUserData*)user_data;
155
- if( ud->end_tag_block && !NIL_P(ud->end_tag_block) && rb_respond_to( ud->end_tag_block, rb_intern("call") ) ){
156
- VALUE tag_text = rb_str_new( name_start, name_length );
157
- rb_funcall( ud->end_tag_block, rb_intern("call"), 1, tag_text );
109
+ VALUE end_tag_block = rb_ivar_get( (VALUE)user_data, rb_intern("@end_tag_block") );
110
+
111
+ if( end_tag_block && !NIL_P(end_tag_block) && rb_respond_to( end_tag_block, rb_intern("call") ) ){
112
+ VALUE tag_text = rb_str_new( name_start, name_length );
113
+ rb_funcall( end_tag_block, rb_intern("call"), 1, tag_text );
158
114
  }
159
115
  }
160
116
 
@@ -177,31 +133,14 @@ send_output( VALUE output, VALUE esi_tag_context, VALUE rbstr )
177
133
  }
178
134
 
179
135
  static void
180
- esi_parser_default_output_cp( const void *data,
181
- size_t length,
182
- void *user_data )
136
+ esi_parser_default_output_cp( const void *data, size_t length, void *user_data )
183
137
  {
184
- VALUE rbstr;
185
- ParserUserData *ud = (ParserUserData*)user_data;
186
-
187
- if( ud->output_block && !NIL_P(ud->output_block) ){
188
- rbstr = rb_str_new( data, length );
189
- send_output( ud->output_block, ud->esi_tag, rbstr );
190
- /* buffer the output to the ruby script */
191
- /*if( ud->buffered+length < OUTPUT_BUFFER_SIZE ){
192
- memcpy( ud->buffer + ud->buffered, data, length );
193
- ud->buffered += length;
194
- }
195
- else{
196
- if( ud->buffered > 0 ){
197
- rbstr = rb_str_new( ud->buffer, ud->buffered );
198
- send_output( ud->output_block, ud->esi_tag, rbstr );
199
- ud->buffered = 0;
200
- }
201
- rbstr = rb_str_new( data, length );
202
- send_output( ud->output_block, ud->esi_tag, rbstr );
203
- }*/
204
- //rb_funcall( ud->output_block, rb_intern("call"), 1, rb_str_new( data, length ) );
138
+ VALUE output = rb_ivar_get( (VALUE)user_data, rb_intern("@output") );
139
+ VALUE esi_tag = rb_ivar_get( (VALUE)user_data, rb_intern("@esi_tag") );
140
+
141
+ if( output && !NIL_P(output) ){
142
+ VALUE rbstr = rb_str_new( data, length );
143
+ send_output( output, esi_tag, rbstr );
205
144
  }
206
145
  }
207
146
 
@@ -221,21 +160,11 @@ static
221
160
  VALUE ESIParser_finish( VALUE self )
222
161
  {
223
162
  ESIParser *parser;
224
- ParserUserData *user_data;
225
163
 
226
164
  Data_Get_Struct( self, ESIParser, parser );
227
- user_data = (ParserUserData*)parser->user_data;
228
165
 
229
166
  esi_parser_finish( parser );
230
- /*
231
- if( user_data->buffered > 0 ){
232
- VALUE rbstr = rb_str_new( user_data->buffer, user_data->buffered );
233
- send_output( user_data->output_block, user_data->esi_tag, rbstr );
234
- memset( user_data->buffer, 0, OUTPUT_BUFFER_SIZE );
235
- user_data->buffered = 0;
236
- }
237
- */
238
-
167
+
239
168
  return Qnil;
240
169
  }
241
170
 
@@ -245,18 +174,6 @@ VALUE ESIParser_alloc(VALUE klass)
245
174
  VALUE object;
246
175
  ESIParser *parser = esi_parser_new();
247
176
 
248
- ParserUserData *user_data = (ParserUserData*)malloc(sizeof(ParserUserData));
249
-
250
- user_data->output_block = Qnil;
251
- user_data->start_tag_block = Qnil;
252
- user_data->end_tag_block = Qnil;
253
- user_data->depth = rb_int_new(0);
254
- user_data->esi_tag = Qnil;
255
- memset( user_data->buffer, 0, OUTPUT_BUFFER_SIZE );
256
- user_data->buffered = 0;
257
-
258
- parser->user_data = user_data;
259
-
260
177
  esi_parser_init( parser );
261
178
 
262
179
  esi_parser_start_tag_handler( parser, esi_parser_default_start_cb );
@@ -265,7 +182,15 @@ VALUE ESIParser_alloc(VALUE klass)
265
182
 
266
183
  esi_parser_output_handler( parser, esi_parser_default_output_cp );
267
184
 
268
- object = Data_Wrap_Struct( klass, ESIParser_mark, ESIParser_free, parser );
185
+ object = Data_Wrap_Struct( klass, NULL, ESIParser_free, parser );
186
+
187
+ parser->user_data = (void*)object;
188
+
189
+ rb_ivar_set( object, rb_intern("@depth"), rb_int_new(0) );
190
+ rb_ivar_set( object, rb_intern("@output"), Qnil );
191
+ rb_ivar_set( object, rb_intern("@start_tag_block"), Qnil );
192
+ rb_ivar_set( object, rb_intern("@end_tag_block"), Qnil );
193
+ rb_ivar_set( object, rb_intern("@esi_tag"), Qnil );
269
194
 
270
195
  return object;
271
196
  }
@@ -273,85 +198,40 @@ VALUE ESIParser_alloc(VALUE klass)
273
198
  static
274
199
  VALUE ESIParser_set_esi_tag( VALUE self, VALUE esi_tag )
275
200
  {
276
- ESIParser *parser;
277
- ParserUserData *user_data;
278
-
279
- Data_Get_Struct( self, ESIParser, parser );
280
-
281
- user_data = (ParserUserData*)parser->user_data;
282
-
283
- user_data->esi_tag = esi_tag;
284
-
201
+ rb_ivar_set( self, rb_intern("@esi_tag"), esi_tag );
285
202
  return esi_tag;
286
203
  }
287
204
 
288
205
  static
289
206
  VALUE ESIParser_get_esi_tag( VALUE self )
290
207
  {
291
- ESIParser *parser;
292
- ParserUserData *user_data;
293
-
294
- Data_Get_Struct( self, ESIParser, parser );
295
-
296
- user_data = (ParserUserData*)parser->user_data;
297
-
298
- return user_data->esi_tag;
208
+ return rb_ivar_get( self, rb_intern("@esi_tag") );
299
209
  }
300
210
 
301
211
  static
302
212
  VALUE ESIParser_set_depth( VALUE self, VALUE depth )
303
213
  {
304
- ESIParser *parser;
305
- ParserUserData *user_data;
306
-
307
- Data_Get_Struct( self, ESIParser, parser );
308
-
309
- user_data = (ParserUserData*)parser->user_data;
310
-
311
- user_data->depth = depth;
312
-
214
+ rb_ivar_set( self, rb_intern("@depth"), depth );
313
215
  return depth;
314
216
  }
315
217
 
316
218
  static
317
219
  VALUE ESIParser_get_depth( VALUE self )
318
220
  {
319
- ESIParser *parser;
320
- ParserUserData *user_data;
321
-
322
- Data_Get_Struct( self, ESIParser, parser );
323
-
324
- user_data = (ParserUserData*)parser->user_data;
325
-
326
- return user_data->depth;
221
+ return rb_ivar_get( self, rb_intern("@depth") );
327
222
  }
328
223
 
329
224
  static
330
225
  VALUE ESIParser_set_output( VALUE self, VALUE output )
331
226
  {
332
- ESIParser *parser;
333
- ParserUserData *user_data;
334
-
335
- Data_Get_Struct( self, ESIParser, parser );
336
-
337
- user_data = (ParserUserData*)parser->user_data;
338
-
339
- user_data->output_block = output;
340
-
227
+ rb_ivar_set( self, rb_intern("@output"), output );
341
228
  return output;
342
229
  }
343
230
 
344
231
  static
345
232
  VALUE ESIParser_get_output( VALUE self )
346
233
  {
347
- ESIParser *parser;
348
- ParserUserData *user_data;
349
-
350
- Data_Get_Struct( self, ESIParser, parser );
351
-
352
- user_data = (ParserUserData*)parser->user_data;
353
-
354
- return user_data->output_block;
234
+ return rb_ivar_get( self, rb_intern("@output") );
355
235
  }
356
236
  static
357
237
  VALUE ESIParser_send_output( VALUE self, VALUE output )
@@ -360,7 +240,7 @@ VALUE ESIParser_send_output( VALUE self, VALUE output )
360
240
 
361
241
  Data_Get_Struct( self, ESIParser, parser );
362
242
 
363
- esi_parser_default_output_cp( RSTRING_PTR(output), RSTRING_LEN(output), parser->user_data );
243
+ esi_parser_default_output_cp( RSTRING_PTR(output), RSTRING_LEN(output), (void*)self );
364
244
 
365
245
  return Qnil;
366
246
  }
@@ -3,7 +3,6 @@
3
3
  #include <stdlib.h>
4
4
  #include <string.h>
5
5
  #include <ctype.h>
6
- #include <unistd.h>
7
6
  #include "parser.h"
8
7
 
9
8
  /* define default callbacks */
@@ -81,18 +80,18 @@ static void ltrim_pointer( const char **ptr, const char *bounds, size_t *len )
81
80
  }
82
81
  }
83
82
 
84
- #line 199 "parser.rl"
83
+ #line 198 "parser.rl"
85
84
 
86
85
 
87
86
 
88
- #line 89 "parser.c"
87
+ #line 88 "parser.c"
89
88
  static const int esi_start = 56;
90
89
  static const int esi_first_final = 56;
91
90
  static const int esi_error = -1;
92
91
 
93
92
  static const int esi_en_main = 56;
94
93
 
95
- #line 202 "parser.rl"
94
+ #line 201 "parser.rl"
96
95
 
97
96
  char *esi_strndup( const char *str, size_t len )
98
97
  {
@@ -187,11 +186,11 @@ int esi_parser_init( ESIParser *parser )
187
186
  {
188
187
  int cs;
189
188
 
190
- #line 191 "parser.c"
189
+ #line 190 "parser.c"
191
190
  {
192
191
  cs = esi_start;
193
192
  }
194
- #line 296 "parser.rl"
193
+ #line 295 "parser.rl"
195
194
  parser->prev_state = parser->cs = cs;
196
195
  return 0;
197
196
  }
@@ -248,7 +247,7 @@ int esi_parser_execute( ESIParser *parser, const char *data, size_t length )
248
247
  // debug_string( "data", data, length );
249
248
 
250
249
 
251
- #line 252 "parser.c"
250
+ #line 251 "parser.c"
252
251
  {
253
252
  if ( p == pe )
254
253
  goto _out;
@@ -1102,7 +1101,7 @@ case 55:
1102
1101
  tr68: cs = 60; goto f8;
1103
1102
 
1104
1103
  f0:
1105
- #line 176 "parser.rl"
1104
+ #line 175 "parser.rl"
1106
1105
  {
1107
1106
  switch( cs ){
1108
1107
  case 0:
@@ -1126,7 +1125,7 @@ f0:
1126
1125
  }
1127
1126
  goto _again;
1128
1127
  f1:
1129
- #line 176 "parser.rl"
1128
+ #line 175 "parser.rl"
1130
1129
  {
1131
1130
  switch( cs ){
1132
1131
  case 0:
@@ -1148,14 +1147,14 @@ f1:
1148
1147
  }
1149
1148
  parser->prev_state = cs;
1150
1149
  }
1151
- #line 86 "parser.rl"
1150
+ #line 85 "parser.rl"
1152
1151
  {
1153
1152
  parser->mark = p;
1154
1153
  //debug_string( "begin", p, 1 );
1155
1154
  }
1156
1155
  goto _again;
1157
1156
  f9:
1158
- #line 176 "parser.rl"
1157
+ #line 175 "parser.rl"
1159
1158
  {
1160
1159
  switch( cs ){
1161
1160
  case 0:
@@ -1177,13 +1176,13 @@ f9:
1177
1176
  }
1178
1177
  parser->prev_state = cs;
1179
1178
  }
1180
- #line 90 "parser.rl"
1179
+ #line 89 "parser.rl"
1181
1180
  {
1182
1181
  // printf( "finish\n" );
1183
1182
  }
1184
1183
  goto _again;
1185
1184
  f3:
1186
- #line 176 "parser.rl"
1185
+ #line 175 "parser.rl"
1187
1186
  {
1188
1187
  switch( cs ){
1189
1188
  case 0:
@@ -1205,7 +1204,7 @@ f3:
1205
1204
  }
1206
1205
  parser->prev_state = cs;
1207
1206
  }
1208
- #line 95 "parser.rl"
1207
+ #line 94 "parser.rl"
1209
1208
  {
1210
1209
  parser->tag_text = parser->mark+1;
1211
1210
  parser->tag_text_length = p - (parser->mark+1);
@@ -1215,7 +1214,7 @@ f3:
1215
1214
  }
1216
1215
  goto _again;
1217
1216
  f8:
1218
- #line 176 "parser.rl"
1217
+ #line 175 "parser.rl"
1219
1218
  {
1220
1219
  switch( cs ){
1221
1220
  case 0:
@@ -1237,7 +1236,7 @@ f8:
1237
1236
  }
1238
1237
  parser->prev_state = cs;
1239
1238
  }
1240
- #line 103 "parser.rl"
1239
+ #line 102 "parser.rl"
1241
1240
  {
1242
1241
  //debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1243
1242
  ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
@@ -1253,7 +1252,7 @@ f8:
1253
1252
  }
1254
1253
  goto _again;
1255
1254
  f5:
1256
- #line 176 "parser.rl"
1255
+ #line 175 "parser.rl"
1257
1256
  {
1258
1257
  switch( cs ){
1259
1258
  case 0:
@@ -1275,7 +1274,7 @@ f5:
1275
1274
  }
1276
1275
  parser->prev_state = cs;
1277
1276
  }
1278
- #line 117 "parser.rl"
1277
+ #line 116 "parser.rl"
1279
1278
  {
1280
1279
  // debug_string( "parsed esi tag", parser->tag_text, parser->tag_text_length );
1281
1280
  ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
@@ -1285,7 +1284,7 @@ f5:
1285
1284
  }
1286
1285
  goto _again;
1287
1286
  f6:
1288
- #line 176 "parser.rl"
1287
+ #line 175 "parser.rl"
1289
1288
  {
1290
1289
  switch( cs ){
1291
1290
  case 0:
@@ -1307,7 +1306,7 @@ f6:
1307
1306
  }
1308
1307
  parser->prev_state = cs;
1309
1308
  }
1310
- #line 125 "parser.rl"
1309
+ #line 124 "parser.rl"
1311
1310
  {
1312
1311
  parser->attr_key = parser->mark;
1313
1312
  parser->attr_key_length = p - parser->mark;
@@ -1318,7 +1317,7 @@ f6:
1318
1317
  }
1319
1318
  goto _again;
1320
1319
  f7:
1321
- #line 176 "parser.rl"
1320
+ #line 175 "parser.rl"
1322
1321
  {
1323
1322
  switch( cs ){
1324
1323
  case 0:
@@ -1340,7 +1339,7 @@ f7:
1340
1339
  }
1341
1340
  parser->prev_state = cs;
1342
1341
  }
1343
- #line 134 "parser.rl"
1342
+ #line 133 "parser.rl"
1344
1343
  {
1345
1344
  ESIAttribute *attr;
1346
1345
  parser->attr_value = parser->mark;
@@ -1364,7 +1363,7 @@ f7:
1364
1363
  }
1365
1364
  goto _again;
1366
1365
  f4:
1367
- #line 176 "parser.rl"
1366
+ #line 175 "parser.rl"
1368
1367
  {
1369
1368
  switch( cs ){
1370
1369
  case 0:
@@ -1386,7 +1385,7 @@ f4:
1386
1385
  }
1387
1386
  parser->prev_state = cs;
1388
1387
  }
1389
- #line 156 "parser.rl"
1388
+ #line 155 "parser.rl"
1390
1389
  {
1391
1390
  parser->tag_text = parser->mark;
1392
1391
  parser->tag_text_length = p - parser->mark;
@@ -1397,7 +1396,7 @@ f4:
1397
1396
  }
1398
1397
  goto _again;
1399
1398
  f2:
1400
- #line 176 "parser.rl"
1399
+ #line 175 "parser.rl"
1401
1400
  {
1402
1401
  switch( cs ){
1403
1402
  case 0:
@@ -1419,7 +1418,7 @@ f2:
1419
1418
  }
1420
1419
  parser->prev_state = cs;
1421
1420
  }
1422
- #line 165 "parser.rl"
1421
+ #line 164 "parser.rl"
1423
1422
  {
1424
1423
  parser->tag_text = parser->mark+2;
1425
1424
  parser->tag_text_length = p - (parser->mark+2);
@@ -1432,7 +1431,7 @@ f2:
1432
1431
  }
1433
1432
  goto _again;
1434
1433
  f10:
1435
- #line 176 "parser.rl"
1434
+ #line 175 "parser.rl"
1436
1435
  {
1437
1436
  switch( cs ){
1438
1437
  case 0:
@@ -1454,18 +1453,18 @@ f10:
1454
1453
  }
1455
1454
  parser->prev_state = cs;
1456
1455
  }
1457
- #line 86 "parser.rl"
1456
+ #line 85 "parser.rl"
1458
1457
  {
1459
1458
  parser->mark = p;
1460
1459
  //debug_string( "begin", p, 1 );
1461
1460
  }
1462
- #line 90 "parser.rl"
1461
+ #line 89 "parser.rl"
1463
1462
  {
1464
1463
  // printf( "finish\n" );
1465
1464
  }
1466
1465
  goto _again;
1467
1466
  f11:
1468
- #line 176 "parser.rl"
1467
+ #line 175 "parser.rl"
1469
1468
  {
1470
1469
  switch( cs ){
1471
1470
  case 0:
@@ -1487,7 +1486,7 @@ f11:
1487
1486
  }
1488
1487
  parser->prev_state = cs;
1489
1488
  }
1490
- #line 103 "parser.rl"
1489
+ #line 102 "parser.rl"
1491
1490
  {
1492
1491
  //debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1493
1492
  ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
@@ -1501,13 +1500,13 @@ f11:
1501
1500
  parser->mark = p;
1502
1501
  //debug_string( "see_end_tag", p, 1 );
1503
1502
  }
1504
- #line 90 "parser.rl"
1503
+ #line 89 "parser.rl"
1505
1504
  {
1506
1505
  // printf( "finish\n" );
1507
1506
  }
1508
1507
  goto _again;
1509
1508
  f13:
1510
- #line 176 "parser.rl"
1509
+ #line 175 "parser.rl"
1511
1510
  {
1512
1511
  switch( cs ){
1513
1512
  case 0:
@@ -1529,12 +1528,12 @@ f13:
1529
1528
  }
1530
1529
  parser->prev_state = cs;
1531
1530
  }
1532
- #line 86 "parser.rl"
1531
+ #line 85 "parser.rl"
1533
1532
  {
1534
1533
  parser->mark = p;
1535
1534
  //debug_string( "begin", p, 1 );
1536
1535
  }
1537
- #line 103 "parser.rl"
1536
+ #line 102 "parser.rl"
1538
1537
  {
1539
1538
  //debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1540
1539
  ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
@@ -1548,13 +1547,13 @@ f13:
1548
1547
  parser->mark = p;
1549
1548
  //debug_string( "see_end_tag", p, 1 );
1550
1549
  }
1551
- #line 90 "parser.rl"
1550
+ #line 89 "parser.rl"
1552
1551
  {
1553
1552
  // printf( "finish\n" );
1554
1553
  }
1555
1554
  goto _again;
1556
1555
  f12:
1557
- #line 176 "parser.rl"
1556
+ #line 175 "parser.rl"
1558
1557
  {
1559
1558
  switch( cs ){
1560
1559
  case 0:
@@ -1576,7 +1575,7 @@ f12:
1576
1575
  }
1577
1576
  parser->prev_state = cs;
1578
1577
  }
1579
- #line 103 "parser.rl"
1578
+ #line 102 "parser.rl"
1580
1579
  {
1581
1580
  //debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1582
1581
  ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
@@ -1590,7 +1589,7 @@ f12:
1590
1589
  parser->mark = p;
1591
1590
  //debug_string( "see_end_tag", p, 1 );
1592
1591
  }
1593
- #line 134 "parser.rl"
1592
+ #line 133 "parser.rl"
1594
1593
  {
1595
1594
  ESIAttribute *attr;
1596
1595
  parser->attr_value = parser->mark;
@@ -1612,7 +1611,7 @@ f12:
1612
1611
  // debug_string( "\tattribute value", parser->attr_value, parser->attr_value_length );
1613
1612
  //debug_string( "see_attribute_value", p, 1 );
1614
1613
  }
1615
- #line 90 "parser.rl"
1614
+ #line 89 "parser.rl"
1616
1615
  {
1617
1616
  // printf( "finish\n" );
1618
1617
  }
@@ -1623,7 +1622,7 @@ _again:
1623
1622
  goto _resume;
1624
1623
  _out: {}
1625
1624
  }
1626
- #line 352 "parser.rl"
1625
+ #line 351 "parser.rl"
1627
1626
 
1628
1627
  parser->cs = cs;
1629
1628
 
@@ -1660,8 +1659,8 @@ _again:
1660
1659
  int esi_parser_finish( ESIParser *parser )
1661
1660
  {
1662
1661
 
1663
- #line 1664 "parser.c"
1664
- #line 388 "parser.rl"
1662
+ #line 1663 "parser.c"
1663
+ #line 387 "parser.rl"
1665
1664
  return 0;
1666
1665
  }
1667
1666