@@ -13,7 +13,7 @@ class Endpoint
1313 attr_accessor :block , :source , :options
1414 attr_reader :env , :request
1515
16- def_delegators :request , :params , :headers
16+ def_delegators :request , :params , :headers , :cookies
1717
1818 class << self
1919 def new ( ...)
@@ -164,10 +164,9 @@ def mount_in(router)
164164
165165 def to_routes
166166 default_route_options = prepare_default_route_attributes
167- default_path_settings = prepare_default_path_settings
168167
169168 map_routes do |method , raw_path |
170- prepared_path = Path . new ( raw_path , namespace , default_path_settings )
169+ prepared_path = Path . new ( raw_path , namespace , prepare_default_path_settings )
171170 params = options [ :route_options ] . present? ? options [ :route_options ] . merge ( default_route_options ) : default_route_options
172171 route = Grape ::Router ::Route . new ( method , prepared_path . origin , prepared_path . suffix , params )
173172 route . apply ( self )
@@ -248,18 +247,16 @@ def inspect
248247
249248 def run
250249 ActiveSupport ::Notifications . instrument ( 'endpoint_run.grape' , endpoint : self , env : env ) do
251- @header = Grape ::Util ::Header . new
252250 @request = Grape ::Request . new ( env , build_params_with : namespace_inheritable ( :build_params_with ) )
253251 begin
254- cookies . read ( @request )
255252 self . class . run_before_each ( self )
256253 run_filters befores , :before
257254
258- if ( allowed_methods = env [ Grape ::Env ::GRAPE_ALLOWED_METHODS ] )
259- allow_header_value = allowed_methods . join ( ', ' )
260- raise Grape ::Exceptions ::MethodNotAllowed . new ( header . merge ( 'Allow' => allow_header_value ) ) unless options?
255+ if env . key? ( Grape ::Env ::GRAPE_ALLOWED_METHODS )
256+ header [ 'Allow' ] = env [ Grape :: Env :: GRAPE_ALLOWED_METHODS ] . join ( ', ' )
257+ raise Grape ::Exceptions ::MethodNotAllowed . new ( header ) unless options?
261258
262- header Grape ::Http ::Headers ::ALLOW , allow_header_value
259+ header Grape ::Http ::Headers ::ALLOW , header [ 'Allow' ]
263260 response_object = ''
264261 status 204
265262 else
@@ -270,7 +267,7 @@ def run
270267 end
271268
272269 run_filters afters , :after
273- cookies . write ( header )
270+ build_response_cookies
274271
275272 # status verifies body presence when DELETE
276273 @body ||= response_object
@@ -332,24 +329,10 @@ def run_filters(filters, type = :other)
332329 extend post_extension if post_extension
333330 end
334331
335- def befores
336- namespace_stackable ( :befores )
337- end
338-
339- def before_validations
340- namespace_stackable ( :before_validations )
341- end
342-
343- def after_validations
344- namespace_stackable ( :after_validations )
345- end
346-
347- def afters
348- namespace_stackable ( :afters )
349- end
350-
351- def finallies
352- namespace_stackable ( :finallies )
332+ %i( befores before_validations after_validations afters finallies ) . each do |method |
333+ define_method method do
334+ namespace_stackable ( method )
335+ end
353336 end
354337
355338 def validations
@@ -417,5 +400,12 @@ def build_helpers
417400
418401 Module . new { helpers . each { |mod_to_include | include mod_to_include } }
419402 end
403+
404+ def build_response_cookies
405+ cookies . each_response_cookies do |name , value |
406+ cookie_value = value . is_a? ( Hash ) ? value : { value : value }
407+ Rack ::Utils . set_cookie_header! header , name , cookie_value
408+ end
409+ end
420410 end
421411end
0 commit comments