Module: Bucketeer

Defined in:
lib/bucketeer.rb,
lib/bucketeer/version.rb

Constant Summary collapse

VERSION =
'0.1.0'

Class Method Summary collapse

Class Method Details

.bucket(set, interval) ⇒ Hash

Returns the bucketed hash of data.

Parameters:

  • data (Hash)

    a hash of data, where they keys are Time objects “value”

  • interval (Integer, Symbol)

    the interval by which data is bucketed If an integer, interval if the number of seconds. If a symbol, interval must be one of :day, :month, :week, :annual

Returns:

  • (Hash)

    the bucketed hash of data



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/bucketeer.rb', line 9

def self.bucket(set, interval)
  bucketed = Hash.new { |h, k| h[k] = 0 }

  set.each_pair do |time, value|
    milliseconds_since_epoch = time.to_i * 1000
    interval_in_milliseconds = interval * 1000
    time_since_last_interval = milliseconds_since_epoch % interval_in_milliseconds
    time_until_next_interval = interval_in_milliseconds - time_since_last_interval

    end_of_interval = Time.at((milliseconds_since_epoch + time_until_next_interval) / 1000)
    bucketed[end_of_interval] += value
  end
  bucketed
end