Skip to content

Instantly share code, notes, and snippets.

@dylanized
Last active October 8, 2015 00:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dylanized/dd40b109c2cce2bdf7fc to your computer and use it in GitHub Desktop.
Save dylanized/dd40b109c2cce2bdf7fc to your computer and use it in GitHub Desktop.
BSD Spud Helper
// SPUD HELPER
function getUniversalProfile(required_fields, cb) {
test_msg("Loading getUniversalProfile...");
jQuery(document).ready(function() {
test_msg("Getting universal profile...");
var bsd_fields = ['firstname', 'lastname', 'email', 'phone', 'addr1', 'addr2', 'city', 'state_cd', 'zip'];
// make sure bsd is loaded
if (typeof bQuery == 'function'
&& typeof bQuery.bsd == 'object'
&& typeof bQuery.bsd.spud == 'function') {
test_msg("Loading the spud...");
// query the bsd spud asyncronously
bQuery.bsd.spud(
'get',
bsd_fields,
{
success: function (data) {
test_msg("BSD data:", data);
// if profile is not empty
if (has_user_data(data)) {
// process spud data
var user = build_user(data);
// if has required fields, run callback
if (has_required_fields(user, required_fields)) cb(user);
else return error("Missing required fields! Returning false");
}
else return error("Empty profile! Returning false");
}
}
);
} else error("BSD Spud not found");
// helper functions
function has_user_data(obj) {
for (var prop in obj) {
if (obj[prop]) return true;
}
return false;
}
function has_required_fields(user, required_fields) {
if (typeof required_fields == "object" && required_fields.length > 0) {
for (var i = 0; i < required_fields.length; i++) {
if (!user[required_fields[i]]) return false;
}
}
return true;
}
function error(msg) {
test_msg(msg);
return false;
}
// build user
function build_user(user) {
test_msg("Building user object...");
// set bsd props
user.firstname = user_prop("firstname", "first_name");
user.lastname = user_prop("lastname", "last_name");
user.email = user_prop("email", "email");
user.phone = user_prop("phone", "phone");
user.addr1 = user_prop("addr1", "home_addr2");
user.addr2 = user_prop("addr2", "home_addr2");
user.city = user_prop("city", "home_city");
user.state = user_prop("state_cd", "home_state");
user.zip = user_prop("zip", "home_zip");
// set mixpanel props
var has_mixpanel = has_mixpanel();
if (has_mixpanel) user.ip = mixpanel.get_property("uip");
// return object
test_msg("Returning object:", user);
return user;
// build user helpers
function user_prop(bsd_field_name, mix_field_name) {
if (user[bsd_field_name]) return user[bsd_field_name];
else if (has_mixpanel) return mixpanel.get_property(mix_field_name);
else return undefined;
}
function has_mixpanel() {
if (typeof(mixpanel) == 'undefined') return error("Mixpanel not loaded!");
else if (typeof(mixpanel.get_property) == 'undefined') return error("Mixpanel cookie not loaded!");
else return true;
}
}
});
}
/*
Example:
if (typeof getUniversalProfile == 'function') {
getUniversalProfile(['email', 'zip'], function(user) {
// do stuff here
console.log(user);
});
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment