1# Copyright 2015 gRPC authors. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15require_relative '../grpc' 16 17# GRPC contains the General RPC module. 18module GRPC 19 module Core 20 # TimeConsts is a module from the C extension. 21 # 22 # Here it's re-opened to add a utility func. 23 module TimeConsts 24 # Converts a time delta to an absolute deadline. 25 # 26 # Assumes timeish is a relative time, and converts its to an absolute, 27 # with following exceptions: 28 # 29 # * if timish is one of the TimeConsts.TimeSpec constants the value is 30 # preserved. 31 # * timish < 0 => TimeConsts.INFINITE_FUTURE 32 # * timish == 0 => TimeConsts.ZERO 33 # 34 # @param timeish [Number|TimeSpec] 35 # @return [Number|TimeSpec] 36 def from_relative_time(timeish) 37 if timeish.is_a? TimeSpec 38 timeish 39 elsif timeish.nil? 40 TimeConsts::ZERO 41 elsif !timeish.is_a? Numeric 42 fail(TypeError, 43 "Cannot make an absolute deadline from #{timeish.inspect}") 44 elsif timeish < 0 45 TimeConsts::INFINITE_FUTURE 46 elsif timeish.zero? 47 TimeConsts::ZERO 48 else 49 Time.now + timeish 50 end 51 end 52 53 module_function :from_relative_time 54 end 55 end 56end 57