fluke/devops-service/app/api3/handlers/request_handler.rb
Tim Lianov 03dc3d8d99 v3
2018-04-04 22:44:39 +03:00

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