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
|