Skip to content

Commit

Permalink
fix(bucketer.rb): read bucketing flag correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
Abbas-khaliq authored and softvar committed Mar 9, 2022
1 parent 7e3eaec commit 8826512
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 8 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.30.0] - 2022-09-03

### Changed

- Reading `isBucketingSeedEnabled` flag correctly so that campaign-id will be used for bucketing a user when this flag value is truthy.

## [1.29.1] - 2022-02-25

### Changed
Expand Down
2 changes: 1 addition & 1 deletion lib/vwo/constants.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ module CONSTANTS
HTTP_PROTOCOL = 'http://'
HTTPS_PROTOCOL = 'https://'
URL_NAMESPACE = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'
SDK_VERSION = '1.29.1'
SDK_VERSION = '1.30.0'
SDK_NAME = 'ruby'
VWO_DELIMITER = '_vwo_'
MAX_EVENTS_PER_REQUEST = 5000
Expand Down
8 changes: 4 additions & 4 deletions lib/vwo/core/bucketer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ def bucket_user_to_variation(user_id, campaign)
end

user_id_for_hash_value = user_id
if campaign[:isBucketingSeedEnabled]
user_id_for_hash_value = campaign[:id].to_s + "_" + user_id
if campaign['isBucketingSeedEnabled']
user_id_for_hash_value = campaign['id'].to_s + "_" + user_id
end
hash_value = MurmurHash3::V32.str_hash(user_id_for_hash_value, SEED_VALUE) & U_MAX_32_BIT
normalize = MAX_TRAFFIC_VALUE.to_f / campaign['percentTraffic']
Expand Down Expand Up @@ -147,8 +147,8 @@ def get_bucket_value_for_user(user_id, campaign = {}, group_id = nil, disable_lo
user_id_for_hash_value = user_id
if group_id
user_id_for_hash_value = group_id.to_s + "_" + user_id
elsif campaign[:isBucketingSeedEnabled]
user_id_for_hash_value = campaign[:id].to_s + "_" + user_id
elsif campaign['isBucketingSeedEnabled']
user_id_for_hash_value = campaign['id'].to_s + "_" + user_id
end
hash_value = MurmurHash3::V32.str_hash(user_id_for_hash_value, SEED_VALUE) & U_MAX_32_BIT
bucket_value = get_bucket_value(hash_value, MAX_TRAFFIC_PERCENT)
Expand Down
26 changes: 23 additions & 3 deletions tests/test_bucketer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -118,20 +118,40 @@ def test_get_variation_return_none
end

def test_get_bucket_value_for_user_25_someonemailcom
campaign = {id: 1, isBucketingSeedEnabled: true}
campaign = {'id' => 1, 'isBucketingSeedEnabled' => true}
bucket_value = @bucketer.get_bucket_value_for_user("[email protected]", campaign)
assert_equal(bucket_value, 25)

campaign[:isBucketingSeedEnabled] = false
campaign['isBucketingSeedEnabled'] = false
bucket_value = @bucketer.get_bucket_value_for_user("[email protected]", campaign)
assert_equal(bucket_value, 64)
end

def test_get_bucket_value_for_user_1111111111111111
campaign = {id: 1, isBucketingSeedEnabled: true}
campaign = {'id' => 1, 'isBucketingSeedEnabled' => true}
bucket_value = @bucketer.get_bucket_value_for_user("1111111111111111", campaign)
assert_equal(bucket_value, 82)

campaign['isBucketingSeedEnabled'] = false
bucket_value = @bucketer.get_bucket_value_for_user("1111111111111111", campaign)
assert_equal(bucket_value, 50)
end

def test_get_bucket_value_for_user_25_someonemailcom_when_bucketing_seed_passed_as_symbol
campaign = {'id' => 1, isBucketingSeedEnabled: true}
bucket_value = @bucketer.get_bucket_value_for_user("[email protected]", campaign)
assert_equal(bucket_value, 64)

campaign[:isBucketingSeedEnabled] = false
bucket_value = @bucketer.get_bucket_value_for_user("[email protected]", campaign)
assert_equal(bucket_value, 64)
end

def test_get_bucket_value_for_user_1111111111111111_when_bucketing_seed_passed_as_symbol
campaign = {'id' => 1, isBucketingSeedEnabled: true}
bucket_value = @bucketer.get_bucket_value_for_user("1111111111111111", campaign)
assert_equal(bucket_value, 50)

campaign[:isBucketingSeedEnabled] = false
bucket_value = @bucketer.get_bucket_value_for_user("1111111111111111", campaign)
assert_equal(bucket_value, 50)
Expand Down

0 comments on commit 8826512

Please sign in to comment.