Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Working on an experimental new design? Starting a closed beta? Rolling out a new feature over the next few weeks? Fa-fa-fa-flip it! fflip gives you complete control over releasing new functionality to your users, based on thier user id, join date, paid status, and whatever else you can think of. fflip's goal is to be the most extendable and customizable feature flipping/toggling module out there.
Install with:
npm install fflip
##Getting Started ###Criteria Criteria are the rules that features can test users against. Each rule takes a user and a data argument to test against, and returns true/false if the user matches that criteria. The data argument can be any type, as long as you handle it correctly in the function you describe.
var ExampleCriteria = {
isPaidUser: function(user, isPaid) {
return user.isPaid == isPaid;
},
percentageOfUsers: function(user, percent) {
return (user.id % 100 < percent * 100);
},
allowUserIDs: function(user, idArr) {
for(var id in idArr) {
if(user.id == idArr[id]) return true;
}
return false;
}
}
###Features Features are sets of criteria to test users against. A user will have a featured enabled if they match all listed criteria, otherwise the feature is disabled. Features are described as follows:
var ExampleFeatures = {
paidFeature: {
isPaidUser: true
},
closedBeta: {
allowUserIDs: [20,30,80,181],
},
newFeatureRollout: {
isPaidUser: false,
percentageOfUsers: 0.50,
}
}
###Basic Usage
// Include fflip
var fflip = require('fflip');
// Configure using variables defined above
fflip.config({
criteria: ExampleCriteria,
features: ExampleFeatures
});
// Define a Test User
var freeUser = {
id: 80,
isPaid: false,
/* ... */
};
// Get a User's Enabled Features
var Features = fflip.featuresForUser(freeUser);
if(Features.closedBeta) {
console.log('Welcome to the Closed Beta!');
}
##Configuration
fflip.config({
criteria: {}, // Object (see above) or Function (see below)
features: {}, // Object or Function
reload: 30, // Time between refreshing features/criteria, in seconds
});
##Advanced Usage
###Extending Your User Object
// Add a hasFeature() method to your User
var paidUser = {
id: 30,
isPaid: false,
hasFeature: function(feature) { return fflip.userHasFeature(paidUser, feature); },
/* ... */
};
// Test Specific User Features
if(paidUser.hasFeature('newFeatureRollout')) {
/* Do Some newFeauture Behavior... */
}
###Features & Criteria Functions fflip also accepts functions for loading criteria and features. If fflip is passed a funciton with no arguments it will call the function and accept the return value. To load asyncronously, pass a function that sends a features/criteria data object to a callback. fflip will recieve the callback and set the object accordingly. Set the reload option to refresh the data every X seconds by calling these functions.
// Load Features Syncronously
var getCriteriaSync = function() {
var collection = db.collection('criteria');
var criteriaArr = collection.find().toArray();
/* Proccess criteriaArr -> criteriaObj (format described above) */
return criteriaObj;
}
// Load Features Asyncronously
var getFeaturesAsync = function(fflip_callback) {
var collection = db.collection('features');
collection.find().toArray(function(err, featuresArr) {
/* Handle err
* Proccess featuresArr -> featuresObj (format described above) */
fflip_callback(featuresObj);
});
}
fflip.config({
criteria: getCriteriaSync,
features: getFeaturesAsync,
reload: 60 /* Call each function again and update features every 60 secondss */
});
##Special Thanks Switch designed by Rob Schill from The Noun Project
FAQs
Advanced Feature Flipping/Toggling Across the Server and Client
The npm package fflip receives a total of 7,226 weekly downloads. As such, fflip popularity was classified as popular.
We found that fflip demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.