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
 | 
