Skip to content

Commit

Permalink
adding storage to persist user_id and traits, replacing rl_message ke…
Browse files Browse the repository at this point in the history
…y and rl_
  • Loading branch information
sayan-rudder committed Sep 30, 2019
1 parent bc0f3ab commit 6de3c16
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 114 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//import nodeCode from "./node";
import { HubSpot } from "./browser";

export default process.browser ? { HubSpot } : { HubSpot };
export default process.browser ? HubSpot : HubSpot;
2 changes: 1 addition & 1 deletion rudder-client-javascript/test/integrations/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as HubSpot from "./HubSpot";

let integrations = { HS: HubSpot.default.HubSpot };
let integrations = { HS: HubSpot.default };

export { integrations };
87 changes: 66 additions & 21 deletions rudder-client-javascript/test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import { getCurrentTimeFormatted } from "../utils/utils";
import { replacer } from "../utils/utils";
import { RudderPayload } from "../utils/RudderPayload";
import { RudderTraits } from "../utils/RudderTraits";
import Storage from "../utils/storage";

//https://unpkg.com/test-rudder-sdk@1.0.5/dist/browser.js
function init(intgArray, configArray) {
console.log("supported intgs ", integrations);
let i = 0;
Expand Down Expand Up @@ -50,7 +52,7 @@ function flush(rudderElement) {
//so buffer is really kept to be in alignment with other SDKs
this.eventsBuffer = [];

this.eventsBuffer.push(rudderElement); //Add to event buffer
this.eventsBuffer.push(rudderElement.getElementContent()); //Add to event buffer

//construct payload
var payload = new RudderPayload();
Expand All @@ -62,7 +64,7 @@ function flush(rudderElement) {
var xhr = new XMLHttpRequest();

console.log("==== in flush ====");
console.log(JSON.stringify(payload, replacer));
console.log(JSON.stringify(payload, replacer).replace(/rl_/g, ""));

xhr.open("POST", BASE_URL, true);
//xhr.withCredentials = true;
Expand All @@ -74,7 +76,7 @@ function flush(rudderElement) {
this.eventsBuffer = []; //reset event buffer
}
};
xhr.send(JSON.stringify(payload, replacer));
xhr.send(JSON.stringify(payload, replacer).replace(/rl_/g, ""));
console.log("===flushed to Rudder BE");
}

Expand All @@ -90,7 +92,18 @@ class test {
this.clientIntegrationObjects = undefined;
this.toBeProcessedArray = [];
this.toBeProcessedByIntegrationArray = [];
this.userId = undefined;
this.storage = new Storage();
this.userId =
this.storage.getUserId() != undefined
? this.storage.getUserId()
: generateUUID();

this.userTraits =
this.storage.getUserTraits() != undefined
? this.storage.getUserTraits()
: {};

this.storage.setUserId(this.userId);
}

processResponse(status, response) {
Expand Down Expand Up @@ -133,7 +146,12 @@ class test {
if (typeof category === "string" && typeof name !== "string")
(name = category), (category = null);

var rudderElement = new RudderElementBuilder().build();
if (!this.userId) {
this.userId = generateUUID();
this.storage.setUserId(this.userId);
}

var rudderElement = new RudderElementBuilder().setType("page").build();
//console.log("arg length ",arguments.length)
let methodArguments = arguments; //arguments[0]
if (name) {
Expand All @@ -150,11 +168,14 @@ class test {
console.log(JSON.parse(JSON.stringify(properties)));
rudderElement["rl_message"]["rl_properties"] = properties; //JSON.parse(arguments[1]);
}
if (this.userId) {
rudderElement["rl_message"]["rl_anonymous_id"] = rudderElement[
"rl_message"
]["rl_user_id"] = this.userId;
}

rudderElement["rl_message"]["rl_context"]["rl_traits"] = this.userTraits;
rudderElement["rl_message"]["rl_anonymous_id"] = rudderElement[
"rl_message"
]["rl_user_id"] = rudderElement["rl_message"]["rl_context"]["rl_traits"][
"rl_anonymous_id"
] = this.userId;

console.log(JSON.stringify(rudderElement));

//try to first send to all integrations, if list populated from BE
Expand Down Expand Up @@ -193,18 +214,27 @@ class test {
if (typeof options == "function") (callback = options), (options = null);
if (typeof properties == "function")
(callback = properties), (options = null), (properties = null);
var rudderElement = new RudderElementBuilder().build();

if (!this.userId) {
this.userId = generateUUID();
this.storage.setUserId(this.userId);
}

var rudderElement = new RudderElementBuilder().setType("track").build();
if (event) {
rudderElement.setEventName(event);
}
if (properties) {
rudderElement.setProperty(properties);
}
if (this.userId) {
rudderElement["rl_message"]["rl_anonymous_id"] = rudderElement[
"rl_message"
]["rl_user_id"] = this.userId;
}

rudderElement["rl_message"]["rl_context"]["rl_traits"] = this.userTraits;
rudderElement["rl_message"]["rl_anonymous_id"] = rudderElement[
"rl_message"
]["rl_user_id"] = rudderElement["rl_message"]["rl_context"]["rl_traits"][
"rl_anonymous_id"
] = this.userId;

console.log(JSON.stringify(rudderElement));

//try to first send to all integrations, if list populated from BE
Expand Down Expand Up @@ -234,10 +264,12 @@ class test {
if (typeof traits == "function")
(callback = traits), (options = null), (traits = null);
if (typeof userId == "object")
(options = traits), (traits = userId), (userId = generateUUID());
(options = traits), (traits = userId), (userId = this.userId);

this.userId = userId;
var rudderElement = new RudderElementBuilder().build();
this.storage.setUserId(this.userId);

var rudderElement = new RudderElementBuilder().setType("identify").build();
var rudderTraits = new RudderTraits();
console.log(traits);
if (traits) {
Expand All @@ -247,10 +279,16 @@ class test {
}
}
}
rudderElement["rl_message"]["rl_context"]["rl_traits"] = rudderTraits;

this.userTraits = traits;
this.storage.setUserTraits(this.userTraits);

rudderElement["rl_message"]["rl_context"]["rl_traits"] = this.userTraits;
rudderElement["rl_message"]["rl_anonymous_id"] = rudderElement[
"rl_message"
]["rl_user_id"] = this.userId;
]["rl_user_id"] = rudderElement["rl_message"]["rl_context"]["rl_traits"][
"rl_anonymous_id"
] = this.userId;

console.log(JSON.stringify(rudderElement));

Expand All @@ -276,6 +314,12 @@ class test {
}
}

reset() {
this.userId = "";
this.userTraits = {};
this.storage.clear();
}

load(writeKey) {
console.log("inside load " + this.prop1);
this.writeKey = writeKey;
Expand Down Expand Up @@ -344,6 +388,7 @@ if (process.browser) {
let identify = instance.identify.bind(instance);
let page = instance.page.bind(instance);
let track = instance.track.bind(instance);
let reset = instance.reset.bind(instance);
let load = instance.load.bind(instance);

export { page, track, load, identify };
export { page, track, load, identify, reset };
68 changes: 36 additions & 32 deletions rudder-client-javascript/utils/RudderElement.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,39 @@
var RudderMessage = require("./RudderMessage.js").RudderMessage;
//Individual element class containing Rudder Message
class RudderElement {
constructor() {
this.rl_message = new RudderMessage();
}

//Setters that in turn set the field values for the contained object
setType(type) {
this.rl_message.rl_type = type;
}

setProperty(rudderProperty) {
this.rl_message.rl_properties = rudderProperty;
}

setUserProperty(rudderUserProperty) {
this.rl_message.rl_user_properties = rudderUserProperty;
}

setUserId(userId) {
this.rl_message.rl_user_id = userId;
}

setEventName(eventName) {
this.rl_message.rl_event = eventName;
}

updateTraits(traits) {
this.rl_message.rl_context.rl_traits = traits;
}
}
module.exports = {
RudderElement: RudderElement
};
constructor() {
this.rl_message = new RudderMessage();
}

//Setters that in turn set the field values for the contained object
setType(type) {
this.rl_message.rl_type = type;
}

setProperty(rudderProperty) {
this.rl_message.rl_properties = rudderProperty;
}

setUserProperty(rudderUserProperty) {
this.rl_message.rl_user_properties = rudderUserProperty;
}

setUserId(userId) {
this.rl_message.rl_user_id = userId;
}

setEventName(eventName) {
this.rl_message.rl_event = eventName;
}

updateTraits(traits) {
this.rl_message.rl_context.rl_traits = traits;
}

getElementContent() {
return this.rl_message;
}
}
module.exports = {
RudderElement: RudderElement
};
125 changes: 66 additions & 59 deletions rudder-client-javascript/utils/RudderElementBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,70 @@
//that is transmitted by the SDK
var RudderElement = require("./RudderElement.js").RudderElement;
class RudderElementBuilder {
constructor() {
this.rudderProperty = null;
this.rudderUserProperty = null;
this.event = null;
this.userId = null;
this.channel = null;
}

//Set the property
setProperty(inputRudderProperty) {
this.rudderProperty = inputRudderProperty;
return this;
}

//Build and set the property object
setPropertyBuilder(rudderPropertyBuilder) {
this.rudderProperty = rudderPropertyBuilder.build();
return this;
}

setUserProperty(inputRudderUserProperty) {
this.rudderUserProperty = inputRudderUserProperty;
return this;
}

setUserPropertyBuilder(rudderUserPropertyBuilder) {
this.rudderUserProperty = rudderUserPropertyBuilder.build();
return this;
}

//Setter methods for all variables. Instance is returned for each call in
//accordance with the Builder pattern

setEvent(event) {
this.event = event;
return this;
}

setUserId(userId) {
this.userId = userId;
return this;
}

setChannel(channel) {
this.channel = channel;
return this;
}

build() {
var element = new RudderElement();
element.setUserId(this.userId);
element.setEventName(this.event);
element.setProperty(this.rudderProperty);
element.setUserProperty(this.rudderUserProperty);
return element;
}
constructor() {
this.rudderProperty = null;
this.rudderUserProperty = null;
this.event = null;
this.userId = null;
this.channel = null;
this.type = null;
}
module.exports = {
RudderElementBuilder: RudderElementBuilder
};

//Set the property
setProperty(inputRudderProperty) {
this.rudderProperty = inputRudderProperty;
return this;
}

//Build and set the property object
setPropertyBuilder(rudderPropertyBuilder) {
this.rudderProperty = rudderPropertyBuilder.build();
return this;
}

setUserProperty(inputRudderUserProperty) {
this.rudderUserProperty = inputRudderUserProperty;
return this;
}

setUserPropertyBuilder(rudderUserPropertyBuilder) {
this.rudderUserProperty = rudderUserPropertyBuilder.build();
return this;
}

//Setter methods for all variables. Instance is returned for each call in
//accordance with the Builder pattern

setEvent(event) {
this.event = event;
return this;
}

setUserId(userId) {
this.userId = userId;
return this;
}

setChannel(channel) {
this.channel = channel;
return this;
}

setType(eventType) {
this.type = eventType;
return this;
}

build() {
var element = new RudderElement();
element.setUserId(this.userId);
element.setType(this.type);
element.setEventName(this.event);
element.setProperty(this.rudderProperty);
element.setUserProperty(this.rudderUserProperty);
return element;
}
}
module.exports = {
RudderElementBuilder: RudderElementBuilder
};

0 comments on commit 6de3c16

Please sign in to comment.