growthbook 1.1.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d90d8442599a6a64a434b33a4a2c094cc13e3deff03d4d0a19f8701a9672f772
4
- data.tar.gz: b5dd4a070d27bfabd3400fc10f88c500c581308397437089710e9a67e1bc8b4a
3
+ metadata.gz: cba2938ec675b1626d643fb7493223a54d0faf1ffc37c2bacb5a06637c0a75cd
4
+ data.tar.gz: bce59918f346b53182450ec2fdd92776767954712334bc5b7c0bd48d952c05ce
5
5
  SHA512:
6
- metadata.gz: d43c5699fcc64b29c7805f08047bb430aac85a76f79bdc6163970b8993e2a307979e427621603c9481d10b508915a7ebf484c389a2414f6a05e5420d3b9295e8
7
- data.tar.gz: 52ff8761dc58407af265eb3f956393ccfc717be0856b3e89620cf43d8e993cf2ed723b25c2d557e6ee80309202b6286742850928576a2ee4188e9454da95f691
6
+ metadata.gz: 0c4ac9f40b23c8719b9cb585d92f089144df5441c787321fd0083ae72ff954f5f8027615cc3d226dcdb7c2bfdc3dc5911ef1abd472904c026a3e24c1dd81230c
7
+ data.tar.gz: 735bfc1c4b82432a4a9b0664282062f43ab644309933afcddb43c9dc53cd32a278d1cf14221ad9b298a0bbdb0e2a12a8e77c4aa814d8ba3719e7840c62a4d09a
@@ -15,6 +15,9 @@ module Growthbook
15
15
  # @return [Growthbook::TrackingCallback] An object that responds to `on_experiment_viewed(GrowthBook::InlineExperiment, GrowthBook::InlineExperimentResult)`
16
16
  attr_accessor :listener
17
17
 
18
+ # @return [Growthbook::FeatureUsageCallback] An object that responds to `on_feature_usage(String, Growthbook::FeatureResult)`
19
+ attr_accessor :on_feature_usage
20
+
18
21
  # @return [Hash] Map of user attributes that are used to assign variations
19
22
  attr_reader :attributes
20
23
 
@@ -61,6 +64,8 @@ module Growthbook
61
64
  @qa_mode = value
62
65
  when :listener
63
66
  @listener = value
67
+ when :on_feature_usage
68
+ @on_feature_usage = value
64
69
  else
65
70
  warn("Unknown context option: #{key}")
66
71
  end
@@ -94,11 +99,11 @@ module Growthbook
94
99
 
95
100
  def eval_feature(key)
96
101
  # Forced in the context
97
- return get_feature_result(@forced_features[key.to_s], 'override', nil, nil) if @forced_features.key?(key.to_s)
102
+ return get_feature_result(key.to_s, @forced_features[key.to_s], 'override', nil, nil) if @forced_features.key?(key.to_s)
98
103
 
99
104
  # Return if we can't find the feature definition
100
105
  feature = get_feature(key)
101
- return get_feature_result(nil, 'unknownFeature', nil, nil) unless feature
106
+ return get_feature_result(key.to_s, nil, 'unknownFeature', nil, nil) unless feature
102
107
 
103
108
  feature.rules.each do |rule|
104
109
  # Targeting condition
@@ -120,7 +125,7 @@ module Growthbook
120
125
  )
121
126
  next unless included_in_rollout
122
127
 
123
- return get_feature_result(rule.force, 'force', nil, nil)
128
+ return get_feature_result(key.to_s, rule.force, 'force', nil, nil)
124
129
  end
125
130
  # Experiment rule
126
131
  next unless rule.experiment?
@@ -132,11 +137,11 @@ module Growthbook
132
137
 
133
138
  next unless result.in_experiment && !result.passthrough
134
139
 
135
- return get_feature_result(result.value, 'experiment', exp, result)
140
+ return get_feature_result(key.to_s, result.value, 'experiment', exp, result)
136
141
  end
137
142
 
138
143
  # Fallback
139
- get_feature_result(feature.default_value.nil? ? nil : feature.default_value, 'defaultValue', nil, nil)
144
+ get_feature_result(key.to_s, feature.default_value.nil? ? nil : feature.default_value, 'defaultValue', nil, nil)
140
145
  end
141
146
 
142
147
  def run(exp)
@@ -285,8 +290,19 @@ module Growthbook
285
290
  result
286
291
  end
287
292
 
288
- def get_feature_result(value, source, experiment, experiment_result)
289
- Growthbook::FeatureResult.new(value, source, experiment, experiment_result)
293
+ def get_feature_result(key, value, source, experiment, experiment_result)
294
+ res = Growthbook::FeatureResult.new(value, source, experiment, experiment_result)
295
+
296
+ track_feature_usage(key, res)
297
+
298
+ res
299
+ end
300
+
301
+ def track_feature_usage(key, feature_result)
302
+ return unless on_feature_usage.respond_to?(:on_feature_usage)
303
+ return if feature_result.source == 'override'
304
+
305
+ on_feature_usage.on_feature_usage(key, feature_result)
290
306
  end
291
307
 
292
308
  def get_feature(key)
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Growthbook
4
+ # Extendable class that can be used as the feature usage callback
5
+ class FeatureUsageCallback
6
+ def on_feature_usage(_feature_key, _result); end
7
+ end
8
+ end
data/lib/growthbook.rb CHANGED
@@ -16,3 +16,4 @@ require 'growthbook/inline_experiment'
16
16
  require 'growthbook/inline_experiment_result'
17
17
  require 'growthbook/tracking_callback'
18
18
  require 'growthbook/util'
19
+ require 'growthbook/feature_usage_callback'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: growthbook
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - GrowthBook
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-21 00:00:00.000000000 Z
11
+ date: 2023-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -94,6 +94,7 @@ files:
94
94
  - lib/growthbook/feature_repository.rb
95
95
  - lib/growthbook/feature_result.rb
96
96
  - lib/growthbook/feature_rule.rb
97
+ - lib/growthbook/feature_usage_callback.rb
97
98
  - lib/growthbook/fnv.rb
98
99
  - lib/growthbook/inline_experiment.rb
99
100
  - lib/growthbook/inline_experiment_result.rb