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
- .convert_to_datetime(value) ⇒ Object private
- .date_in_iso8601(date) ⇒ Object private
- .datetime_in_iso8601(datetime) ⇒ Object private
-
.deep_symbolize_keys(obj) ⇒ Object
private
public: Recursively convert all keys to symbols in a Hash/Array tree.
- .formatted_offset(time, colon = true, alternate_utc_string = nil) ⇒ Object private
-
.get_by_symbol_or_string_key(hash, key) ⇒ Object
private
public: Get value from hash by symbol key first, then string key Handles falsy values correctly (unlike ||).
-
.is_valid_regex(regex) ⇒ Object
private
TODO: Rename to ‘valid_regex?` in future version.
-
.isoify_dates(hash) ⇒ Object
private
public: Returns a new hash with all the date values in the into iso8601 strings.
-
.isoify_dates!(hash) ⇒ Object
private
public: Converts all the date values in the into iso8601 strings in place.
- .seconds_to_utc_offset(seconds, colon = true) ⇒ Object private
-
.stringify_keys(hash) ⇒ Object
private
public: Return a new hash with keys as strings.
-
.symbolize_keys(hash) ⇒ Object
private
public: Return a new hash with keys converted from strings to symbols.
-
.symbolize_keys!(hash) ⇒ Object
private
public: Convert hash keys from strings to symbols in place.
- .time_in_iso8601(time, fraction_digits = 3) ⇒ Object private
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 |