Sha256: a86f8c66fbeab9b65541efc54b43e4dedca784780fbcd0d228d88f41e2bbbfb6

Contents?: true

Size: 1.82 KB

Versions: 6

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

module RubySmart
  module SimpleLogger
    module Extensions
      module Timer
        def timer(action, key = :default, opts = {})
          @timers      ||= {}
          @timers[key] ||= {
            start:   nil,
            stop:    nil,
            measure: 0
          }

          case action
          when :restart
            @timers[key][:start]   = Time.now
            @timers[key][:stop]    = nil
            @timers[key][:measure] = 0

            true
          when :start, :continue
            @timers[key][:start] = Time.now
            @timers[key][:stop]  = nil

            true
          when :stop
            return false if !@timers[key][:start] || @timers[key][:stop]
            @timers[key][:stop]    = Time.now
            @timers[key][:measure] += @timers[key][:stop] - @timers[key][:start]

            true
          when :pause
            return false if !@timers[key][:start] || @timers[key][:stop]

            @timers[key][:measure] += Time.now - @timers[key][:start]
            @timers[key][:start]   = nil
            @timers[key][:stop]    = nil

            true
          when :clear
            self.timer(:stop, key)
            current = self.timer(:current, key)
            @timers.delete(key)

            # time_ago_in_words in only available if activesupport & actionview gems are loaded
            if opts[:humanized] && respond_to?(:time_ago_in_words)
              time_ago_in_words(current.to_i.seconds.from_now, include_seconds: true)
            else
              current
            end
          when :current
            current = @timers[key][:measure]
            current += Time.now - @timers[key][:start] if @timers[key][:start] && @timers[key][:stop].nil?
            current
          else
            nil
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ruby_smart-simple_logger-1.2.2 lib/ruby_smart/simple_logger/extensions/timer.rb
ruby_smart-simple_logger-1.2.1 lib/ruby_smart/simple_logger/extensions/timer.rb
ruby_smart-simple_logger-1.2.0 lib/ruby_smart/simple_logger/extensions/timer.rb
ruby_smart-simple_logger-1.1.1 lib/ruby_smart/simple_logger/extensions/timer.rb
ruby_smart-simple_logger-1.1.0 lib/ruby_smart/simple_logger/extensions/timer.rb
ruby_smart-simple_logger-1.0.0 lib/ruby_smart/simple_logger/extensions/timer.rb