Module: PostHog::Utils Private

Included in:
Client, FeatureFlagsPoller, FieldParser, SendWorker, Transport
Defined in:
lib/posthog/utils.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Utility helpers used internally by the SDK.

Defined Under Namespace

Classes: SizeLimitedHash

Constant Summary collapse

UTC_OFFSET_WITH_COLON =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

'%s%02d:%02d'
UTC_OFFSET_WITHOUT_COLON =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

UTC_OFFSET_WITH_COLON.sub(':', '')

Class Method Summary collapse

Class Method Details

.convert_to_datetime(value) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/posthog/utils.rb', line 95

def convert_to_datetime(value)
  if value.respond_to?(:strftime)
    value

  elsif value.respond_to?(:to_str)
    begin
      DateTime.parse(value)
    rescue ArgumentError
      raise InconclusiveMatchError, "#{value} is not in a valid date format"
    end
  else
    raise InconclusiveMatchError, 'The date provided must be a string or date object'
  end
end

.date_in_iso8601(date) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



81
82
83
# File 'lib/posthog/utils.rb', line 81

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

.datetime_in_iso8601(datetime) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/posthog/utils.rb', line 61

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

.deep_symbolize_keys(obj) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

public: Recursively convert all keys to symbols in a Hash/Array tree



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/posthog/utils.rb', line 33

def deep_symbolize_keys(obj)
  case obj
  when Hash
    obj.each_with_object({}) do |(key, value), result|
      result[key.to_sym] = deep_symbolize_keys(value)
    end
  when Array
    obj.map { |item| deep_symbolize_keys(item) }
  else
    obj
  end
end

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



85
86
87
88
# File 'lib/posthog/utils.rb', line 85

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

.get_by_symbol_or_string_key(hash, key) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

public: Get value from hash by symbol key first, then string key

Handles falsy values correctly (unlike ||)

hash - Hash to lookup value in key - Symbol or String key to lookup

Returns the value if found, nil otherwise



128
129
130
131
132
133
134
135
136
137
# File 'lib/posthog/utils.rb', line 128

def get_by_symbol_or_string_key(hash, key)
  symbol_key = key.to_sym
  string_key = key.to_s

  if hash.key?(symbol_key)
    hash[symbol_key]
  else
    hash[string_key]
  end
end

.is_valid_regex(regex) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

TODO: Rename to ‘valid_regex?` in future version



114
115
116
117
118
119
# File 'lib/posthog/utils.rb', line 114

def is_valid_regex(regex) # rubocop:disable Naming/PredicateName
  Regexp.new(regex)
  true
rescue RegexpError
  false
end

.isoify_dates(hash) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

strings


49
50
51
52
53
# File 'lib/posthog/utils.rb', line 49

def isoify_dates(hash)
  hash.transform_values do |v|
    datetime_in_iso8601(v)
  end
end

.isoify_dates!(hash) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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



57
58
59
# File 'lib/posthog/utils.rb', line 57

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

.seconds_to_utc_offset(seconds, colon = true) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



90
91
92
93
# File 'lib/posthog/utils.rb', line 90

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

.stringify_keys(hash) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

public: Return a new hash with keys as strings



27
28
29
# File 'lib/posthog/utils.rb', line 27

def stringify_keys(hash)
  hash.transform_keys(&:to_s)
end

.symbolize_keys(hash) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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



15
16
17
# File 'lib/posthog/utils.rb', line 15

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

.symbolize_keys!(hash) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

public: Convert hash keys from strings to symbols in place



21
22
23
# File 'lib/posthog/utils.rb', line 21

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

.time_in_iso8601(time, fraction_digits = 3) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



74
75
76
77
78
79
# File 'lib/posthog/utils.rb', line 74

def time_in_iso8601(time, fraction_digits = 3)
  fraction =
    (('.%06i' % time.usec)[0, fraction_digits + 1] if fraction_digits.positive?) # rubocop:disable Style/FormatString

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