Sha256: a39909c585f15838ef976db32e1ad659d80f4639e3f134219bf2b6199ebd19ea
Contents?: true
Size: 1.31 KB
Versions: 2
Compression:
Stored size: 1.31 KB
Contents
module ReportsKits class RelativeTime LETTERS_DURATION_METHODS = { 'y' => :years, 'M' => :months, 'w' => :weeks, 'd' => :days, 'h' => :hours, 'm' => :minutes, 's' => :seconds } LETTERS = LETTERS_DURATION_METHODS.keys.join def self.parse(string, prevent_exceptions: false) return Time.zone.now if string == 'now' original_string = string string = string.to_s.strip is_negative = string[0, 1] == '-' string = string[1..-1] if is_negative result_string = is_negative ? '-' : '' result_durations = [] string.scan(/(\d+)([#{LETTERS}]?)/) do |number, letter| result_string += "#{number}#{letter}" duration_method = LETTERS_DURATION_METHODS[letter] unless duration_method return if prevent_exceptions raise ArgumentError.new("Invalid duration letter: #{letter.inspect}") end result_durations << number.to_i.public_send(duration_method) end if result_string == '-' || result_string != original_string.to_s.strip return if prevent_exceptions raise ArgumentError.new("Invalid time duration: #{original_string.inspect}") end duration = result_durations.reduce(&:+) is_negative ? duration.ago : duration.from_now end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
reports_kits-0.7.8 | lib/reports_kits/relative_time.rb |
reports_kits-0.7.7 | lib/reports_kits/relative_time.rb |