merb-core 0.9.13 → 1.0

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 (90) hide show
  1. data/Rakefile +5 -3
  2. data/lib/merb-core.rb +84 -41
  3. data/lib/merb-core/bootloader.rb +71 -60
  4. data/lib/merb-core/config.rb +31 -17
  5. data/lib/merb-core/controller/abstract_controller.rb +35 -35
  6. data/lib/merb-core/controller/exceptions.rb +14 -9
  7. data/lib/merb-core/controller/merb_controller.rb +22 -20
  8. data/lib/merb-core/controller/mime.rb +5 -5
  9. data/lib/merb-core/controller/mixins/authentication.rb +11 -8
  10. data/lib/merb-core/controller/mixins/conditional_get.rb +7 -7
  11. data/lib/merb-core/controller/mixins/controller.rb +15 -15
  12. data/lib/merb-core/controller/mixins/render.rb +16 -16
  13. data/lib/merb-core/controller/mixins/responder.rb +23 -23
  14. data/lib/merb-core/controller/template.rb +17 -17
  15. data/lib/merb-core/core_ext/hash.rb +2 -2
  16. data/lib/merb-core/core_ext/kernel.rb +19 -18
  17. data/lib/merb-core/dispatch/cookies.rb +13 -0
  18. data/lib/merb-core/dispatch/default_exception/default_exception.rb +12 -1
  19. data/lib/merb-core/dispatch/dispatcher.rb +6 -5
  20. data/lib/merb-core/dispatch/request.rb +56 -52
  21. data/lib/merb-core/dispatch/request_parsers.rb +7 -7
  22. data/lib/merb-core/dispatch/router.rb +14 -14
  23. data/lib/merb-core/dispatch/router/behavior.rb +31 -31
  24. data/lib/merb-core/dispatch/router/cached_proc.rb +13 -1
  25. data/lib/merb-core/dispatch/router/resources.rb +9 -9
  26. data/lib/merb-core/dispatch/router/route.rb +60 -7
  27. data/lib/merb-core/dispatch/session.rb +21 -15
  28. data/lib/merb-core/dispatch/session/container.rb +10 -8
  29. data/lib/merb-core/dispatch/session/cookie.rb +12 -11
  30. data/lib/merb-core/dispatch/session/memcached.rb +4 -2
  31. data/lib/merb-core/dispatch/session/memory.rb +8 -6
  32. data/lib/merb-core/dispatch/session/store_container.rb +6 -5
  33. data/lib/merb-core/dispatch/worker.rb +28 -10
  34. data/lib/merb-core/gem_ext/erubis.rb +4 -2
  35. data/lib/merb-core/logger.rb +3 -22
  36. data/lib/merb-core/plugins.rb +5 -5
  37. data/lib/merb-core/rack.rb +1 -1
  38. data/lib/merb-core/rack/adapter.rb +5 -1
  39. data/lib/merb-core/rack/adapter/abstract.rb +15 -10
  40. data/lib/merb-core/rack/adapter/ebb.rb +4 -2
  41. data/lib/merb-core/rack/adapter/evented_mongrel.rb +2 -1
  42. data/lib/merb-core/rack/adapter/fcgi.rb +3 -1
  43. data/lib/merb-core/rack/adapter/irb.rb +10 -1
  44. data/lib/merb-core/rack/adapter/mongrel.rb +5 -2
  45. data/lib/merb-core/rack/adapter/runner.rb +3 -1
  46. data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +2 -1
  47. data/lib/merb-core/rack/adapter/thin.rb +4 -1
  48. data/lib/merb-core/rack/adapter/thin_turbo.rb +1 -0
  49. data/lib/merb-core/rack/adapter/webrick.rb +8 -34
  50. data/lib/merb-core/rack/application.rb +2 -2
  51. data/lib/merb-core/rack/handler/mongrel.rb +7 -0
  52. data/lib/merb-core/rack/helpers.rb +1 -1
  53. data/lib/merb-core/rack/middleware.rb +7 -1
  54. data/lib/merb-core/rack/middleware/conditional_get.rb +3 -0
  55. data/lib/merb-core/rack/middleware/content_length.rb +2 -0
  56. data/lib/merb-core/rack/middleware/path_prefix.rb +4 -0
  57. data/lib/merb-core/rack/middleware/profiler.rb +3 -1
  58. data/lib/merb-core/rack/middleware/static.rb +7 -1
  59. data/lib/merb-core/rack/middleware/tracer.rb +1 -0
  60. data/lib/merb-core/rack/stream_wrapper.rb +35 -30
  61. data/lib/merb-core/server.rb +17 -16
  62. data/lib/merb-core/tasks/gem_management.rb +1 -1
  63. data/lib/merb-core/tasks/merb.rb +3 -1
  64. data/lib/merb-core/tasks/merb_rake_helper.rb +1 -1
  65. data/lib/merb-core/test.rb +8 -8
  66. data/lib/merb-core/test/helpers.rb +1 -1
  67. data/lib/merb-core/test/helpers/cookie_jar.rb +16 -2
  68. data/lib/merb-core/test/helpers/mock_request_helper.rb +13 -13
  69. data/lib/merb-core/test/helpers/request_helper.rb +1 -1
  70. data/lib/merb-core/test/helpers/route_helper.rb +2 -2
  71. data/lib/merb-core/test/matchers.rb +3 -3
  72. data/lib/merb-core/test/matchers/request_matchers.rb +1 -1
  73. data/lib/merb-core/test/run_spec.rb +1 -1
  74. data/lib/merb-core/test/tasks/spectasks.rb +1 -1
  75. data/lib/merb-core/test/test_ext/hpricot.rb +1 -1
  76. data/lib/merb-core/test/test_ext/rspec.rb +2 -2
  77. data/lib/merb-core/test/test_ext/string.rb +1 -1
  78. data/lib/merb-core/version.rb +1 -1
  79. metadata +8 -22
  80. data/lib/merb-core/test/matchers/view_matchers.rb +0 -231
  81. data/lib/merb-core/test/webrat.rb +0 -37
  82. data/lib/merb-core/vendor/nokogiri/css.rb +0 -6
  83. data/lib/merb-core/vendor/nokogiri/css/generated_parser.rb +0 -653
  84. data/lib/merb-core/vendor/nokogiri/css/generated_tokenizer.rb +0 -159
  85. data/lib/merb-core/vendor/nokogiri/css/node.rb +0 -95
  86. data/lib/merb-core/vendor/nokogiri/css/parser.rb +0 -24
  87. data/lib/merb-core/vendor/nokogiri/css/parser.y +0 -198
  88. data/lib/merb-core/vendor/nokogiri/css/tokenizer.rb +0 -9
  89. data/lib/merb-core/vendor/nokogiri/css/tokenizer.rex +0 -63
  90. data/lib/merb-core/vendor/nokogiri/css/xpath_visitor.rb +0 -159
@@ -20,7 +20,7 @@ module Merb::RenderMixin
20
20
  # ==== Returns
21
21
  # Hash:: An options hash
22
22
  #
23
- # @api public
23
+ # :api: public
24
24
  def default_render_options
25
25
  self._default_render_options ||= {}
26
26
  end
@@ -30,7 +30,7 @@ module Merb::RenderMixin
30
30
  # ==== Parameters
31
31
  # opts<Hash>:: An options hash
32
32
  #
33
- # @api public
33
+ # :api: public
34
34
  def render_options(opts)
35
35
  self._default_render_options = opts
36
36
  end
@@ -47,7 +47,7 @@ module Merb::RenderMixin
47
47
  # ==== Returns
48
48
  # Hash:: The default render options.
49
49
  #
50
- # @api public
50
+ # :api: public
51
51
  def layout(layout)
52
52
  self.default_render_options.update(:layout => (layout || false))
53
53
  end
@@ -57,7 +57,7 @@ module Merb::RenderMixin
57
57
  # ==== Returns
58
58
  # ~to_s:: The layout that was previously set.
59
59
  #
60
- # @api public
60
+ # :api: public
61
61
  def default_layout
62
62
  self.default_render_options.delete(:layout)
63
63
  end
@@ -96,7 +96,7 @@ module Merb::RenderMixin
96
96
  # If you pass a Hash as the first parameter, it will be moved to opts and
97
97
  # "thing" will be the current action
98
98
  #
99
- # @api public
99
+ # :api: public
100
100
  def render(thing = nil, opts = {})
101
101
  # render :format => :xml means render nil, :format => :xml
102
102
  opts, thing = thing, nil if thing.is_a?(Hash)
@@ -201,7 +201,7 @@ module Merb::RenderMixin
201
201
  # The transformed object will not be used in a layout unless a :layout is
202
202
  # explicitly passed in the opts.
203
203
  #
204
- # @api public
204
+ # :api: public
205
205
  def display(object, thing = nil, opts = {})
206
206
  template_opt = thing.is_a?(Hash) ? thing.delete(:template) : opts.delete(:template)
207
207
 
@@ -283,7 +283,7 @@ module Merb::RenderMixin
283
283
  # In this case, "one" will be available in the partial through the local
284
284
  # variable named +number+.
285
285
  #
286
- # @api public
286
+ # :api: public
287
287
  def partial(template, opts={})
288
288
 
289
289
  # partial :foo becomes "#{controller_name}/_foo"
@@ -340,7 +340,7 @@ module Merb::RenderMixin
340
340
  # ==== Returns
341
341
  # Hash:: The options hash that was passed in.
342
342
  #
343
- # @api private
343
+ # :api: private
344
344
  def _handle_options!(opts)
345
345
  self.status = opts.delete(:status).to_i if opts[:status]
346
346
  headers["Location"] = opts.delete(:location) if opts[:location]
@@ -365,7 +365,7 @@ module Merb::RenderMixin
365
365
  # one in to this method), and not found. No error will be raised if no
366
366
  # layout was specified, and the default layouts were not found.
367
367
  #
368
- # @api private
368
+ # :api: private
369
369
  def _get_layout(layout = nil)
370
370
  return false if layout == false
371
371
 
@@ -406,7 +406,7 @@ module Merb::RenderMixin
406
406
  # Array[Symbol, String]::
407
407
  # A pair consisting of the template method and location.
408
408
  #
409
- # @api private
409
+ # :api: private
410
410
  def _template_for(context, content_type, controller=nil, template=nil, locals=[])
411
411
  template_method, template_location = nil, nil
412
412
 
@@ -442,7 +442,7 @@ module Merb::RenderMixin
442
442
  # ==== Returns
443
443
  # String:: The method, if it exists. Otherwise return nil.
444
444
  #
445
- # @api private
445
+ # :api: private
446
446
  def _template_method_for(template_location, locals)
447
447
  meth = Merb::Template.template_for(template_location, [], locals)
448
448
  meth && self.respond_to?(meth) ? meth : nil
@@ -456,7 +456,7 @@ module Merb::RenderMixin
456
456
  # ==== Parameters
457
457
  # obj<Object>:: The key in the thrown_content hash. Defaults to :for_layout.
458
458
  #
459
- # @api public
459
+ # :api: public
460
460
  def catch_content(obj = :for_layout)
461
461
  @_caught_content[obj] || ''
462
462
  end
@@ -466,7 +466,7 @@ module Merb::RenderMixin
466
466
  # ==== Parameters
467
467
  # obj<Object>:: The key in the thrown_content hash. Defaults to :for_layout.
468
468
  #
469
- # @api public
469
+ # :api: public
470
470
  def thrown_content?(obj = :for_layout)
471
471
  @_caught_content.key?(obj)
472
472
  end
@@ -488,7 +488,7 @@ module Merb::RenderMixin
488
488
  # throw_content(:foo, "Foo")
489
489
  # catch_content(:foo) #=> "Foo"
490
490
  #
491
- # @api public
491
+ # :api: public
492
492
  def throw_content(obj, string = nil, &block)
493
493
  unless string || block_given?
494
494
  raise ArgumentError, "You must pass a block or a string into throw_content"
@@ -508,7 +508,7 @@ module Merb::RenderMixin
508
508
  # @raise [ArgumentError]
509
509
  # Neither string nor block given
510
510
  #
511
- # @api public
511
+ # :api: public
512
512
  def append_content(obj, string = nil, &block)
513
513
  unless string || block_given?
514
514
  raise ArgumentError, "You must pass a block or a string into append_content"
@@ -524,7 +524,7 @@ module Merb::RenderMixin
524
524
  # ==== Parameters
525
525
  # obj<Object>:: The key in the thrown_content hash. Defaults to :for_layout.
526
526
  #
527
- # @api public
527
+ # :api: public
528
528
  def clear_content(obj = :for_layout)
529
529
  @_caught_content.delete(obj) unless @_caught_content[obj].nil?
530
530
  end
@@ -105,7 +105,7 @@ module Merb
105
105
  # ==== Parameters
106
106
  # base<Module>:: The module that ResponderMixin was mixed into
107
107
  #
108
- # @api private
108
+ # :api: private
109
109
  def self.included(base)
110
110
  base.extend(ClassMethods)
111
111
  base.class_eval do
@@ -133,7 +133,7 @@ module Merb
133
133
  # ==== Examples
134
134
  # provides :html, :xml
135
135
  #
136
- # @api public
136
+ # :api: public
137
137
  def provides(*formats)
138
138
  self.class_provided_formats |= formats
139
139
  end
@@ -147,7 +147,7 @@ module Merb
147
147
  # ==== Returns
148
148
  # Array[Symbol]:: List of formats passed in.
149
149
  #
150
- # @api public
150
+ # :api: public
151
151
  def only_provides(*formats)
152
152
  clear_provides
153
153
  provides(*formats)
@@ -163,7 +163,7 @@ module Merb
163
163
  # Array[Symbol]::
164
164
  # List of formats that remain after removing the ones not to provide.
165
165
  #
166
- # @api public
166
+ # :api: public
167
167
  def does_not_provide(*formats)
168
168
  self.class_provided_formats -= formats
169
169
  end
@@ -173,7 +173,7 @@ module Merb
173
173
  # ==== Returns
174
174
  # Array:: An empty Array.
175
175
  #
176
- # @api public
176
+ # :api: public
177
177
  def clear_provides
178
178
  self.class_provided_formats.clear
179
179
  end
@@ -183,7 +183,7 @@ module Merb
183
183
  # ==== Returns
184
184
  # Array[Symbol]:: [:html].
185
185
  #
186
- # @api public
186
+ # :api: public
187
187
  def reset_provides
188
188
  only_provides(:html)
189
189
  end
@@ -195,7 +195,7 @@ module Merb
195
195
  # controller. It starts with what has been set in the controller (or
196
196
  # :html by default) but can be modifed on a per-action basis.
197
197
  #
198
- # @api private
198
+ # :api: private
199
199
  def _provided_formats
200
200
  @_provided_formats ||= class_provided_formats.dup
201
201
  end
@@ -215,7 +215,7 @@ module Merb
215
215
  # ==== Returns
216
216
  # Array[Symbol]:: List of formats passed in.
217
217
  #
218
- # @api public
218
+ # :api: public
219
219
  def provides(*formats)
220
220
  if @_content_type
221
221
  raise ContentTypeAlreadySet, "Cannot modify provided_formats because content_type has already been set"
@@ -234,7 +234,7 @@ module Merb
234
234
  # ==== Returns
235
235
  # Array[Symbol]:: List of formats passed in.
236
236
  #
237
- # @api public
237
+ # :api: public
238
238
  def only_provides(*formats)
239
239
  @_provided_formats = []
240
240
  provides(*formats)
@@ -252,7 +252,7 @@ module Merb
252
252
  # Array[Symbol]::
253
253
  # List of formats that remain after removing the ones not to provide.
254
254
  #
255
- # @api public
255
+ # :api: public
256
256
  def does_not_provide(*formats)
257
257
  @_provided_formats -= formats.flatten
258
258
  end
@@ -264,7 +264,7 @@ module Merb
264
264
  # 4. Look for one that is provided, in order of request
265
265
  # 5. Raise 406 if none found
266
266
  #
267
- # @api private
267
+ # :api: private
268
268
  def _perform_content_negotiation
269
269
  if (fmt = params[:format]) && !fmt.empty?
270
270
  accepts = [fmt.to_sym]
@@ -312,7 +312,7 @@ module Merb
312
312
  # ==== Returns
313
313
  # Symbol:: The content-type that will be used for this controller.
314
314
  #
315
- # @api public
315
+ # :api: public
316
316
  def content_type(fmt = nil)
317
317
  self.content_type = (fmt || _perform_content_negotiation) unless @_content_type
318
318
  @_content_type
@@ -331,7 +331,7 @@ module Merb
331
331
  # ==== Returns
332
332
  # Symbol:: The content-type that was passed in.
333
333
  #
334
- # @api plugin
334
+ # :api: plugin
335
335
  def content_type=(type)
336
336
  unless Merb.available_mime_types.has_key?(type)
337
337
  raise Merb::ControllerExceptions::NotAcceptable.new("Unknown content_type for response: #{type}")
@@ -384,7 +384,7 @@ module Merb
384
384
  # The index used for sorting accept types. A lower value indicates higher
385
385
  # priority.
386
386
  #
387
- # @api private
387
+ # :api: private
388
388
  def initialize(entry,index)
389
389
  @index = index
390
390
 
@@ -407,7 +407,7 @@ module Merb
407
407
  # -1, 0 or 1, depending on whether entry has a lower, equal or higher
408
408
  # priority than the accept type being compared.
409
409
  #
410
- # @api private
410
+ # :api: private
411
411
  def <=>(entry)
412
412
  if entry.quality == quality
413
413
  @index <=> entry.index
@@ -425,27 +425,27 @@ module Merb
425
425
  # True if the accept types are equal, i.e. if the synonyms for this
426
426
  # accept type includes the entry media range.
427
427
  #
428
- # @api private
428
+ # :api: private
429
429
  def eql?(entry)
430
430
  synonyms.include?(entry.media_range)
431
431
  end
432
432
 
433
433
  # An alias for eql?.
434
434
  #
435
- # @api private
435
+ # :api: private
436
436
  def ==(entry); eql?(entry); end
437
437
 
438
438
  # ==== Returns
439
439
  # Fixnum:: A hash based on the super range.
440
440
  #
441
- # @api private
441
+ # :api: private
442
442
  def hash; super_range.hash; end
443
443
 
444
444
  # ==== Returns
445
445
  # Array[String]::
446
446
  # All Accept header values, such as "text/html", that match this type.
447
447
  #
448
- # @api private
448
+ # :api: private
449
449
  def synonyms
450
450
  return @syns if @syns
451
451
  if _mime = mime
@@ -455,7 +455,7 @@ module Merb
455
455
  end
456
456
  end
457
457
 
458
- # @api private
458
+ # :api: private
459
459
  def mime
460
460
  @mime ||= Merb.available_mime_types[Merb::ResponderMixin::MIMES[@media_range]]
461
461
  end
@@ -465,7 +465,7 @@ module Merb
465
465
  # The primary media range for this accept type, i.e. either the first
466
466
  # synonym or, if none exist, the media range.
467
467
  #
468
- # @api private
468
+ # :api: private
469
469
  def super_range
470
470
  synonyms.first || @media_range
471
471
  end
@@ -473,7 +473,7 @@ module Merb
473
473
  # ==== Returns
474
474
  # Symbol: The type as a symbol, e.g. :html.
475
475
  #
476
- # @api private
476
+ # :api: private
477
477
  def to_sym
478
478
  Merb.available_mime_types.select{|k,v|
479
479
  v[:accepts] == synonyms || v[:accepts][0] == synonyms[0]}.flatten.first
@@ -482,7 +482,7 @@ module Merb
482
482
  # ==== Returns
483
483
  # String:: The accept type as a string, i.e. the media range.
484
484
  #
485
- # @api private
485
+ # :api: private
486
486
  def to_s
487
487
  @media_range
488
488
  end
@@ -26,7 +26,7 @@ module Merb::Template
26
26
  # character replaced based on the non-alphanumeric character
27
27
  # to avoid edge-case collisions.
28
28
  #
29
- # @api private
29
+ # :api: private
30
30
  def template_name(path)
31
31
  path = File.expand_path(path)
32
32
  path.gsub(/[^\.a-zA-Z0-9]/, "__").gsub(/\./, "_")
@@ -48,7 +48,7 @@ module Merb::Template
48
48
  # ==== Returns
49
49
  # IO#path:: An IO object that responds to path (File or VirtualFile).
50
50
  #
51
- # @api plugin
51
+ # :api: plugin
52
52
  # @overridable
53
53
  def load_template_io(path)
54
54
  File.open(path, "r")
@@ -64,7 +64,7 @@ module Merb::Template
64
64
  # ==== Returns
65
65
  # <String>:: name of the method that inlines the template.
66
66
  #
67
- # @api private
67
+ # :api: private
68
68
  def template_for(path, template_stack = [], locals=[])
69
69
  path = File.expand_path(path)
70
70
 
@@ -85,7 +85,7 @@ module Merb::Template
85
85
  # ==== Returns
86
86
  # Boolean:: Whether or not the template for the provided path needs to be recompiled
87
87
  #
88
- # @api private
88
+ # :api: private
89
89
  def needs_compilation?(path, locals)
90
90
  return true if Merb::Config[:reload_templates] || !METHOD_LIST[path]
91
91
 
@@ -99,7 +99,7 @@ module Merb::Template
99
99
  # ==== Returns
100
100
  # Array:: Extension strings.
101
101
  #
102
- # @api plugin
102
+ # :api: plugin
103
103
  def template_extensions
104
104
  EXTENSIONS.keys
105
105
  end
@@ -124,7 +124,7 @@ module Merb::Template
124
124
  # Even though this method supports inlining into any module, the method
125
125
  # must be available to instances of AbstractController that will use it.
126
126
  #
127
- # @api private
127
+ # :api: private
128
128
  def inline_template(io, locals=[], mod = Merb::InlineTemplates)
129
129
  full_file_path = File.expand_path(io.path)
130
130
  engine_neutral_path = full_file_path.gsub(/\.[^\.]*$/, "")
@@ -145,7 +145,7 @@ module Merb::Template
145
145
  # ==== Returns
146
146
  # Class:: The engine.
147
147
  #
148
- # @api private
148
+ # :api: private
149
149
  def engine_for(path)
150
150
  path = File.expand_path(path)
151
151
  EXTENSIONS[path.match(/\.([^\.]*)$/)[1]]
@@ -169,7 +169,7 @@ module Merb::Template
169
169
  # ==== Example
170
170
  # Merb::Template.register_extensions(Merb::Template::Erubis, ["erb"])
171
171
  #
172
- # @api plugin
172
+ # :api: plugin
173
173
  def register_extensions(engine, extensions)
174
174
  raise ArgumentError, "The class you are registering does not have a compile_template method" unless
175
175
  engine.respond_to?(:compile_template)
@@ -189,7 +189,7 @@ module Merb::Template
189
189
  # locals<Array[Symbol]>:: A list of locals to assign from the args passed into the compiled template.
190
190
  # mod<Module>:: The module that the compiled method will be placed into.
191
191
  #
192
- # @api private
192
+ # :api: private
193
193
  def self.compile_template(io, name, locals, mod)
194
194
  template = ::Erubis::BlockAwareEruby.new(io.read)
195
195
  _old_verbose, $VERBOSE = $VERBOSE, nil
@@ -220,7 +220,7 @@ module Merb::Template
220
220
  # <p>Some Foo content!</p>
221
221
  # <% end %>
222
222
  #
223
- # @private
223
+ # :api: private
224
224
  def capture_erb(*args, &block)
225
225
  _old_buf, @_erb_buf = @_erb_buf, ""
226
226
  block.call(*args)
@@ -229,7 +229,7 @@ module Merb::Template
229
229
  ret
230
230
  end
231
231
 
232
- # @private
232
+ # :api: private
233
233
  def concat_erb(string, binding)
234
234
  @_erb_buf << string
235
235
  end
@@ -243,36 +243,36 @@ end
243
243
 
244
244
  module Erubis
245
245
  module BlockAwareEnhancer
246
- # @api private
246
+ # :api: private
247
247
  def add_preamble(src)
248
248
  src << "_old_buf, @_erb_buf = @_erb_buf, ''; "
249
249
  src << "@_engine = 'erb'; "
250
250
  end
251
251
 
252
- # @api private
252
+ # :api: private
253
253
  def add_postamble(src)
254
254
  src << "\n" unless src[-1] == ?\n
255
255
  src << "_ret = @_erb_buf; @_erb_buf = _old_buf; _ret.to_s;\n"
256
256
  end
257
257
 
258
- # @api private
258
+ # :api: private
259
259
  def add_text(src, text)
260
260
  src << " @_erb_buf.concat('" << escape_text(text) << "'); "
261
261
  end
262
262
 
263
- # @api private
263
+ # :api: private
264
264
  def add_expr_escaped(src, code)
265
265
  src << ' @_erb_buf.concat(' << escaped_expr(code) << ');'
266
266
  end
267
267
 
268
- # @api private
268
+ # :api: private
269
269
  def add_stmt2(src, code, tailch)
270
270
  src << code
271
271
  src << " ).to_s; " if tailch == "="
272
272
  src << ';' unless code[-1] == ?\n
273
273
  end
274
274
 
275
- # @api private
275
+ # :api: private
276
276
  def add_expr_literal(src, code)
277
277
  if code =~ /(do|\{)(\s*\|[^|]*\|)?\s*\Z/
278
278
  src << ' @_erb_buf.concat( ' << code << "; "