lib/grape/middleware/base.rb in grape-2.1.3 vs lib/grape/middleware/base.rb in grape-2.2.0
- old
+ new
@@ -2,22 +2,21 @@
module Grape
module Middleware
class Base
include Helpers
+ include Grape::DSL::Headers
attr_reader :app, :env, :options
TEXT_HTML = 'text/html'
- include Grape::DSL::Headers
-
# @param [Rack Application] app The standard argument for a Rack middleware.
# @param [Hash] options A hash of options, simply stored for use by subclasses.
def initialize(app, *options)
@app = app
- @options = options.any? ? default_options.merge(options.shift) : default_options
+ @options = options.any? ? default_options.deep_merge(options.shift) : default_options
@app_response = nil
end
def default_options
{}
@@ -59,36 +58,38 @@
return @app_response if @app_response.is_a?(Rack::Response)
@app_response = Rack::Response.new(@app_response[2], @app_response[0], @app_response[1])
end
- def content_type_for(format)
- HashWithIndifferentAccess.new(content_types)[format]
+ def content_types
+ @content_types ||= Grape::ContentTypes.content_types_for(options[:content_types])
end
- def content_types
- ContentTypes.content_types_for(options[:content_types])
+ def mime_types
+ @mime_types ||= Grape::ContentTypes.mime_types_for(content_types)
end
+ def content_type_for(format)
+ content_types_indifferent_access[format]
+ end
+
def content_type
content_type_for(env[Grape::Env::API_FORMAT] || options[:format]) || TEXT_HTML
end
- def mime_types
- @mime_types ||= content_types.each_pair.with_object({}) do |(k, v), types_without_params|
- types_without_params[v.split(';').first] = k
- end
- end
-
private
def merge_headers(response)
return unless headers.is_a?(Hash)
case response
when Rack::Response then response.headers.merge!(headers)
when Array then response[1].merge!(headers)
end
+ end
+
+ def content_types_indifferent_access
+ @content_types_indifferent_access ||= content_types.with_indifferent_access
end
end
end
end