Module: Rudder::Analytics::Utils

Extended by:
Utils
Included in:
Client, Configuration, FieldParser, Transport, Utils, Worker
Defined in:
lib/rudder/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

#check_string(obj, name) ⇒ Object

Raises:

  • (ArgumentError)


83
84
85
# File 'lib/rudder/analytics/utils.rb', line 83

def check_string(obj, name)
  raise ArgumentError, "#{name} must be a String" unless obj.is_a? String
end

#date_in_iso8601(date) ⇒ Object



71
72
73
# File 'lib/rudder/analytics/utils.rb', line 71

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

#datetime_in_iso8601(datetime) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rudder/analytics/utils.rb', line 54

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



75
76
77
# File 'lib/rudder/analytics/utils.rb', line 75

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


33
34
35
36
37
# File 'lib/rudder/analytics/utils.rb', line 33

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

#isoify_dates!(hash) ⇒ Object

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



41
42
43
# File 'lib/rudder/analytics/utils.rb', line 41

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

#seconds_to_utc_offset(seconds, colon = true) ⇒ Object



79
80
81
# File 'lib/rudder/analytics/utils.rb', line 79

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

#stringify_keys(hash) ⇒ Object

public: Return a new hash with keys as strings



24
25
26
27
28
# File 'lib/rudder/analytics/utils.rb', line 24

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

#symbolize_keys(hash) ⇒ Object

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



12
13
14
# File 'lib/rudder/analytics/utils.rb', line 12

def symbolize_keys(hash)
  hash.transform_keys(&:to_sym)
end

#symbolize_keys!(hash) ⇒ Object

public: Convert hash keys from strings to symbols in place



18
19
20
# File 'lib/rudder/analytics/utils.rb', line 18

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

#time_in_iso8601(time) ⇒ Object



67
68
69
# File 'lib/rudder/analytics/utils.rb', line 67

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

#uidObject

public: Returns a uid string



47
48
49
50
51
52
# File 'lib/rudder/analytics/utils.rb', line 47

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 # rubocop:disable Style/FormatStringToken
end