Module: Familia::Utils
- Included in:
- Familia
- Defined in:
- lib/familia/utils.rb
Overview
Family-related utility methods
Instance Method Summary collapse
-
#dbkey(*val) ⇒ String
Creates a dbkey from given values.
-
#join(*val) ⇒ String
Joins array elements with Familia delimiter.
-
#now(current_time = Time.now) ⇒ Float
Returns current time in UTC as a float.
-
#now_in_μs ⇒ Integer
(also: #now_in_microseconds)
Returns the current time in microseconds.
-
#pretty_path(filepath) ⇒ Pathname, ...
Converts an absolute file path to a path relative to the current working directory.
-
#pretty_stack(skip: 1, limit: 5) ⇒ String
Formats a stack trace with pretty file paths for improved readability.
-
#qstamp(quantum = 10.minutes, pattern: nil, time: nil) ⇒ Integer, String
A quantized timestamp.
-
#serverid(uri) ⇒ Object
Gets server ID without DB component for pool identification.
-
#split(val) ⇒ Array
Splits a string using Familia delimiter.
Instance Method Details
#dbkey(*val) ⇒ String
Creates a dbkey from given values
28 29 30 |
# File 'lib/familia/utils.rb', line 28 def dbkey(*val) join(*val) end |
#join(*val) ⇒ String
Joins array elements with Familia delimiter
14 15 16 |
# File 'lib/familia/utils.rb', line 14 def join(*val) val.compact.join(Familia.delim) end |
#now(current_time = Time.now) ⇒ Float
Returns current time in UTC as a float
43 44 45 |
# File 'lib/familia/utils.rb', line 43 def now(current_time = Time.now) current_time.utc.to_f end |
#now_in_μs ⇒ Integer Also known as: now_in_microseconds
Returns the current time in microseconds. This is used to measure the duration of Database commands.
Alias: now_in_microseconds
53 54 55 |
# File 'lib/familia/utils.rb', line 53 def now_in_μs Process.clock_gettime(Process::CLOCK_MONOTONIC, :microsecond) end |
#pretty_path(filepath) ⇒ Pathname, ...
Converts an absolute file path to a path relative to the current working directory. This simplifies logging and error reporting by showing only the relevant parts of file paths instead of lengthy absolute paths.
103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/familia/utils.rb', line 103 def pretty_path(filepath) return nil if filepath.nil? basepath = Dir.pwd relative_path = Pathname.new(filepath).relative_path_from(basepath) if relative_path.to_s.start_with?('..') File.basename(filepath) else relative_path end end |
#pretty_stack(skip: 1, limit: 5) ⇒ String
Formats a stack trace with pretty file paths for improved readability
123 124 125 |
# File 'lib/familia/utils.rb', line 123 def pretty_stack(skip: 1, limit: 5) caller(skip..(skip + limit + 1)).first(limit).map { |frame| pretty_path(frame) }.join("\n") end |
#qstamp(quantum = 10.minutes, pattern: nil, time: nil) ⇒ Integer, String
A quantized timestamp
72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/familia/utils.rb', line 72 def qstamp(quantum = 10.minutes, pattern: nil, time: nil) time ||= Familia.now time = time.to_f if time.is_a?(Time) rounded = time - (time % quantum) if pattern Time.at(rounded).utc.strftime(pattern) else Time.at(rounded).utc.to_i end end |
#serverid(uri) ⇒ Object
Gets server ID without DB component for pool identification
33 34 35 36 37 38 |
# File 'lib/familia/utils.rb', line 33 def serverid(uri) # Create a copy of URI without DB for server identification uri = uri.dup uri.db = nil uri.serverid end |