Skip to content
This repository was archived by the owner on Mar 12, 2025. It is now read-only.

Commit ecc3441

Browse files
authored
Rubicon Bid Adapter: Pass on carbon segtaxes (prebid#10985)
* Pass through Carbon segments * Fix rubiconBidAdapter for unit tests * segtax spec * Fix access issues * Remove dup ortb2 work * Adjust unit tests * Fix lint issues * Add all desired segtaxes * Fix unit tests * Fix linting * Don't concat undefined * Unit test pub added segtaxes * Pull site data from site.content.data * Update unit tests
1 parent f869118 commit ecc3441

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

modules/rubiconBidAdapter.js

+23
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,8 @@ export const spec = {
532532
if (bidRequest?.ortb2Imp?.ext?.ae) {
533533
data['o_ae'] = 1;
534534
}
535+
536+
addDesiredSegtaxes(bidderRequest, data);
535537
// loop through userIds and add to request
536538
if (bidRequest.userIdAsEids) {
537539
bidRequest.userIdAsEids.forEach(eid => {
@@ -1037,6 +1039,27 @@ function applyFPD(bidRequest, mediaType, data) {
10371039
}
10381040
}
10391041

1042+
function addDesiredSegtaxes(bidderRequest, target) {
1043+
if (rubiConf.readTopics === false) {
1044+
return;
1045+
}
1046+
let iSegments = [1, 2, 5, 6, 7, 507].concat(rubiConf.sendSiteSegtax?.map(seg => Number(seg)) || []);
1047+
let vSegments = [4, 508].concat(rubiConf.sendUserSegtax?.map(seg => Number(seg)) || []);
1048+
let userData = bidderRequest.ortb2?.user?.data || [];
1049+
let siteData = bidderRequest.ortb2?.site?.content?.data || [];
1050+
userData.forEach(iterateOverSegmentData(target, 'v', vSegments));
1051+
siteData.forEach(iterateOverSegmentData(target, 'i', iSegments));
1052+
}
1053+
1054+
function iterateOverSegmentData(target, char, segments) {
1055+
return (topic) => {
1056+
const taxonomy = Number(topic.ext?.segtax);
1057+
if (segments.includes(taxonomy)) {
1058+
target[`tg_${char}.tax${taxonomy}`] = topic.segment?.map(seg => seg.id).join(',');
1059+
}
1060+
}
1061+
}
1062+
10401063
/**
10411064
* @param sizes
10421065
* @returns {*}

test/spec/modules/rubiconBidAdapter_spec.js

+50
Original file line numberDiff line numberDiff line change
@@ -2770,6 +2770,56 @@ describe('the rubicon adapter', function () {
27702770

27712771
expect(slotParams['o_ae']).to.equal(1)
27722772
});
2773+
2774+
it('should pass along desired segtaxes, but not non-desired ones', () => {
2775+
const localBidderRequest = Object.assign({}, bidderRequest);
2776+
localBidderRequest.refererInfo = {domain: 'bob'};
2777+
config.setConfig({
2778+
rubicon: {
2779+
sendUserSegtax: [9],
2780+
sendSiteSegtax: [10]
2781+
}
2782+
});
2783+
localBidderRequest.ortb2.user = {
2784+
data: [{
2785+
ext: {
2786+
segtax: '404'
2787+
},
2788+
segment: [{id: 5}, {id: 6}]
2789+
}, {
2790+
ext: {
2791+
segtax: '508'
2792+
},
2793+
segment: [{id: 5}, {id: 2}]
2794+
}, {
2795+
ext: {
2796+
segtax: '9'
2797+
},
2798+
segment: [{id: 1}, {id: 2}]
2799+
}]
2800+
}
2801+
localBidderRequest.ortb2.site = {
2802+
content: {
2803+
data: [{
2804+
ext: {
2805+
segtax: '10'
2806+
},
2807+
segment: [{id: 2}, {id: 3}]
2808+
}, {
2809+
ext: {
2810+
segtax: '507'
2811+
},
2812+
segment: [{id: 3}, {id: 4}]
2813+
}]
2814+
}
2815+
}
2816+
const slotParams = spec.createSlotParams(bidderRequest.bids[0], localBidderRequest);
2817+
expect(slotParams['tg_i.tax507']).is.equal('3,4');
2818+
expect(slotParams['tg_v.tax508']).is.equal('5,2');
2819+
expect(slotParams['tg_v.tax9']).is.equal('1,2');
2820+
expect(slotParams['tg_i.tax10']).is.equal('2,3');
2821+
expect(slotParams['tg_v.tax404']).is.equal(undefined);
2822+
});
27732823
});
27742824

27752825
describe('classifiedAsVideo', function () {

0 commit comments

Comments
 (0)