posthog-ruby 2.8.1 → 2.9.0

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: 767f337c697572f28679f37915ec396e9e888b8bcaf6327fc14ec06979485517
4
- data.tar.gz: 00d577e46af9e59befe59e095197e4bc92badb0a8c8611f1600cdc225cabaece
3
+ metadata.gz: a9be467263d4138e0b223e18281a9b0af56351fbf9d807b01bf4ff8f87d004a7
4
+ data.tar.gz: 1c4a9990d2958023b7db53511e64aa90ade5364d06e42e23b2b981d6acb59ba2
5
5
  SHA512:
6
- metadata.gz: f856dc2386e887addc615c722a53cf285e5e613a886f6c07ff7e1a009b76ed815370201f50871cd0f1941037af7b9e62d9d9fcba7e2bbcc9143afef4dd5795c8
7
- data.tar.gz: 48d2e2d731128f87b93fd1287941a94ace952c99cdf49bcdf21e0f26c219a5b78396befc39dda792ddca98b9bec7d8e5f06404316ca154cb19b153db4d63cd79
6
+ metadata.gz: abde921140981a63fb82677e5024c4fcce79f9e560a870b0fd91114eaff0df1af0a5908742fbab3dee612d1d1a866998e9f1d10a587484e4baaf06b2f7cafd45
7
+ data.tar.gz: 7d88779cd59527ba500d8a2dcee0692a7135da88910d8045b276f32b635caee887b3fe2382a85fd6408b0e8cd57c58e0ca84495c99f912763a13f2b62e01dc78
@@ -1,4 +1,4 @@
1
- # Represents a feature flag returned by /decide v4
1
+ # Represents a feature flag returned by /flags v2
2
2
  class FeatureFlag
3
3
  attr_reader :key, :enabled, :variant, :reason, :metadata
4
4
 
@@ -51,26 +51,26 @@ class PostHog
51
51
 
52
52
  def get_feature_variants(distinct_id, groups={}, person_properties={}, group_properties={}, raise_on_error=false)
53
53
  # TODO: Convert to options hash for easier argument passing
54
- decide_data = get_all_flags_and_payloads(distinct_id, groups, person_properties, group_properties, false, raise_on_error)
55
- if !decide_data.key?(:featureFlags)
56
- logger.debug "Missing feature flags key: #{decide_data.to_json}"
54
+ flags_data = get_all_flags_and_payloads(distinct_id, groups, person_properties, group_properties, false, raise_on_error)
55
+ if !flags_data.key?(:featureFlags)
56
+ logger.debug "Missing feature flags key: #{flags_data.to_json}"
57
57
  {}
58
58
  else
59
- stringify_keys(decide_data[:featureFlags] || {})
59
+ stringify_keys(flags_data[:featureFlags] || {})
60
60
  end
61
61
  end
62
62
 
63
63
  def get_feature_payloads(distinct_id, groups = {}, person_properties = {}, group_properties = {}, only_evaluate_locally = false)
64
- decide_data = get_all_flags_and_payloads(distinct_id, groups, person_properties, group_properties)
65
- if !decide_data.key?(:featureFlagPayloads)
66
- logger.debug "Missing feature flag payloads key: #{decide_data.to_json}"
64
+ flags_data = get_all_flags_and_payloads(distinct_id, groups, person_properties, group_properties)
65
+ if !flags_data.key?(:featureFlagPayloads)
66
+ logger.debug "Missing feature flag payloads key: #{flags_data.to_json}"
67
67
  return {}
68
68
  else
69
- stringify_keys(decide_data[:featureFlagPayloads] || {})
69
+ stringify_keys(flags_data[:featureFlagPayloads] || {})
70
70
  end
71
71
  end
72
72
 
73
- def get_decide(distinct_id, groups={}, person_properties={}, group_properties={})
73
+ def get_flags(distinct_id, groups={}, person_properties={}, group_properties={})
74
74
  request_data = {
75
75
  "distinct_id": distinct_id,
76
76
  "groups": groups,
@@ -78,26 +78,26 @@ class PostHog
78
78
  "group_properties": group_properties,
79
79
  }
80
80
 
81
- decide_response = _request_feature_flag_evaluation(request_data)
81
+ flags_response = _request_feature_flag_evaluation(request_data)
82
82
 
83
83
  # Only normalize if we have flags in the response
84
- if decide_response[:flags]
84
+ if flags_response[:flags]
85
85
  #v4 format
86
- flags_hash = decide_response[:flags].transform_values do |flag|
86
+ flags_hash = flags_response[:flags].transform_values do |flag|
87
87
  FeatureFlag.new(flag)
88
88
  end
89
- decide_response[:flags] = flags_hash
90
- decide_response[:featureFlags] = flags_hash.transform_values(&:get_value).transform_keys(&:to_sym)
91
- decide_response[:featureFlagPayloads] = flags_hash.transform_values(&:payload).transform_keys(&:to_sym)
92
- elsif decide_response[:featureFlags]
89
+ flags_response[:flags] = flags_hash
90
+ flags_response[:featureFlags] = flags_hash.transform_values(&:get_value).transform_keys(&:to_sym)
91
+ flags_response[:featureFlagPayloads] = flags_hash.transform_values(&:payload).transform_keys(&:to_sym)
92
+ elsif flags_response[:featureFlags]
93
93
  #v3 format
94
- decide_response[:featureFlags] = decide_response[:featureFlags] || {}
95
- decide_response[:featureFlagPayloads] = decide_response[:featureFlagPayloads] || {}
96
- decide_response[:flags] = decide_response[:featureFlags].map do |key, value|
97
- [key, FeatureFlag.from_value_and_payload(key, value, decide_response[:featureFlagPayloads][key])]
94
+ flags_response[:featureFlags] = flags_response[:featureFlags] || {}
95
+ flags_response[:featureFlagPayloads] = flags_response[:featureFlagPayloads] || {}
96
+ flags_response[:flags] = flags_response[:featureFlags].map do |key, value|
97
+ [key, FeatureFlag.from_value_and_payload(key, value, flags_response[:featureFlagPayloads][key])]
98
98
  end.to_h
99
99
  end
100
- decide_response
100
+ flags_response
101
101
  end
102
102
 
103
103
  def get_remote_config_payload(flag_key)
@@ -143,13 +143,13 @@ class PostHog
143
143
 
144
144
  if !flag_was_locally_evaluated && !only_evaluate_locally
145
145
  begin
146
- decide_data = get_all_flags_and_payloads(distinct_id, groups, person_properties, group_properties, false, true)
147
- if !decide_data.key?(:featureFlags)
148
- logger.debug "Missing feature flags key: #{decide_data.to_json}"
146
+ flags_data = get_all_flags_and_payloads(distinct_id, groups, person_properties, group_properties, false, true)
147
+ if !flags_data.key?(:featureFlags)
148
+ logger.debug "Missing feature flags key: #{flags_data.to_json}"
149
149
  flags = {}
150
150
  else
151
- flags = stringify_keys(decide_data[:featureFlags] || {})
152
- request_id = decide_data[:requestId]
151
+ flags = stringify_keys(flags_data[:featureFlags] || {})
152
+ request_id = flags_data[:requestId]
153
153
  end
154
154
 
155
155
  response = flags[key]
@@ -167,7 +167,7 @@ class PostHog
167
167
 
168
168
  def get_all_flags(distinct_id, groups = {}, person_properties = {}, group_properties = {}, only_evaluate_locally = false)
169
169
  if @quota_limited.true?
170
- logger.debug "Not fetching flags from decide - quota limited"
170
+ logger.debug "Not fetching flags from server - quota limited"
171
171
  return {}
172
172
  end
173
173
  # returns a string hash of all flags
@@ -180,8 +180,8 @@ class PostHog
180
180
 
181
181
  flags = {}
182
182
  payloads = {}
183
- fallback_to_decide = @feature_flags.empty?
184
- request_id = nil # Only for /decide requests
183
+ fallback_to_server = @feature_flags.empty?
184
+ request_id = nil # Only for /flags requests
185
185
 
186
186
  @feature_flags.each do |flag|
187
187
  begin
@@ -192,15 +192,15 @@ class PostHog
192
192
  payloads[flag[:key]] = match_payload
193
193
  end
194
194
  rescue InconclusiveMatchError => e
195
- fallback_to_decide = true
195
+ fallback_to_server = true
196
196
  rescue StandardError => e
197
197
  @on_error.call(-1, "Error computing flag locally: #{e}. #{e.backtrace.join("\n")} ")
198
- fallback_to_decide = true
198
+ fallback_to_server = true
199
199
  end
200
200
  end
201
- if fallback_to_decide && !only_evaluate_locally
201
+ if fallback_to_server && !only_evaluate_locally
202
202
  begin
203
- flags_and_payloads = get_decide(distinct_id, groups, person_properties, group_properties)
203
+ flags_and_payloads = get_flags(distinct_id, groups, person_properties, group_properties)
204
204
 
205
205
  unless flags_and_payloads.key?(:featureFlags)
206
206
  raise StandardError.new("Error flags response: #{flags_and_payloads}")
@@ -240,8 +240,8 @@ class PostHog
240
240
  response = _compute_flag_payload_locally(key, match_value)
241
241
  end
242
242
  if response == nil and !only_evaluate_locally
243
- decide_payloads = get_feature_payloads(distinct_id, groups, person_properties, group_properties)
244
- response = decide_payloads[key.downcase] || nil
243
+ flags_payloads = get_feature_payloads(distinct_id, groups, person_properties, group_properties)
244
+ response = flags_payloads[key.downcase] || nil
245
245
  end
246
246
  response
247
247
  end
@@ -395,7 +395,7 @@ class PostHog
395
395
 
396
396
  if group_name.nil?
397
397
  logger.warn "[FEATURE FLAGS] Unknown group type index #{aggregation_group_type_index} for feature flag #{flag[:key]}"
398
- # failover to `/decide/`
398
+ # failover to `/flags/`
399
399
  raise InconclusiveMatchError.new("Flag has unknown group type index")
400
400
  end
401
401
 
@@ -403,7 +403,7 @@ class PostHog
403
403
 
404
404
  if !groups.key?(group_name_symbol)
405
405
  # Group flags are never enabled if appropriate `groups` aren't passed in
406
- # don't failover to `/decide/`, since response will be the same
406
+ # don't failover to `/flags/`, since response will be the same
407
407
  logger.warn "[FEATURE FLAGS] Can't compute group feature flag: #{flag[:key]} without group names passed in"
408
408
  return false
409
409
  end
@@ -566,7 +566,7 @@ class PostHog
566
566
  end
567
567
 
568
568
  def _request_feature_flag_evaluation(data={})
569
- uri = URI("#{@host}/decide/?v=4")
569
+ uri = URI("#{@host}/flags/?v=2")
570
570
  req = Net::HTTP::Post.new(uri)
571
571
  req['Content-Type'] = 'application/json'
572
572
  data['token'] = @project_api_key
@@ -1,3 +1,3 @@
1
1
  class PostHog
2
- VERSION = '2.8.1'
2
+ VERSION = '2.9.0'
3
3
  end
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posthog-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 2025-04-18 00:00:00.000000000 Z
11
+ date: 2025-04-30 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: concurrent-ruby
@@ -151,6 +152,7 @@ homepage: https://github.com/PostHog/posthog-ruby
151
152
  licenses:
152
153
  - MIT
153
154
  metadata: {}
155
+ post_install_message:
154
156
  rdoc_options: []
155
157
  require_paths:
156
158
  - lib
@@ -165,7 +167,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
167
  - !ruby/object:Gem::Version
166
168
  version: '0'
167
169
  requirements: []
168
- rubygems_version: 3.6.6
170
+ rubygems_version: 3.5.10
171
+ signing_key:
169
172
  specification_version: 4
170
173
  summary: PostHog library
171
174
  test_files: []