amplitude-experiment 1.2.4 → 1.2.6

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: 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