Comparing version 0.2.4 to 0.3.3
//-------------------------------------------------------------------------- | ||
// Private | ||
//-------------------------------------------------------------------------- | ||
var features = {}, | ||
criteria = {}, | ||
getFeatures, | ||
var getFeatures, | ||
getCriteria, | ||
refreshRate = 30*1000, | ||
refreshInterval; | ||
reloadInverval; | ||
@@ -14,7 +11,9 @@ function setCriteria(configVal) { | ||
getCriteria = configVal; | ||
updateCriteria(); | ||
} else { | ||
criteria = configVal || criteria; | ||
getCriteria = undefined; | ||
} | ||
updateCriteria(); | ||
if(typeof configVal == 'object') { | ||
self._criteria = configVal; | ||
} | ||
} | ||
@@ -25,7 +24,9 @@ | ||
getFeatures = configVal; | ||
updateFeatures(); | ||
} else { | ||
features = configVal || features; | ||
getFeatures = undefined; | ||
} | ||
updateFeatures(); | ||
if(typeof configVal == 'object') { | ||
self._features = configVal; | ||
} | ||
} | ||
@@ -37,3 +38,3 @@ | ||
} else if(getCriteria.length === 0) { | ||
criteria = getCriteria() || criteria; | ||
self._criteria = getCriteria() || self._criteria; | ||
return; | ||
@@ -52,3 +53,3 @@ } else if(getCriteria.length === 1) { | ||
} else if(getFeatures.length === 0) { | ||
features = getFeatures() || features; | ||
self._features = getFeatures() || self._features; | ||
return; | ||
@@ -64,6 +65,6 @@ } else if(getFeatures.length === 1) { | ||
function getFeaturesCallback(data) { | ||
features = data || features; | ||
self._features = data || self._features; | ||
} | ||
function getCriteriaCallback(data) { | ||
features = data || features; | ||
self._features = data || self._features; | ||
} | ||
@@ -76,2 +77,8 @@ | ||
_features: {}, | ||
_criteria: {}, | ||
_reloadRate: 30*1000, | ||
config: function(params) { | ||
@@ -83,6 +90,6 @@ // Set Criteria & Features | ||
// Refresh Rate | ||
refreshRate = params.reload*1000 || refreshRate; | ||
clearInterval(refreshInterval); | ||
self._reloadRate = params.reload*1000 || self._reloadRate; | ||
clearInterval(reloadInverval); | ||
if(getCriteria || getFeatures) | ||
refreshInterval = setInterval(self.reload, refreshRate); | ||
reloadInverval = setInterval(self.reload, self._reloadRate); | ||
}, | ||
@@ -95,12 +102,10 @@ | ||
featuresForUser: function(user) { | ||
var user_features = {}; | ||
Object.keys(features).forEach(function(f_name) { | ||
user_features[f_name] = self.userHasFeature(user, f_name); | ||
}); | ||
return user_features; | ||
}, | ||
userHasFeature: function(user, f_name) { | ||
var featureCriteria = features[f_name]; | ||
var featureCriteria = self._features[f_name]; | ||
if(typeof featureCriteria == 'undefined') { | ||
return null; | ||
} | ||
if(Object.keys(featureCriteria).length === 0) { | ||
return false; | ||
} | ||
var isEnabled = true; | ||
@@ -111,3 +116,3 @@ Object.keys(featureCriteria).forEach(function(ckey) { | ||
var c_data = featureCriteria[ckey]; | ||
var c_func = criteria[c_name]; | ||
var c_func = self._criteria[c_name]; | ||
isEnabled = c_func(user, c_data); | ||
@@ -117,3 +122,11 @@ } | ||
return isEnabled; | ||
}, | ||
featuresForUser: function(user) { | ||
var user_features = {}; | ||
Object.keys(self._features).forEach(function(f_name) { | ||
user_features[f_name] = self.userHasFeature(user, f_name); | ||
}); | ||
return user_features; | ||
} | ||
} | ||
}; |
@@ -5,11 +5,29 @@ { | ||
"author": "Fred Schott <fredkschott@gmail.com>", | ||
"version": "0.2.4", | ||
"main":"lib/fflip", | ||
"repository" : { | ||
"type" : "git", | ||
"url" : "http://github.com/FredKSchott/fflip" | ||
"licence": "MIT", | ||
"version": "0.3.3", | ||
"main": "lib/fflip", | ||
"repository": { | ||
"type": "git", | ||
"url": "http://github.com/FredKSchott/fflip" | ||
}, | ||
"licence": "MIT", | ||
"keywords": ["feature", "flip", "flipping", "flipper", "togggle", "toggling", "toggler", "criteria"], | ||
"bugs": "https://github.com/FredKSchott/fflip/issues" | ||
"bugs": "https://github.com/FredKSchott/fflip/issues", | ||
"scripts": { | ||
"test": "grunt travis --verbose" | ||
}, | ||
"devDependencies": { | ||
"grunt": "~0.4.1", | ||
"grunt-mocha-test": "~0.7.0" | ||
}, | ||
"keywords": [ | ||
"feature", | ||
"flip", | ||
"flipping", | ||
"flipper", | ||
"togggle", | ||
"toggling", | ||
"toggler", | ||
"criteria", | ||
"continuous integration", | ||
"ci" | ||
] | ||
} |
@@ -0,10 +1,7 @@ | ||
[![Build Status](https://travis-ci.org/FredKSchott/fflip.png)](https://travis-ci.org/FredKSchott/fflip) | ||
<img src="http://fredkschott.com/images/fflipIcon2.png" /> fflip | ||
============================ | ||
============================ | ||
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, membership 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. | ||
``` | ||
npm install fflip --save | ||
``` | ||
- Describe __custom criteria and features__ using easy-to-read JSON | ||
@@ -15,2 +12,6 @@ - Supports __Syncronous/Asyncronous loading__ of features and criteria | ||
``` | ||
npm install fflip --save | ||
``` | ||
##Getting Started | ||
@@ -17,0 +18,0 @@ Below is a simple example of using __fflip__ to deliver a closed beta to a fraction of users: |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
15094
8
277
118
2