vwo-sdk 1.23.0 → 1.24.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vwo/constants.rb +1 -1
- data/lib/vwo/core/variation_decider.rb +20 -8
- data/lib/vwo/enums.rb +5 -6
- data/lib/vwo/schemas/settings_file.rb +4 -0
- data/lib/vwo/services/settings_file_manager.rb +3 -1
- data/lib/vwo/utils/custom_dimensions.rb +3 -1
- data/lib/vwo/utils/impression.rb +4 -2
- data/lib/vwo/utils/utility.rb +6 -0
- data/lib/vwo.rb +8 -50
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68dad84f9b03958ca980c9f9ef2dc91faabdf57bfc33a55baaf5316123eb010b
|
4
|
+
data.tar.gz: de01033026fe5f493d7a6a1419c65a60f41a43ac85526a4f16f90448ff31a3bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81bfc307f0aa0482c3426edd657ac960fde1d95843401e1f583dc96b6785ef3c6e59f10b1d577424da40d956cd792618275a4451c1f4dc4dff3458454d15f238
|
7
|
+
data.tar.gz: 1f8dadef134e4064962bf606b43de36f9b4e4d4ed00c932948b56ab45960e430e42b20edb9e2eae65709091067dce162959165028698d0010ff767657887f1fd
|
data/lib/vwo/constants.rb
CHANGED
@@ -27,7 +27,7 @@ class VWO
|
|
27
27
|
HTTP_PROTOCOL = 'http://'
|
28
28
|
HTTPS_PROTOCOL = 'https://'
|
29
29
|
URL_NAMESPACE = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'
|
30
|
-
SDK_VERSION = '1.
|
30
|
+
SDK_VERSION = '1.24.1'
|
31
31
|
SDK_NAME = 'ruby'
|
32
32
|
VWO_DELIMITER = '_vwo_'
|
33
33
|
MAX_EVENTS_PER_REQUEST = 5000
|
@@ -95,6 +95,10 @@ class VWO
|
|
95
95
|
:vwo_user_id => generator_for(user_id, @settings_file['accountId'])
|
96
96
|
}
|
97
97
|
|
98
|
+
if campaign.has_key?("name")
|
99
|
+
decision[:campaign_name] = campaign['name']
|
100
|
+
end
|
101
|
+
|
98
102
|
if is_campaign_part_of_group
|
99
103
|
group_id = @settings_file["campaignGroups"][campaign["id"].to_s]
|
100
104
|
decision[:group_id] = group_id
|
@@ -459,10 +463,19 @@ class VWO
|
|
459
463
|
# @return[Hash]
|
460
464
|
|
461
465
|
def evaluate_whitelisting(user_id, campaign, api_name, campaign_key, variation_targeting_variables = {}, disable_logs = false)
|
462
|
-
if
|
463
|
-
|
466
|
+
if campaign.key?('isUserListEnabled') && campaign["isUserListEnabled"]
|
467
|
+
vwo_user_id = generator_for(user_id, @settings_file['accountId'])
|
468
|
+
if variation_targeting_variables.nil?
|
469
|
+
variation_targeting_variables = { _vwo_user_id: vwo_user_id }
|
470
|
+
else
|
471
|
+
variation_targeting_variables[:_vwo_user_id] = vwo_user_id
|
472
|
+
end
|
464
473
|
else
|
465
|
-
variation_targeting_variables
|
474
|
+
if variation_targeting_variables.nil?
|
475
|
+
variation_targeting_variables = { _vwo_user_id: user_id }
|
476
|
+
else
|
477
|
+
variation_targeting_variables[:_vwo_user_id] = user_id
|
478
|
+
end
|
466
479
|
end
|
467
480
|
targeted_variations = []
|
468
481
|
|
@@ -485,7 +498,7 @@ class VWO
|
|
485
498
|
user_id: user_id,
|
486
499
|
status: status,
|
487
500
|
custom_variables: variation_targeting_variables,
|
488
|
-
variation_name: variation['name'],
|
501
|
+
variation_name: status == StatusEnum::PASSED ? (campaign['type'] == CampaignTypes::FEATURE_ROLLOUT ? 'and hence becomes part of the rollout' : "for " + variation['name']) : '',
|
489
502
|
segmentation_type: SegmentationTypeEnum::WHITELISTING,
|
490
503
|
api_name: api_name
|
491
504
|
),
|
@@ -865,8 +878,8 @@ class VWO
|
|
865
878
|
campaign_key: campaign_key,
|
866
879
|
user_id: user_id,
|
867
880
|
status: status,
|
868
|
-
custom_variables: variation_targeting_variables,
|
869
|
-
variation_name: status == StatusEnum::PASSED ? "and #{variation['name']} is Assigned" : ' ',
|
881
|
+
custom_variables: variation_targeting_variables ? variation_targeting_variables : {},
|
882
|
+
variation_name: (status == StatusEnum::PASSED && campaign['type'] != CampaignTypes::FEATURE_ROLLOUT) ? "and #{variation['name']} is Assigned" : ' ',
|
870
883
|
segmentation_type: SegmentationTypeEnum::WHITELISTING,
|
871
884
|
api_name: api_name
|
872
885
|
),
|
@@ -879,10 +892,9 @@ class VWO
|
|
879
892
|
decision[:variation_id] = variation['id']
|
880
893
|
if campaign['type'] == CampaignTypes::FEATURE_TEST
|
881
894
|
decision[:is_feature_enabled] = variation['isFeatureEnabled']
|
882
|
-
elsif campaign['type'] == CampaignTypes::VISUAL_AB
|
883
|
-
decision[:is_user_whitelisted] = !!variation['name']
|
884
895
|
end
|
885
896
|
end
|
897
|
+
decision[:is_user_whitelisted] = true
|
886
898
|
@hooks_manager.execute(decision)
|
887
899
|
end
|
888
900
|
|
data/lib/vwo/enums.rb
CHANGED
@@ -106,7 +106,7 @@ class VWO
|
|
106
106
|
IMPRESSION_FOR_TRACK_USER = '(%<file>s): Impression built for track-user - %<properties>s'
|
107
107
|
IMPRESSION_FOR_TRACK_GOAL = '(%<file>s): Impression built for track-goal - %<properties>s'
|
108
108
|
GOT_VARIATION_FOR_USER = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s got variationName:%<variation_name>s'
|
109
|
-
SEGMENTATION_STATUS = '(%<file>s): In API: %<api_name>s, for UserId:%<user_id>s of campaign:%<campaign_key>s with variables:%<custom_variables>s %<status>s %<segmentation_type>s
|
109
|
+
SEGMENTATION_STATUS = '(%<file>s): In API: %<api_name>s, for UserId:%<user_id>s of campaign:%<campaign_key>s with variables:%<custom_variables>s %<status>s %<segmentation_type>s %<variation_name>s'
|
110
110
|
PARAMS_FOR_PUSH_CALL = '(%<file>s): Params for push call - %<properties>s'
|
111
111
|
CAMPAIGN_NOT_ACTIVATED = '(%<file>s): Campaign:%<campaign_key>s for User ID:%<user_id>s is not yet activated for API:%<api_name>s. Use activate API to activate A/B test or isFeatureEnabled API to activate Feature Test.'
|
112
112
|
BATCH_EVENT_LIMIT_EXCEEDED = '(%<file>s): Impression event - %<end_point>s failed due to exceeding payload size. Parameter eventsPerRequest in batchEvents config in launch API has value:%<eventsPerRequest>s for accountId:%<accountId>s. Please read the official documentation for knowing the size limits.'
|
@@ -128,9 +128,9 @@ class VWO
|
|
128
128
|
AUDIENCE_CONDITION_NOT_MET = '(%<file>s): userId:%<user_id>s does not become part of campaign because of not meeting audience conditions'
|
129
129
|
GOT_VARIATION_FOR_USER = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s got variationName:%<variation_name>s'
|
130
130
|
USER_GOT_NO_VARIATION = '(%<file>s): userId:%<user_id>s for campaign:%<campaign_key>s did not allot any variation'
|
131
|
-
IMPRESSION_SUCCESS = '(%<file>s): Impression event - %<end_point>s was successfully received by VWO having main keys:
|
132
|
-
MAIN_KEYS_FOR_IMPRESSION = '(%<file>s): Having main keys:
|
133
|
-
MAIN_KEYS_FOR_PUSH_API = '(%<file>s): Having main keys:
|
131
|
+
IMPRESSION_SUCCESS = '(%<file>s): Impression event - %<end_point>s was successfully received by VWO having main keys: accountId:%<account_id>s campaignId:%<campaign_id>s and variationId:%<variation_id>s'
|
132
|
+
MAIN_KEYS_FOR_IMPRESSION = '(%<file>s): Having main keys: accountId:%<account_id>s campaignId:%<campaign_id>s and variationId:%<variation_id>s}'
|
133
|
+
MAIN_KEYS_FOR_PUSH_API = '(%<file>s): Having main keys: accountId:%<account_id>s u:%<u>s and tags:%<tags>s}'
|
134
134
|
INVALID_VARIATION_KEY = '(%<file>s): Variation was not assigned to userId:%<user_id>s for campaign:%<campaign_key>s'
|
135
135
|
|
136
136
|
USER_IN_FEATURE_ROLLOUT = '(%<file>s): User ID:%<user_id>s is in feature rollout:%<campaign_key>s'
|
@@ -143,7 +143,7 @@ class VWO
|
|
143
143
|
USER_PASSED_SEGMENTATION = '(%<file>s): UserId:%<user_id>s of campaign:%<campaign_key>s with custom_variables:%<custom_variables>s passed segmentation'
|
144
144
|
USER_FAILED_SEGMENTATION = '(%<file>s): UserId:%<user_id>s of campaign:%<campaign_key>s with custom_variables:%<custom_variables>s failed segmentation'
|
145
145
|
|
146
|
-
NO_CUSTOM_VARIABLES = '(%<file>s): In API: %<api_name>s, for UserId:%<user_id>s
|
146
|
+
NO_CUSTOM_VARIABLES = '(%<file>s): In API: %<api_name>s, for UserId:%<user_id>s customVariables are not passed for campaign:%<campaign_key>s and campaign has pre-segmentation'
|
147
147
|
SKIPPING_SEGMENTATION = '(%<file>s): In API: %<api_name>s, Skipping segmentation:%<variation>s for UserId:%<user_id>s as no valid segments found in campaign:%<campaign_key>s'
|
148
148
|
|
149
149
|
SEGMENTATION_STATUS = '(%<file>s): In API: %<api_name>s, for UserId:%<user_id>s of campaign:%<campaign_key>s with variables:%<custom_variables>s %<status>s %<segmentation_type>s %<variation_name>s'
|
@@ -201,7 +201,6 @@ class VWO
|
|
201
201
|
TAG_KEY_LENGTH_EXCEEDED = '(%<file>s): In API: %<api_name>s, the length of tag_key:%<tag_key>s and userID: %<user_id>s can not be greater than 255'
|
202
202
|
TRACK_API_MISSING_PARAMS = '(%<file>s): "track" API got bad parameters. It expects campaignKey(null/String/array) as first, userId(String/Number) as second and goalIdentifier (string) as third argument. options is revenueValue(Float/Number/String) and is required for revenue goal only.'
|
203
203
|
NO_CAMPAIGN_FOUND = '(%<file>s): No campaign found for goal_identifier:%<goal_identifier>s. Please verify from VWO app.'
|
204
|
-
INVALID_TRACK_RETURNING_USER_VALUE = '(%<file>s): should_track_returning_user should be boolean'
|
205
204
|
INVALID_GOAL_TYPE = '(%<file>s): goal_type_to_track should be certain strings'
|
206
205
|
EVENT_BATCHING_NOT_OBJECT = '(%<file>s): Batch events settings are not of type object.'
|
207
206
|
EVENTS_PER_REQUEST_INVALID = '(%<file>s): events_per_request should be an integer'
|
@@ -73,6 +73,9 @@ class VWO
|
|
73
73
|
key: {
|
74
74
|
type: ['string']
|
75
75
|
},
|
76
|
+
name: {
|
77
|
+
type: ['string']
|
78
|
+
},
|
76
79
|
status: {
|
77
80
|
type: ['string']
|
78
81
|
},
|
@@ -92,6 +95,7 @@ class VWO
|
|
92
95
|
}
|
93
96
|
},
|
94
97
|
isBucketingSeedEnabled: ['boolean'],
|
98
|
+
isUserListEnabled: ['boolean'],
|
95
99
|
minItems: 2
|
96
100
|
}
|
97
101
|
},
|
@@ -17,6 +17,7 @@ require_relative '../logger'
|
|
17
17
|
require_relative '../enums'
|
18
18
|
require_relative '../constants'
|
19
19
|
require_relative './impression'
|
20
|
+
require_relative './utility'
|
20
21
|
|
21
22
|
# Utility module for helper math and random functions
|
22
23
|
class VWO
|
@@ -25,6 +26,7 @@ class VWO
|
|
25
26
|
include VWO::CONSTANTS
|
26
27
|
include VWO::Enums
|
27
28
|
include VWO::Utils::Impression
|
29
|
+
include VWO::Utils::Utility
|
28
30
|
|
29
31
|
def get_url_params(settings_file, tag_key, tag_value, user_id, sdk_key)
|
30
32
|
url = HTTPS_PROTOCOL + ENDPOINTS::BASE_URL + ENDPOINTS::PUSH
|
@@ -39,7 +41,7 @@ class VWO
|
|
39
41
|
format(
|
40
42
|
LogMessageEnum::DebugMessages::PARAMS_FOR_PUSH_CALL,
|
41
43
|
file: FileNameEnum::CustomDimensionsUtil,
|
42
|
-
properties:
|
44
|
+
properties: remove_sensitive_properties(params)
|
43
45
|
)
|
44
46
|
)
|
45
47
|
params
|
data/lib/vwo/utils/impression.rb
CHANGED
@@ -19,6 +19,7 @@ require_relative '../enums'
|
|
19
19
|
require_relative '../constants'
|
20
20
|
require_relative 'function'
|
21
21
|
require_relative 'uuid'
|
22
|
+
require_relative 'utility'
|
22
23
|
|
23
24
|
# Creates the impression from the arguments passed
|
24
25
|
class VWO
|
@@ -28,6 +29,7 @@ class VWO
|
|
28
29
|
include VWO::CONSTANTS
|
29
30
|
include VWO::Utils::Function
|
30
31
|
include UUID
|
32
|
+
include VWO::Utils::Utility
|
31
33
|
|
32
34
|
# Creates the impression from the arguments passed
|
33
35
|
#
|
@@ -76,7 +78,7 @@ class VWO
|
|
76
78
|
format(
|
77
79
|
LogMessageEnum::DebugMessages::IMPRESSION_FOR_TRACK_USER,
|
78
80
|
file: FileNameEnum::ImpressionUtil,
|
79
|
-
properties:
|
81
|
+
properties: remove_sensitive_properties(impression)
|
80
82
|
)
|
81
83
|
)
|
82
84
|
else
|
@@ -88,7 +90,7 @@ class VWO
|
|
88
90
|
format(
|
89
91
|
LogMessageEnum::DebugMessages::IMPRESSION_FOR_TRACK_GOAL,
|
90
92
|
file: FileNameEnum::ImpressionUtil,
|
91
|
-
properties:
|
93
|
+
properties: remove_sensitive_properties(impression)
|
92
94
|
)
|
93
95
|
)
|
94
96
|
end
|
data/lib/vwo/utils/utility.rb
CHANGED
data/lib/vwo.rb
CHANGED
@@ -89,25 +89,6 @@ class VWO
|
|
89
89
|
return
|
90
90
|
end
|
91
91
|
|
92
|
-
if options.key?(:should_track_returning_user)
|
93
|
-
if [true, false].include? options[:should_track_returning_user]
|
94
|
-
@should_track_returning_user = options[:should_track_returning_user]
|
95
|
-
usage_stats[:tr] = 1 if @should_track_returning_user
|
96
|
-
else
|
97
|
-
@logger.log(
|
98
|
-
LogLevelEnum::ERROR,
|
99
|
-
format(
|
100
|
-
LogMessageEnum::ErrorMessages::INVALID_TRACK_RETURNING_USER_VALUE,
|
101
|
-
file: FILE
|
102
|
-
)
|
103
|
-
)
|
104
|
-
@is_instance_valid = false
|
105
|
-
return
|
106
|
-
end
|
107
|
-
else
|
108
|
-
@should_track_returning_user = false
|
109
|
-
end
|
110
|
-
|
111
92
|
if options.key?(:goal_type_to_track)
|
112
93
|
if GOAL_TYPES.key? options[:goal_type_to_track]
|
113
94
|
@goal_type_to_track = options[:goal_type_to_track]
|
@@ -303,10 +284,9 @@ class VWO
|
|
303
284
|
custom_variables = options[:custom_variables]
|
304
285
|
variation_targeting_variables = options[:variation_targeting_variables]
|
305
286
|
|
306
|
-
should_track_returning_user = get_should_track_returning_user(options)
|
307
287
|
# Validate input parameters
|
308
288
|
unless valid_string?(campaign_key) && valid_string?(user_id) && (custom_variables.nil? || valid_hash?(custom_variables)) &&
|
309
|
-
(variation_targeting_variables.nil? || valid_hash?(variation_targeting_variables))
|
289
|
+
(variation_targeting_variables.nil? || valid_hash?(variation_targeting_variables))
|
310
290
|
@logger.log(
|
311
291
|
LogLevelEnum::ERROR,
|
312
292
|
format(
|
@@ -381,7 +361,7 @@ class VWO
|
|
381
361
|
return
|
382
362
|
end
|
383
363
|
|
384
|
-
if is_eligible_to_send_impression(
|
364
|
+
if is_eligible_to_send_impression()
|
385
365
|
if defined?(@batch_events)
|
386
366
|
impression = create_bulk_event_impression(
|
387
367
|
@settings_file,
|
@@ -408,7 +388,6 @@ class VWO
|
|
408
388
|
format(
|
409
389
|
LogMessageEnum::InfoMessages::IMPRESSION_SUCCESS,
|
410
390
|
file: FILE,
|
411
|
-
sdk_key: @sdk_key,
|
412
391
|
account_id: @account_id,
|
413
392
|
campaign_id: campaign['id'],
|
414
393
|
variation_id: variation['id'],
|
@@ -588,12 +567,11 @@ class VWO
|
|
588
567
|
revenue_value = options[:revenue_value]
|
589
568
|
custom_variables = options[:custom_variables]
|
590
569
|
variation_targeting_variables = options[:variation_targeting_variables]
|
591
|
-
should_track_returning_user = get_should_track_returning_user(options)
|
592
570
|
goal_type_to_track = get_goal_type_to_track(options)
|
593
571
|
|
594
572
|
# Check for valid args
|
595
573
|
unless (valid_string?(campaign_key) || campaign_key.is_a?(Array) || campaign_key.nil?) && valid_string?(user_id) && valid_string?(goal_identifier) && (custom_variables.nil? || valid_hash?(custom_variables)) &&
|
596
|
-
(variation_targeting_variables.nil? || valid_hash?(variation_targeting_variables)) &&
|
574
|
+
(variation_targeting_variables.nil? || valid_hash?(variation_targeting_variables)) && (GOAL_TYPES.key? (goal_type_to_track))
|
597
575
|
# log invalid params
|
598
576
|
@logger.log(
|
599
577
|
LogLevelEnum::ERROR,
|
@@ -683,7 +661,7 @@ class VWO
|
|
683
661
|
updated_goal_identifier += VWO_DELIMITER + goal_identifier
|
684
662
|
@variation_decider.save_user_storage(user_id, campaign['key'], campaign['name'], variation['name'], updated_goal_identifier) if variation['name']
|
685
663
|
# set variation at user storage
|
686
|
-
|
664
|
+
else
|
687
665
|
@logger.log(
|
688
666
|
LogLevelEnum::INFO,
|
689
667
|
format(
|
@@ -725,7 +703,6 @@ class VWO
|
|
725
703
|
format(
|
726
704
|
LogMessageEnum::InfoMessages::IMPRESSION_SUCCESS,
|
727
705
|
file: FILE,
|
728
|
-
sdk_key: @sdk_key,
|
729
706
|
account_id: @account_id,
|
730
707
|
campaign_id: campaign['id'],
|
731
708
|
variation_id: variation['id'],
|
@@ -737,7 +714,6 @@ class VWO
|
|
737
714
|
format(
|
738
715
|
LogMessageEnum::InfoMessages::MAIN_KEYS_FOR_IMPRESSION,
|
739
716
|
file: FILE,
|
740
|
-
sdk_key: @sdk_key,
|
741
717
|
campaign_id: impression[:experiment_id],
|
742
718
|
account_id: impression[:account_id],
|
743
719
|
variation_id: impression[:combination]
|
@@ -809,7 +785,6 @@ class VWO
|
|
809
785
|
# Retrieve custom variables
|
810
786
|
custom_variables = options[:custom_variables]
|
811
787
|
variation_targeting_variables = options[:variation_targeting_variables]
|
812
|
-
should_track_returning_user = get_should_track_returning_user(options)
|
813
788
|
@logger.log(
|
814
789
|
LogLevelEnum::INFO,
|
815
790
|
format(
|
@@ -821,7 +796,7 @@ class VWO
|
|
821
796
|
)
|
822
797
|
# Validate input parameters
|
823
798
|
unless valid_string?(campaign_key) && valid_string?(user_id) && (custom_variables.nil? || valid_hash?(custom_variables)) &&
|
824
|
-
(variation_targeting_variables.nil? || valid_hash?(variation_targeting_variables))
|
799
|
+
(variation_targeting_variables.nil? || valid_hash?(variation_targeting_variables))
|
825
800
|
@logger.log(
|
826
801
|
LogLevelEnum::ERROR,
|
827
802
|
format(
|
@@ -877,7 +852,7 @@ class VWO
|
|
877
852
|
|
878
853
|
# if campaign type is feature_test Send track call to server
|
879
854
|
|
880
|
-
if is_eligible_to_send_impression(
|
855
|
+
if is_eligible_to_send_impression()
|
881
856
|
if defined?(@batch_events)
|
882
857
|
impression = create_bulk_event_impression(
|
883
858
|
@settings_file,
|
@@ -905,7 +880,6 @@ class VWO
|
|
905
880
|
LogMessageEnum::InfoMessages::MAIN_KEYS_FOR_IMPRESSION,
|
906
881
|
file: FILE,
|
907
882
|
campaign_id: impression[:experiment_id],
|
908
|
-
sdk_key: @sdk_key,
|
909
883
|
account_id: impression[:account_id],
|
910
884
|
variation_id: impression[:combination]
|
911
885
|
)
|
@@ -1206,7 +1180,6 @@ class VWO
|
|
1206
1180
|
format(
|
1207
1181
|
LogMessageEnum::InfoMessages::MAIN_KEYS_FOR_PUSH_API,
|
1208
1182
|
file: FILE,
|
1209
|
-
sdk_key: @sdk_key,
|
1210
1183
|
u: impression['u'],
|
1211
1184
|
account_id: impression['account_id'],
|
1212
1185
|
tags: impression['tags']
|
@@ -1227,23 +1200,8 @@ class VWO
|
|
1227
1200
|
false
|
1228
1201
|
end
|
1229
1202
|
|
1230
|
-
def
|
1231
|
-
|
1232
|
-
options[:should_track_returning_user] = @should_track_returning_user
|
1233
|
-
elsif ![true, false].include?(options[:should_track_returning_user])
|
1234
|
-
@logger.log(
|
1235
|
-
LogLevelEnum::ERROR,
|
1236
|
-
format(
|
1237
|
-
LogMessageEnum::ErrorMessages::INVALID_TRACK_RETURNING_USER_VALUE,
|
1238
|
-
file: FILE
|
1239
|
-
)
|
1240
|
-
)
|
1241
|
-
end
|
1242
|
-
options[:should_track_returning_user]
|
1243
|
-
end
|
1244
|
-
|
1245
|
-
def is_eligible_to_send_impression(should_track_returning_user = false)
|
1246
|
-
!@user_storage || !@variation_decider.has_stored_variation || should_track_returning_user
|
1203
|
+
def is_eligible_to_send_impression()
|
1204
|
+
!@user_storage || !@variation_decider.has_stored_variation
|
1247
1205
|
end
|
1248
1206
|
|
1249
1207
|
def flush_events
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vwo-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.24.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- VWO
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: codecov
|