merb-core 0.9.13 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -8,6 +8,7 @@ class Merb::Controller < Merb::AbstractController
8
8
  cattr_accessor :_subclasses
9
9
  self._subclasses = Set.new
10
10
 
11
+ # :api: private
11
12
  def self.subclasses_list() _subclasses end
12
13
 
13
14
  include Merb::ResponderMixin
@@ -19,7 +20,7 @@ class Merb::Controller < Merb::AbstractController
19
20
  # klass<Merb::Controller>::
20
21
  # The Merb::Controller inheriting from the base class.
21
22
  #
22
- # @api private
23
+ # :api: private
23
24
  def self.inherited(klass)
24
25
  _subclasses << klass.to_s
25
26
  super
@@ -35,7 +36,7 @@ class Merb::Controller < Merb::AbstractController
35
36
  # Array[String]::
36
37
  # An array of actions that should not be possible to dispatch to.
37
38
  #
38
- # @api public
39
+ # :api: public
39
40
  def self.hide_action(*names)
40
41
  self._hidden_actions = self._hidden_actions | names.map { |n| n.to_s }
41
42
  end
@@ -66,7 +67,7 @@ class Merb::Controller < Merb::AbstractController
66
67
  # end
67
68
  # end
68
69
  #
69
- # @api public
70
+ # :api: public
70
71
  def self.show_action(*names)
71
72
  self._shown_actions = self._shown_actions | names.map {|n| n.to_s}
72
73
  end
@@ -78,7 +79,7 @@ class Merb::Controller < Merb::AbstractController
78
79
  # ==== Returns
79
80
  # SimpleSet[String]:: A set of actions that should be callable.
80
81
  #
81
- # @api public
82
+ # :api: public
82
83
  def self.callable_actions
83
84
  @callable_actions ||= Extlib::SimpleSet.new(_callable_methods)
84
85
  end
@@ -91,7 +92,7 @@ class Merb::Controller < Merb::AbstractController
91
92
  # ==== Returns
92
93
  # Hash{Symbol => String}:: A new list of params, filtered as desired
93
94
  #
94
- # @api plugin
95
+ # :api: plugin
95
96
  # @overridable
96
97
  def self._filter_params(params)
97
98
  params
@@ -102,7 +103,7 @@ class Merb::Controller < Merb::AbstractController
102
103
  # ==== Returns
103
104
  # Array:: A list of method names that are also actions
104
105
  #
105
- # @api private
106
+ # :api: private
106
107
  def self._callable_methods
107
108
  callables = []
108
109
  klass = self
@@ -129,7 +130,7 @@ class Merb::Controller < Merb::AbstractController
129
130
  # By default, this renders ":controller/:action.:type". To change this,
130
131
  # override it in your application class or in individual controllers.
131
132
  #
132
- # @api public
133
+ # :api: public
133
134
  # @overridable
134
135
  def _template_location(context, type, controller)
135
136
  _conditionally_append_extension(controller ? "#{controller}/#{context}" : "#{context}", type)
@@ -147,7 +148,7 @@ class Merb::Controller < Merb::AbstractController
147
148
  # type<~to_s>::
148
149
  # The mime-type of the template that will be rendered. Defaults to nil.
149
150
  #
150
- # @api public
151
+ # :api: public
151
152
  def _absolute_template_location(template, type)
152
153
  _conditionally_append_extension(template, type)
153
154
  end
@@ -164,7 +165,7 @@ class Merb::Controller < Merb::AbstractController
164
165
  # A hash of headers to start the controller with. These headers can be
165
166
  # overridden later by the #headers method.
166
167
  #
167
- # @api plugin
168
+ # :api: plugin
168
169
  # @overridable
169
170
  def initialize(request, status=200, headers={'Content-Type' => 'text/html; charset=utf-8'})
170
171
  super()
@@ -182,7 +183,7 @@ class Merb::Controller < Merb::AbstractController
182
183
  # ==== Raises
183
184
  # ActionNotFound:: The requested action was not found in class.
184
185
  #
185
- # @api plugin
186
+ # :api: plugin
186
187
  def _dispatch(action=:index)
187
188
  Merb.logger.info("Params: #{self.class._filter_params(request.params).inspect}")
188
189
  start = Time.now
@@ -195,12 +196,13 @@ class Merb::Controller < Merb::AbstractController
195
196
  self
196
197
  end
197
198
 
199
+ # :api: public
198
200
  attr_reader :request, :headers
199
201
 
200
202
  # ==== Returns
201
203
  # Fixnum:: The response status code
202
204
  #
203
- # @api public
205
+ # :api: public
204
206
  def status
205
207
  @_status
206
208
  end
@@ -210,7 +212,7 @@ class Merb::Controller < Merb::AbstractController
210
212
  # ==== Parameters
211
213
  # s<Fixnum, Symbol>:: A status-code or named http-status
212
214
  #
213
- # @api public
215
+ # :api: public
214
216
  def status=(s)
215
217
  if s.is_a?(Symbol) && STATUS_CODES.key?(s)
216
218
  @_status = STATUS_CODES[s]
@@ -224,7 +226,7 @@ class Merb::Controller < Merb::AbstractController
224
226
  # ==== Returns
225
227
  # Hash:: The parameters from the request object
226
228
  #
227
- # @api public
229
+ # :api: public
228
230
  def params() request.params end
229
231
 
230
232
  # There are three possible ways to use this method. First, if you have a named route,
@@ -280,7 +282,7 @@ class Merb::Controller < Merb::AbstractController
280
282
  #
281
283
  # url(:articles, 2008, 10, "test_article")
282
284
  #
283
- # @api public
285
+ # :api: public
284
286
  def url(name, *args)
285
287
  args << params
286
288
  name = request.route if name == :this
@@ -315,7 +317,7 @@ class Merb::Controller < Merb::AbstractController
315
317
  # resource(:users, :new) # => /users/new
316
318
  # resource(:@user, :edit) # => /users/10/edit
317
319
  #
318
- # @api public
320
+ # :api: public
319
321
  def resource(*args)
320
322
  args << params
321
323
  Merb::Router.resource(*args)
@@ -329,7 +331,7 @@ class Merb::Controller < Merb::AbstractController
329
331
  # This uses the same arguments as the url method, with added requirements
330
332
  # of protocol and host options.
331
333
  #
332
- # @api public
334
+ # :api: public
333
335
  def absolute_url(*args)
334
336
  options = extract_options_from_args!(args) || {}
335
337
  options[:protocol] ||= request.protocol
@@ -344,7 +346,7 @@ class Merb::Controller < Merb::AbstractController
344
346
  # Array[Integer, Hash, String]::
345
347
  # The controller's status code, headers, and body
346
348
  #
347
- # @api private
349
+ # :api: private
348
350
  def rack_response
349
351
  [status, headers, Merb::Rack::StreamWrapper.new(body)]
350
352
  end
@@ -353,7 +355,7 @@ class Merb::Controller < Merb::AbstractController
353
355
  # This controller will not be able to be routed to
354
356
  # and is used for super classing only
355
357
  #
356
- # @api public
358
+ # :api: public
357
359
  def self.abstract!
358
360
  @_abstract = true
359
361
  end
@@ -364,7 +366,7 @@ class Merb::Controller < Merb::AbstractController
364
366
  # Boolean
365
367
  # true if the controller has been set as abstract
366
368
  #
367
- # @api public
369
+ # :api: public
368
370
  def self.abstract?
369
371
  !!@_abstract
370
372
  end
@@ -383,7 +385,7 @@ class Merb::Controller < Merb::AbstractController
383
385
  # type<~to_s> ::
384
386
  # The extension to append to the template path conditionally
385
387
  #
386
- # @api private
388
+ # :api: private
387
389
  def _conditionally_append_extension(template, type)
388
390
  type && !template.match(/\.#{type.to_s.escape_regexp}$/) ? "#{template}.#{type}" : template
389
391
  end
@@ -17,7 +17,7 @@ module Merb
17
17
  # :default_quality # the scale factor used in describing content type preference
18
18
  # :response_block # the block to be called with the controller when a request responds to this mime type
19
19
  #
20
- # @api public
20
+ # :api: public
21
21
  def available_mime_types
22
22
  ResponderMixin::TYPES
23
23
  end
@@ -26,7 +26,7 @@ module Merb
26
26
  # Hash{String => Symbol}::
27
27
  # A hash mapping Content-Type values to the mime type key of the appropriate entry in #available_mime_types
28
28
  #
29
- # @api public
29
+ # :api: public
30
30
  def available_accepts
31
31
  ResponderMixin::MIMES
32
32
  end
@@ -66,7 +66,7 @@ module Merb
66
66
  # ==== Returns
67
67
  # nil
68
68
  #
69
- # @api public
69
+ # :api: public
70
70
  def add_mime_type(key, transform_method, mimes, new_response_headers = {}, default_quality = 1, &block)
71
71
  enforce!(key => Symbol, mimes => Array)
72
72
 
@@ -110,7 +110,7 @@ module Merb
110
110
  # ==== Notes
111
111
  # :all is the key for */*; It can't be removed.
112
112
  #
113
- # @api public
113
+ # :api: public
114
114
  def remove_mime_type(key)
115
115
  return false if key == :all
116
116
  ResponderMixin::TYPES.delete(key)
@@ -125,7 +125,7 @@ module Merb
125
125
  # ==== Raises
126
126
  # ArgumentError:: The requested mime type is not valid.
127
127
  #
128
- # @api private
128
+ # :api: private
129
129
  def mime_transform_method(key)
130
130
  raise ArgumentError, ":#{key} is not a valid MIME-type" unless ResponderMixin::TYPES.key?(key)
131
131
  ResponderMixin::TYPES[key][:transform_method]
@@ -75,7 +75,7 @@ module Merb::AuthenticationMixin
75
75
  # end
76
76
  #
77
77
  #
78
- # @api public
78
+ # :api: public
79
79
  def basic_authentication(realm = "Application", &authenticator)
80
80
  @_basic_authentication ||= BasicAuthentication.new(self, realm, &authenticator)
81
81
  end
@@ -84,7 +84,7 @@ module Merb::AuthenticationMixin
84
84
  # So we can have access to the status codes
85
85
  include Merb::ControllerExceptions
86
86
 
87
- # @api private
87
+ # :api: private
88
88
  def initialize(controller, realm = "Application", &authenticator)
89
89
  @controller = controller
90
90
  @realm = realm
@@ -101,6 +101,9 @@ module Merb::AuthenticationMixin
101
101
  #
102
102
  # ==== Returns
103
103
  # Object:: False if basic auth is not provided, otherwise the return value of the authenticator block.
104
+ #
105
+ # @overridable
106
+ # :api: public
104
107
  def authenticate(&authenticator)
105
108
  if @auth.provided? and @auth.basic?
106
109
  authenticator.call(*@auth.credentials)
@@ -114,7 +117,7 @@ module Merb::AuthenticationMixin
114
117
  # ==== Throws
115
118
  # :halt with an "HTTP Basic: Access denied." message with no layout, and sets the status to Unauthorized.
116
119
  #
117
- # @api public
120
+ # :api: public
118
121
  def request
119
122
  request!
120
123
  throw :halt, @controller.render("HTTP Basic: Access denied.\n", :status => Unauthorized.status, :layout => false)
@@ -125,7 +128,7 @@ module Merb::AuthenticationMixin
125
128
  # ==== Returns
126
129
  # String:: Returns the empty string to provide a response body.
127
130
  #
128
- # @api public
131
+ # :api: public
129
132
  def request!
130
133
  @controller.status = Unauthorized.status
131
134
  @controller.headers['WWW-Authenticate'] = 'Basic realm="%s"' % @realm
@@ -135,7 +138,7 @@ module Merb::AuthenticationMixin
135
138
  # ==== Returns
136
139
  # Boolean:: Whether there has been any basic authentication credentials provided
137
140
  #
138
- # @api public
141
+ # :api: public
139
142
  def provided?
140
143
  @auth.provided?
141
144
  end
@@ -143,7 +146,7 @@ module Merb::AuthenticationMixin
143
146
  # ==== Returns
144
147
  # String:: The username provided in the request.
145
148
  #
146
- # @api public
149
+ # :api: public
147
150
  def username
148
151
  provided? ? @auth.credentials.first : nil
149
152
  end
@@ -151,14 +154,14 @@ module Merb::AuthenticationMixin
151
154
  # ==== Returns
152
155
  # String:: The password provided in the request.
153
156
  #
154
- # @api public
157
+ # :api: public
155
158
  def password
156
159
  provided? ? @auth.credentials.last : nil
157
160
  end
158
161
 
159
162
  protected
160
163
 
161
- # @api private
164
+ # :api: private
162
165
  def authenticate_or_request(&authenticator)
163
166
  authenticate(&authenticator) || request
164
167
  end
@@ -30,7 +30,7 @@ module Merb::ConditionalGetMixin
30
30
  # value of ETag header enclosed in double quotes
31
31
  # as required by the RFC
32
32
  #
33
- # @api public
33
+ # :api: public
34
34
  def etag=(tag)
35
35
  headers[Merb::Const::ETAG] = %("#{tag}")
36
36
  end
@@ -39,7 +39,7 @@ module Merb::ConditionalGetMixin
39
39
  # <String>::
40
40
  # Value of ETag response header or nil if it's not set.
41
41
  #
42
- # @api public
42
+ # :api: public
43
43
  def etag
44
44
  headers[Merb::Const::ETAG]
45
45
  end
@@ -49,7 +49,7 @@ module Merb::ConditionalGetMixin
49
49
  # true if ETag response header equals If-None-Match request header,
50
50
  # false otherwise
51
51
  #
52
- # @api public
52
+ # :api: public
53
53
  def etag_matches?(tag = self.etag)
54
54
  tag == self.request.if_none_match
55
55
  end
@@ -61,7 +61,7 @@ module Merb::ConditionalGetMixin
61
61
  # resource modification timestamp converted into format
62
62
  # required by the RFC
63
63
  #
64
- # @api public
64
+ # :api: public
65
65
  def last_modified=(time)
66
66
  headers[Merb::Const::LAST_MODIFIED] = time.httpdate
67
67
  end
@@ -70,7 +70,7 @@ module Merb::ConditionalGetMixin
70
70
  # <String>::
71
71
  # Value of Last-Modified response header or nil if it's not set.
72
72
  #
73
- # @api public
73
+ # :api: public
74
74
  def last_modified
75
75
  Time.rfc2822(headers[Merb::Const::LAST_MODIFIED])
76
76
  end
@@ -80,7 +80,7 @@ module Merb::ConditionalGetMixin
80
80
  # true if Last-Modified response header is < than
81
81
  # If-Modified-Since request header value, false otherwise.
82
82
  #
83
- # @api public
83
+ # :api: public
84
84
  def not_modified?(time = self.last_modified)
85
85
  request.if_modified_since && time && time <= request.if_modified_since
86
86
  end
@@ -90,7 +90,7 @@ module Merb::ConditionalGetMixin
90
90
  # true if either ETag matches or entity is not modified,
91
91
  # so request is fresh; false otherwise
92
92
  #
93
- # @api public
93
+ # :api: public
94
94
  def request_fresh?
95
95
  etag_matches?(self.etag) || not_modified?(self.last_modified)
96
96
  end
@@ -13,7 +13,7 @@ module Merb
13
13
  # SomeBackgroundTask.run
14
14
  # end
15
15
  #
16
- # @api public
16
+ # :api: public
17
17
  def run_later(&blk)
18
18
  Merb::Dispatcher.work_queue << blk
19
19
  end
@@ -46,7 +46,7 @@ module Merb
46
46
  # end
47
47
  # end
48
48
  #
49
- # @api public
49
+ # :api: public
50
50
  def render_chunked(&blk)
51
51
  must_support_streaming!
52
52
  headers['Transfer-Encoding'] = 'chunked'
@@ -65,7 +65,7 @@ module Merb
65
65
  # ==== Parameters
66
66
  # data<String>:: a chunk of data to return.
67
67
  #
68
- # @api public
68
+ # :api: public
69
69
  def send_chunk(data)
70
70
  only_runs_on_mongrel!
71
71
  @response.write('%x' % data.size + "\r\n")
@@ -82,7 +82,7 @@ module Merb
82
82
  # A block that the server can call later, allowing Merb to release the
83
83
  # thread lock and render another request.
84
84
  #
85
- # @api public
85
+ # :api: public
86
86
  def render_deferred(&blk)
87
87
  Proc.new do |response|
88
88
  response.write(blk.call)
@@ -100,7 +100,7 @@ module Merb
100
100
  # Proc::
101
101
  # A block that Mongrel can call after returning the string to the user.
102
102
  #
103
- # @api public
103
+ # :api: public
104
104
  def render_then_call(str, &blk)
105
105
  Proc.new do |response|
106
106
  response.write(str)
@@ -128,7 +128,7 @@ module Merb
128
128
  # redirect("http://www.merbivore.com/")
129
129
  # redirect("http://www.merbivore.com/", :permanent => true)
130
130
  #
131
- # @api public
131
+ # :api: public
132
132
  def redirect(url, opts = {})
133
133
  default_redirect_options = { :message => nil, :permanent => false }
134
134
  opts = default_redirect_options.merge(opts)
@@ -144,7 +144,7 @@ module Merb
144
144
 
145
145
  # Retreives the redirect message either locally or from the request.
146
146
  #
147
- # @api public
147
+ # :api: public
148
148
  def message
149
149
  @_message = defined?(@_message) ? @_message : request.message
150
150
  end
@@ -166,7 +166,7 @@ module Merb
166
166
  # ==== Returns
167
167
  # IO:: An I/O stream for the file.
168
168
  #
169
- # @api public
169
+ # :api: public
170
170
  def send_file(file, opts={})
171
171
  opts.update(Merb::Const::DEFAULT_SEND_FILE_OPTIONS.merge(opts))
172
172
  disposition = opts[:disposition].dup || 'attachment'
@@ -199,7 +199,7 @@ module Merb
199
199
  # The name to use for the file. Defaults to the filename of file.
200
200
  # :type<String>:: The content type.
201
201
  #
202
- # @api public
202
+ # :api: public
203
203
  def send_data(data, opts={})
204
204
  opts.update(Merb::Const::DEFAULT_SEND_FILE_OPTIONS.merge(opts))
205
205
  disposition = opts[:disposition].dup || 'attachment'
@@ -235,7 +235,7 @@ module Merb
235
235
  # end
236
236
  # end
237
237
  #
238
- # @api public
238
+ # :api: public
239
239
  def stream_file(opts={}, &stream)
240
240
  opts.update(Merb::Const::DEFAULT_SEND_FILE_OPTIONS.merge(opts))
241
241
  disposition = opts[:disposition].dup || 'attachment'
@@ -277,7 +277,7 @@ module Merb
277
277
  # ==== Return
278
278
  # String:: precisely a single space.
279
279
  #
280
- # @api public
280
+ # :api: public
281
281
  def nginx_send_file(path, content_type = "")
282
282
  # Let Nginx detect content type unless it is explicitly set
283
283
  headers['Content-Type'] = content_type
@@ -297,7 +297,7 @@ module Merb
297
297
  # value<~to_s>:: A value for the cookie.
298
298
  # expires<~gmtime:~strftime, Hash>:: An expiration time for the cookie, or a hash of cookie options.
299
299
  #
300
- # @api public
300
+ # :api: public
301
301
  def set_cookie(name, value, expires)
302
302
  options = expires.is_a?(Hash) ? expires : {:expires => expires}
303
303
  cookies.set_cookie(name, value, options)
@@ -311,7 +311,7 @@ module Merb
311
311
  # ==== Parameters
312
312
  # name<~to_s>:: A name for the cookie to delete.
313
313
  #
314
- # @api public
314
+ # :api: public
315
315
  def delete_cookie(name)
316
316
  set_cookie(name, nil, Merb::Const::COOKIE_EXPIRED_TIME)
317
317
  end
@@ -324,7 +324,7 @@ module Merb
324
324
  # ==== Returns
325
325
  # String:: The escaped object.
326
326
  #
327
- # @api public
327
+ # :api: public
328
328
  def escape_xml(obj)
329
329
  Erubis::XmlHelper.escape_xml(obj.to_s)
330
330
  end
@@ -338,7 +338,7 @@ module Merb
338
338
  # ==== Raises
339
339
  # NotImplemented:: The Rack adapter is not mongrel.
340
340
  #
341
- # @api private
341
+ # :api: private
342
342
  def only_runs_on_mongrel!
343
343
  unless Merb::Config[:log_stream] == 'mongrel'
344
344
  raise(Merb::ControllerExceptions::NotImplemented, "Current Rack adapter is not mongrel. cannot support this feature")