91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'date' | ||
|  | require 'exceptions/parser_error' | ||
|  | 
 | ||
|  | module Devops | ||
|  |   module API3 | ||
|  |     module Handler | ||
|  |       class RequestHandler | ||
|  | 
 | ||
|  |         DATE_FORMAT = "%Y-%m-%d" | ||
|  | 
 | ||
|  |         class << self | ||
|  |           def set_parser parser | ||
|  |             define_method("parser") do | ||
|  |               @request_parser ||= parser.new(@request) | ||
|  |             end | ||
|  |           end | ||
|  |         end | ||
|  | 
 | ||
|  |         def initialize request | ||
|  |           @request = request | ||
|  |         end | ||
|  | 
 | ||
|  |         # supported options: | ||
|  |         #   sort_field: default 'created_at'. Could also be in [user, path, method, body, response_code, created_at]. | ||
|  |         #   sort_order: default 'asc'. Could also be 'desc' | ||
|  |         def extract_sort_params_for_searching | ||
|  |           filters = @request.params | ||
|  |           sort = {} | ||
|  |           sort[filters["sort_field"] || 'created_at'] = (filters["sort_order"] || 'asc') == 'asc' ? 1 : -1
 | ||
|  |           sort | ||
|  |         end | ||
|  | 
 | ||
|  |         # supported options: | ||
|  |         #   date_from_l (format: unixtime) | ||
|  |         #   date_til_ll (format: unxitime) | ||
|  |         #   date_from (format: YYYY-MM-DD) | ||
|  |         #   date_till (format: YYYY-MM-DD) | ||
|  |         def fill_date_params_for_searching search_query | ||
|  |           filters = @request.params | ||
|  |           from = begin | ||
|  |             parse_date(filters["date_from"], filters["date_from_l"]) | ||
|  |           rescue ArgumentError | ||
|  |             raise Devops::Exception::ParserError.new("Invalid parameter 'date_from' or 'date_from_l'") | ||
|  |           end | ||
|  |           till = begin | ||
|  |             parse_date(filters["date_till"], filters["date_till_l"]) | ||
|  |           rescue ArgumentError | ||
|  |             raise Devops::Exception::ParserError.new("Invalid parameter 'date_till' or 'date_till_l'") | ||
|  |           end | ||
|  |           from = {'$gte' => from.to_i} if from | ||
|  |           till = {'$lt'  => till.to_i} if till | ||
|  |           if !from.nil? and !till.nil? | ||
|  |             search_query["created_at"] = from.merge(till)#{'$and' => [from, till]} | ||
|  |           elsif !from.nil? | ||
|  |             search_query["created_at"] = from | ||
|  |           elsif !till.nil? | ||
|  |             search_query["created_at"] = till | ||
|  |           end | ||
|  |         end | ||
|  | 
 | ||
|  |         def extract_limit_params_for_searching _default=20
 | ||
|  |           filters = @request.params | ||
|  |           unless filters["limit"].nil? | ||
|  |             begin | ||
|  |               buf = Integer(filters["limit"]) | ||
|  |               return buf if buf >= 0
 | ||
|  |             rescue ArgumentError | ||
|  |             end | ||
|  |           end | ||
|  |           _default | ||
|  |         end | ||
|  | 
 | ||
|  |         private | ||
|  |         def parse_date str, unix | ||
|  |           if str | ||
|  |             Date.strptime(str, DATE_FORMAT) | ||
|  |           elsif unix | ||
|  |             Integer(unix) | ||
|  |           else | ||
|  |             nil | ||
|  |           end | ||
|  |         end | ||
|  | 
 | ||
|  |         def owner_from_request | ||
|  |           @request.env['REMOTE_USER'] | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end |