posthog-ruby 3.5.1 → 3.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47d81093ca138f86158d4c964efd30df01421a1fab08c6beadb8d80781cfa39b
4
- data.tar.gz: 7ca8768e6ceb39e74f6905d44c6542c76381a351bd628a6a5754a29fcf5af30c
3
+ metadata.gz: 9401944abdf80537015fd06feb6f1ce795bf0c011271f22216537c75a062dcb8
4
+ data.tar.gz: cea7ce9ff778f181f1e011657b1423ffe74ecb530cc1a5213e43b5d1663424ef
5
5
  SHA512:
6
- metadata.gz: 5561844d134133bc4c948f557013cb7a4128c5848a12658311e44cd02b0d5ef033bf43ec7314e63139d9adf826ea94e2337ce77e923b7b9ef3a0ac0263b0af9b
7
- data.tar.gz: 26386d521bf09da5526c2363cee3eb6ad55b58dc30f217801963e96dc30137518baf9de7550889d66b06b009ef7504f0a4abe571d3b174f64ad3dc0171cf5d4e
6
+ metadata.gz: a1a717bec693f592ce65145bbb2a41cf7764bbecddfa6eb8ac95aca68ac43f6a36357397106e1929b607495c681448900076e0dd0f024d0d2ee14071f23bc8f7
7
+ data.tar.gz: 4ff35396b4819bd246fa38096b38715863741d7419f798598f75f4e32c28388e5548e5ff9fafa17cd096e9dfb38c6a94eb20d1a58eb04868ed961d5beeaf1d80
@@ -67,7 +67,7 @@ module PostHog
67
67
  'platform' => 'ruby'
68
68
  }
69
69
 
70
- add_context_lines(frame, file, lineno) if File.exist?(file)
70
+ add_context_lines(frame, file, lineno) if frame['in_app'] && File.exist?(file)
71
71
 
72
72
  frame
73
73
  end
@@ -3,7 +3,7 @@
3
3
  # Represents a feature flag returned by /flags v2
4
4
  module PostHog
5
5
  class FeatureFlag
6
- attr_reader :key, :enabled, :variant, :reason, :metadata
6
+ attr_reader :key, :enabled, :variant, :reason, :metadata, :failed
7
7
 
8
8
  def initialize(json)
9
9
  json.transform_keys!(&:to_s)
@@ -12,6 +12,7 @@ module PostHog
12
12
  @variant = json['variant']
13
13
  @reason = json['reason'] ? EvaluationReason.new(json['reason']) : nil
14
14
  @metadata = json['metadata'] ? FeatureFlagMetadata.new(json['metadata'].transform_keys(&:to_s)) : nil
15
+ @failed = json['failed']
15
16
  end
16
17
 
17
18
  # TODO: Rename to `value` in future version
@@ -131,8 +131,10 @@ module PostHog
131
131
  FeatureFlag.new(flag)
132
132
  end
133
133
  flags_response[:flags] = flags_hash
134
- flags_response[:featureFlags] = flags_hash.transform_values(&:get_value).transform_keys(&:to_sym)
135
- flags_response[:featureFlagPayloads] = flags_hash.transform_values(&:payload).transform_keys(&:to_sym)
134
+ # Filter out flags that failed evaluation to avoid overwriting cached values
135
+ successful_flags = flags_hash.reject { |_, flag| flag.failed == true }
136
+ flags_response[:featureFlags] = successful_flags.transform_values(&:get_value).transform_keys(&:to_sym)
137
+ flags_response[:featureFlagPayloads] = successful_flags.transform_values(&:payload).transform_keys(&:to_sym)
136
138
  elsif flags_response[:featureFlags]
137
139
  # v3 format
138
140
  flags_response[:featureFlags] = flags_response[:featureFlags] || {}
@@ -309,8 +311,19 @@ module PostHog
309
311
  flags = {}
310
312
  payloads = {}
311
313
  else
312
- flags = stringify_keys(flags_and_payloads[:featureFlags] || {})
313
- payloads = stringify_keys(flags_and_payloads[:featureFlagPayloads] || {})
314
+ server_flags = stringify_keys(flags_and_payloads[:featureFlags] || {})
315
+ server_payloads = stringify_keys(flags_and_payloads[:featureFlagPayloads] || {})
316
+
317
+ if errors_while_computing
318
+ # Merge server results into locally-evaluated results so that flags which
319
+ # failed server-side evaluation (already filtered out by get_flags) don't
320
+ # overwrite valid locally-evaluated values.
321
+ flags = stringify_keys(flags).merge(server_flags)
322
+ payloads = stringify_keys(payloads).merge(server_payloads)
323
+ else
324
+ flags = server_flags
325
+ payloads = server_payloads
326
+ end
314
327
  end
315
328
  rescue StandardError => e
316
329
  @on_error.call(-1, "Error computing flag remotely: #{e}")
@@ -43,8 +43,10 @@ module PostHog
43
43
  consume_message_from_queue! until @batch.full? || @queue.empty?
44
44
  end
45
45
 
46
- res = @transport.send @api_key, @batch
47
- @on_error.call(res.status, res.error) unless res.status == 200
46
+ unless @batch.empty?
47
+ res = @transport.send @api_key, @batch
48
+ @on_error.call(res.status, res.error) unless res.status == 200
49
+ end
48
50
 
49
51
  @lock.synchronize { @batch.clear }
50
52
  end
@@ -50,7 +50,12 @@ module PostHog
50
50
  last_response, exception =
51
51
  retry_with_backoff(@retries) do
52
52
  status_code, body = send_request(api_key, batch)
53
- error = JSON.parse(body)['error']
53
+ error =
54
+ begin
55
+ JSON.parse(body)['error']
56
+ rescue JSON::ParserError
57
+ body
58
+ end
54
59
  should_retry = should_retry_request?(status_code, body)
55
60
  logger.debug("Response status code: #{status_code}")
56
61
  logger.debug("Response error: #{error}") if error
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PostHog
4
- VERSION = '3.5.1'
4
+ VERSION = '3.5.3'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posthog-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.1
4
+ version: 3.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''