Module: Segment::Analytics::Utils

Extended by:
Utils
Included in:
Client, Request, Utils, Worker
Defined in:
lib/segment/analytics/utils.rb

Constant Summary collapse

UTC_OFFSET_WITH_COLON =
'%s%02d:%02d'
UTC_OFFSET_WITHOUT_COLON =
UTC_OFFSET_WITH_COLON.sub(':', '')

Instance Method Summary collapse

Instance Method Details

#date_in_iso8601(date) ⇒ Object


72
73
74
# File 'lib/segment/analytics/utils.rb', line 72

def date_in_iso8601 date
  date.strftime("%F")
end

#datetime_in_iso8601(datetime) ⇒ Object


51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/segment/analytics/utils.rb', line 51

def datetime_in_iso8601 datetime
  case datetime
  when Time
      time_in_iso8601 datetime
  when DateTime
      time_in_iso8601 datetime.to_time
  when Date
    date_in_iso8601 datetime
  else
    datetime
  end
end

#formatted_offset(time, colon = true, alternate_utc_string = nil) ⇒ Object


76
77
78
# File 'lib/segment/analytics/utils.rb', line 76

def formatted_offset time, colon = true, alternate_utc_string = nil
  time.utc? && alternate_utc_string || seconds_to_utc_offset(time.utc_offset, colon)
end

#isoify_dates(hash) ⇒ Object

public: Returns a new hash with all the date values in the into iso8601

strings

29
30
31
32
33
34
# File 'lib/segment/analytics/utils.rb', line 29

def isoify_dates(hash)
  hash.inject({}) { |memo, (k, v)|
    memo[k] = datetime_in_iso8601(v)
    memo
  }
end

#isoify_dates!(hash) ⇒ Object

public: Converts all the date values in the into iso8601 strings in place


38
39
40
# File 'lib/segment/analytics/utils.rb', line 38

def isoify_dates!(hash)
  hash.replace isoify_dates hash
end

#seconds_to_utc_offset(seconds, colon = true) ⇒ Object


80
81
82
# File 'lib/segment/analytics/utils.rb', line 80

def seconds_to_utc_offset(seconds, colon = true)
  (colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON) % [(seconds < 0 ? '-' : '+'), (seconds.abs / 3600), ((seconds.abs % 3600) / 60)]
end

#stringify_keys(hash) ⇒ Object

public: Return a new hash with keys as strings


22
23
24
# File 'lib/segment/analytics/utils.rb', line 22

def stringify_keys(hash)
  hash.inject({}) { |memo, (k,v)| memo[k.to_s] = v; memo }
end

#symbolize_keys(hash) ⇒ Object

public: Return a new hash with keys converted from strings to symbols


10
11
12
# File 'lib/segment/analytics/utils.rb', line 10

def symbolize_keys(hash)
  hash.inject({}) { |memo, (k,v)| memo[k.to_sym] = v; memo }
end

#symbolize_keys!(hash) ⇒ Object

public: Convert hash keys from strings to symbols in place


16
17
18
# File 'lib/segment/analytics/utils.rb', line 16

def symbolize_keys!(hash)
  hash.replace symbolize_keys hash
end

#time_in_iso8601(time, fraction_digits = 3) ⇒ Object


64
65
66
67
68
69
70
# File 'lib/segment/analytics/utils.rb', line 64

def time_in_iso8601 time, fraction_digits = 3
  fraction = if fraction_digits > 0
               (".%06i" % time.usec)[0, fraction_digits + 1]
             end

  "#{time.strftime("%Y-%m-%dT%H:%M:%S")}#{fraction}#{formatted_offset(time, true, 'Z')}"
end

#uidObject

public: Returns a uid string


44
45
46
47
48
49
# File 'lib/segment/analytics/utils.rb', line 44

def uid
  arr = SecureRandom.random_bytes(16).unpack("NnnnnN")
  arr[2] = (arr[2] & 0x0fff) | 0x4000
  arr[3] = (arr[3] & 0x3fff) | 0x8000
  "%08x-%04x-%04x-%04x-%04x%08x" % arr
end