Skip to content

Commit

Permalink
Merge pull request #295 from prebid/bugfix-kvp
Browse files Browse the repository at this point in the history
Fix for #196
  • Loading branch information
mkendall07 committed Apr 5, 2016
2 parents c2c5673 + 553e1ce commit e095210
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 17 deletions.
32 changes: 18 additions & 14 deletions src/bidmanager.js
Original file line number Diff line number Diff line change
Expand Up @@ -208,20 +208,8 @@ exports.getKeyValueTargetingPairs = function (bidderCode, custBidObj) {
var keyValues = {};
var bidder_settings = pbjs.bidderSettings || {};

//1) set keys from specific bidder setting if they exist
if (bidderCode && custBidObj && bidder_settings && bidder_settings[bidderCode] && bidder_settings[bidderCode][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) {
setKeys(keyValues, bidder_settings[bidderCode], custBidObj);
custBidObj.alwaysUseBid = bidder_settings[bidderCode].alwaysUseBid;
}

//2) set keys from standard setting. NOTE: this API doesn't seeem to be in use by any Adapter currently
else if (defaultBidderSettingsMap[bidderCode]) {
setKeys(keyValues, defaultBidderSettingsMap[bidderCode], custBidObj);
custBidObj.alwaysUseBid = defaultBidderSettingsMap[bidderCode].alwaysUseBid;
}

//3) set the keys from "standard" setting or from prebid defaults
else if (custBidObj && bidder_settings) {
//1) set the keys from "standard" setting or from prebid defaults
if (custBidObj && bidder_settings) {
if (!bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD]) {
bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD] = {
adserverTargeting: [
Expand Down Expand Up @@ -254,6 +242,18 @@ exports.getKeyValueTargetingPairs = function (bidderCode, custBidObj) {
setKeys(keyValues, bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD], custBidObj);
}

//2) set keys from specific bidder setting override if they exist
if (bidderCode && custBidObj && bidder_settings && bidder_settings[bidderCode] && bidder_settings[bidderCode][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) {
setKeys(keyValues, bidder_settings[bidderCode], custBidObj);
custBidObj.alwaysUseBid = bidder_settings[bidderCode].alwaysUseBid;
}

//2) set keys from standard setting. NOTE: this API doesn't seeem to be in use by any Adapter currently
else if (defaultBidderSettingsMap[bidderCode]) {
setKeys(keyValues, defaultBidderSettingsMap[bidderCode], custBidObj);
custBidObj.alwaysUseBid = defaultBidderSettingsMap[bidderCode].alwaysUseBid;
}

return keyValues;
};

Expand All @@ -265,6 +265,10 @@ function setKeys(keyValues, bidderSettings, custBidObj) {
var key = kvPair.key;
var value = kvPair.val;

if (keyValues[key]) {
utils.logWarn('The key: ' + key + ' is getting ovewritten');
}

if (utils.isFn(value)) {
try {
keyValues[key] = value(custBidObj);
Expand Down
2 changes: 1 addition & 1 deletion src/prebid.js
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ function buildBidResponse(bidArray) {
if (bid.alwaysUseBid && bidClone.adserverTargeting) { // add the bid if alwaysUse and bid has returned
// push key into targeting
pb_targetingMap[bidClone.adUnitCode] = utils.extend(pb_targetingMap[bidClone.adUnitCode], bidClone.adserverTargeting);
} else if (bid.cpm && bid.cpm > 0) {
} if (bid.cpm && bid.cpm > 0) {
//else put into auction array if cpm > 0
bidArrayTargeting.push({
cpm: bid.cpm,
Expand Down
6 changes: 6 additions & 0 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,12 @@ exports.getTopWindowUrl = function () {
}
};

exports.logWarn = function (msg) {
if (debugTurnedOn() && console.warn) {
console.warn('WARNING: ' + msg);
}
};

exports.logInfo = function(msg, args) {
if (debugTurnedOn() && hasConsoleLogger()) {
if (infoLogger) {
Expand Down
35 changes: 33 additions & 2 deletions test/spec/bidmanager_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ var bidmanager = require('../../src/bidmanager');

});

it('Custom bidCpmAdjustment AND custom configuration for one bidder and do NOT inherit standard', function() {
it('Custom bidCpmAdjustment AND custom configuration for one bidder and inherit standard settings', function() {
pbjs.bidderSettings =
{
appnexus: {
Expand Down Expand Up @@ -264,7 +264,38 @@ var bidmanager = require('../../src/bidmanager');
}
};

var expected = {"hb_bidder": bidderCode, "hb_adid": adId,"hb_pb": 15.0 };
var expected = {"hb_bidder": bidderCode, "hb_adid": adId,"hb_pb": 15.0, "hb_size":"300x250" };
var response = bidmanager.getKeyValueTargetingPairs(bidderCode, bid);
assert.deepEqual(response, expected);

});


it('alwaysUseBid=true and inherit custom', function() {
pbjs.bidderSettings =
{
appnexus: {
alwaysUseBid : true,
adserverTargeting: [{
key: "hb_bidder",
val: function(bidResponse) {
return bidResponse.bidderCode;
}
}, {
key: "hb_adid",
val: function(bidResponse) {
return bidResponse.adId;
}
}, {
key: "hb_pb",
val: function(bidResponse) {
return bidResponse.pbHg;
}
}]
}
};

var expected = {"hb_bidder": bidderCode, "hb_adid": adId,"hb_pb": 5.57, "hb_size":"300x250" };
var response = bidmanager.getKeyValueTargetingPairs(bidderCode, bid);
assert.deepEqual(response, expected);

Expand Down

0 comments on commit e095210

Please sign in to comment.