50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'sinatra/base'
 | |
| require "sinatra/json"
 | |
| 
 | |
| require "providers/provider_factory"
 | |
| 
 | |
| module Sinatra
 | |
|   module Version2_0
 | |
|     module Request
 | |
|       module Helpers
 | |
| 
 | |
| =begin
 | |
|         # Check request headers
 | |
|         def check_headers *headers
 | |
|           ha = (headers.empty? ? [:accept, :content_type] : headers)
 | |
|           ha.each do |h|
 | |
|             case h
 | |
|             when :accept, "accept"
 | |
|               accept_json
 | |
|             when :content_type, "content_type"
 | |
|               request_json
 | |
|             end
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         # Check Accept header
 | |
|         #
 | |
|         # Can client works with JSON?
 | |
|         def accept_json
 | |
|           logger.debug(request.accept)
 | |
|           unless request.accept? 'application/json'
 | |
|             response.headers['Accept'] = 'application/json'
 | |
|             halt_response("Accept header should contains 'application/json' type", 406)
 | |
|           end
 | |
|         rescue NoMethodError => e
 | |
|           #error in sinatra 1.4.4 (https://github.com/sinatra/sinatra/issues/844, https://github.com/sinatra/sinatra/pull/805)
 | |
|           response.headers['Accept'] = 'application/json'
 | |
|           halt_response("Accept header should contains 'application/json' type", 406)
 | |
|         end
 | |
| 
 | |
|         # Check Content-Type header
 | |
|         def request_json
 | |
|           halt_response("Content-Type should be 'application/json'", 415) if request.media_type.nil? or request.media_type != 'application/json'
 | |
|         end
 | |
| =end
 | |
| 
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | 
