amplitude-experiment 1.2.4 → 1.2.6

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: 63ef7a08ffb4bb4b179da3f088c12598d2212ba7edd35a2f48ebb029420f33c0
4
- data.tar.gz: c46a6553343175e1bda5287907f565009217b58a97b611684eb5afe073ea58ab
3
+ metadata.gz: 2c2b4d645d6bc1a63154135eca42b2123dbaef5fb6597e77ea3c4d602235bbe7
4
+ data.tar.gz: b521d6b1f7af00b62fc9ec14e8c8e1db63a63b9330e8e73139fcf09ffb5f5dca
5
5
  SHA512:
6
- metadata.gz: f127b8d728912018fa3d4f2a96c091f474f71b38d5f4d72ca06076f52204c6999511a2e65f2f43ba1ad7ab4f92906ba3c827343bf7c1af0085d766b46df6f8ba
7
- data.tar.gz: 29d5c170df67401d9f43f8a2fa5c689693ef535cb4977aa799fc6c3d61194df304d203f2dfd5b921a8cb3ff0b32defeaa4b064d370886b410f2e4bc1260f03cb
6
+ metadata.gz: 68d5921c26baf78c5f1dcff97e4b58124e35f5be6de93b02be240e593c12f67d32ecba973ea95cb8df66908132c280a55e94d9be2025f351c536129663359570
7
+ data.tar.gz: 5a66ce54c1ed89ae0bef261578ad006151c34292805aa6cf68725b7a61085089de4a96769401a52631fb2a57a759d89b0b7fe6a2e570ca25af49415badd5a1c2
@@ -15,6 +15,7 @@ require 'experiment/local/assignment/assignment_service'
15
15
  require 'experiment/local/assignment/assignment_config'
16
16
  require 'experiment/util/lru_cache'
17
17
  require 'experiment/util/hash'
18
+ require 'experiment/error'
18
19
 
19
20
  # Amplitude Experiment Module
20
21
  module AmplitudeExperiment
@@ -0,0 +1,11 @@
1
+ module AmplitudeExperiment
2
+ # FetchError
3
+ class FetchError < StandardError
4
+ attr_reader :status_code
5
+
6
+ def initialize(status_code, message)
7
+ super(message)
8
+ @status_code = status_code
9
+ end
10
+ end
11
+ end
@@ -61,12 +61,14 @@ module AmplitudeExperiment
61
61
  do_fetch(user, @config.fetch_timeout_millis)
62
62
  rescue StandardError => e
63
63
  @logger.error("[Experiment] Fetch failed: #{e.message}")
64
- begin
65
- return retry_fetch(user)
66
- rescue StandardError => err
67
- @logger.error("[Experiment] Retry Fetch failed: #{err.message}")
64
+ if should_retry_fetch?(e)
65
+ begin
66
+ retry_fetch(user)
67
+ rescue StandardError => err
68
+ @logger.error("[Experiment] Retry Fetch failed: #{err.message}")
69
+ end
68
70
  end
69
- throw e
71
+ raise e
70
72
  end
71
73
 
72
74
  # @param [User] user
@@ -108,6 +110,8 @@ module AmplitudeExperiment
108
110
  end_time = Time.now
109
111
  elapsed = (end_time - start_time) * 1000.0
110
112
  @logger.debug("[Experiment] Fetch complete in #{elapsed.round(3)} ms")
113
+ raise FetchError.new(response.code.to_i, "Fetch error response: status=#{response.code} #{response.message}") if response.code != '200'
114
+
111
115
  json = JSON.parse(response.body)
112
116
  variants = parse_json_variants(json)
113
117
  @logger.debug("[Experiment] Fetched variants: #{variants}")
@@ -140,5 +144,11 @@ module AmplitudeExperiment
140
144
  user.library = "experiment-ruby-server/#{VERSION}"
141
145
  user
142
146
  end
147
+
148
+ def should_retry_fetch?(err)
149
+ return err.status_code < 400 || err.status_code >= 500 || err.status_code == 429 if err.is_a?(FetchError)
150
+
151
+ true
152
+ end
143
153
  end
144
154
  end
@@ -28,6 +28,10 @@ module AmplitudeExperiment
28
28
  # @return [String, nil] the value of dma
29
29
  attr_accessor :dma
30
30
 
31
+ # Predefined field, must be manually provided
32
+ # @return [String, nil] the value of ip address
33
+ attr_accessor :ip_address
34
+
31
35
  # Predefined field, must be manually provided
32
36
  # @return [String, nil] the value of language
33
37
  attr_accessor :language
@@ -74,6 +78,7 @@ module AmplitudeExperiment
74
78
  # @param [String, nil] city Predefined field, must be manually provided
75
79
  # @param [String, nil] region Predefined field, must be manually provided
76
80
  # @param [String, nil] dma Predefined field, must be manually provided
81
+ # @param [String, nil] ip_address Predefined field, must be manually provided
77
82
  # @param [String, nil] language Predefined field, must be manually provided
78
83
  # @param [String, nil] platform Predefined field, must be manually provided
79
84
  # @param [String, nil] version Predefined field, must be manually provided
@@ -84,7 +89,7 @@ module AmplitudeExperiment
84
89
  # @param [String, nil] carrier Predefined field, must be manually provided
85
90
  # @param [String, nil] library Predefined field, auto populated, can be manually overridden
86
91
  # @param [Hash, nil] user_properties Custom user properties
87
- def initialize(device_id: nil, user_id: nil, country: nil, city: nil, region: nil, dma: nil, language: nil,
92
+ def initialize(device_id: nil, user_id: nil, country: nil, city: nil, region: nil, dma: nil, ip_address: nil, language: nil,
88
93
  platform: nil, version: nil, os: nil, device_manufacturer: nil, device_brand: nil,
89
94
  device_model: nil, carrier: nil, library: nil, user_properties: nil)
90
95
  @device_id = device_id
@@ -93,6 +98,7 @@ module AmplitudeExperiment
93
98
  @city = city
94
99
  @region = region
95
100
  @dma = dma
101
+ @ip_address = ip_address
96
102
  @language = language
97
103
  @platform = platform
98
104
  @version = version
@@ -115,6 +121,7 @@ module AmplitudeExperiment
115
121
  city: @city,
116
122
  region: @region,
117
123
  dma: @dma,
124
+ ip_address: @ip_address,
118
125
  language: @language,
119
126
  platform: @platform,
120
127
  version: @version,
@@ -1,3 +1,3 @@
1
1
  module AmplitudeExperiment
2
- VERSION = '1.2.4'.freeze
2
+ VERSION = '1.2.6'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amplitude-experiment
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amplitude
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-17 00:00:00.000000000 Z
11
+ date: 2024-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -176,6 +176,7 @@ files:
176
176
  - lib/amplitude/utils.rb
177
177
  - lib/amplitude/workers.rb
178
178
  - lib/experiment/cookie.rb
179
+ - lib/experiment/error.rb
179
180
  - lib/experiment/factory.rb
180
181
  - lib/experiment/local/assignment/assignment.rb
181
182
  - lib/experiment/local/assignment/assignment_config.rb