Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,9 @@ language: node_js
node_js:
- 0.10

cache:
directories:
- node_modules

after_script:
- npm run coveralls
- npm run coveralls
15 changes: 13 additions & 2 deletions dist/featureFlags.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,9 @@ angular.module('feature-flags').directive('featureFlagOverrides', ['featureFlags
}]);

angular.module('feature-flags').service('featureFlagOverrides', ['$rootElement', function($rootElement) {
var appName = $rootElement.attr('ng-app'),
keyPrefix = 'featureFlags.' + appName + '.',
var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-', ''],
appName,
keyPrefix,

localStorageAvailable = (function() {
try {
Expand Down Expand Up @@ -116,6 +117,16 @@ angular.module('feature-flags').service('featureFlagOverrides', ['$rootElement',
}
};

// Need to find the appName for the angular specific prefixes
angular.forEach(ngAttrPrefixes, function(prefix) {
var name = prefix + 'app';
if (!appName && $rootElement.attr(name)) {
appName = $rootElement.attr(name);
}
});

keyPrefix = 'featureFlags.' + appName + '.';

return {
isPresent: function(key) {
var value = get(key);
Expand Down
2 changes: 1 addition & 1 deletion dist/featureFlags.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

49 changes: 14 additions & 35 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,44 +12,18 @@ var gulp = require('gulp'),
concat = require('gulp-concat'),
clean = require('gulp-clean'),
ngannotate = require('gulp-ng-annotate'),
karma = require('gulp-karma'),
ghpages = require('gh-pages'),
path = require('path'),
gutil = require('gulp-util'),
coveralls = require('gulp-coveralls'),
pkg = require('./package.json'),
karmaServer = require('karma').Server;

//--------------------------------
// HELPERS
//--------------------------------
karmaConfig = function(action) {
return {
frameworks: ['jasmine'],
browsers: ['PhantomJS'],
reporters: ['progress', 'coverage'],
preprocessors: {
'src/*.js': ['coverage']
},
coverageReporter: {
reporters: [{
type: 'html',
dir: 'test/coverage/'
}, {
type: 'lcov',
dir: 'test/coverage/'
}]
},
action: action
};
},
TEST_FILES = 'test/**/*.spec.js',
SRC_FILES = 'src/*.js',
KARMA_FILES = [
'demo/vendor/angular.min.js',
'test/vendor/angular-mocks.js',
SRC_FILES,
TEST_FILES
],
PORT = 9999;

//--------------------------------
Expand All @@ -69,12 +43,8 @@ gulp.task('lint', function() {
.pipe(eslint.failOnError());
});

gulp.task('test', ['clean'], function() {
return gulp.src(KARMA_FILES)
.pipe(karma(karmaConfig('run')))
.on('error', function(err) {
throw err;
});
gulp.task('test', ['clean'], function(done) {
return runKarma(done);
});

gulp.task('clean', function() {
Expand Down Expand Up @@ -133,8 +103,7 @@ gulp.task('dev', ['build', 'server'], function() {
gulp.watch(['demo/**/*.*'], ['reload']);
gulp.watch(['demo/scripts/*.js', TEST_FILES], ['lint']);
gulp.watch(SRC_FILES, ['lint', 'build']);
gulp.src(KARMA_FILES)
.pipe(karma(karmaConfig('watch')));
runKarma();
});

gulp.task('deploy', ['build'], function(done) {
Expand All @@ -146,3 +115,13 @@ gulp.task('deploy', ['build'], function(done) {
gulp.task('precommit', ['lint', 'test', 'build']);
gulp.task('demo', ['build', 'server']);
gulp.task('default', ['precommit']);

function runKarma(done) {
new karmaServer({
configFile: __dirname + '/karma.conf.js'
}, function() {
if (done) {
done();
}
}).start();
}
36 changes: 36 additions & 0 deletions karma.conf.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
module.exports = function(config) {
config.set({
files: [
'demo/vendor/angular.min.js',
'test/vendor/angular-mocks.js',
'src/*.js',
'test/**/*.spec.js'
],
frameworks: ['jasmine'],
plugins: [
require('karma-coverage'),
require('karma-jasmine'),
require('karma-phantomjs-launcher'),
require('karma-mocha-reporter')
],
browsers: ['PhantomJS'],
reporters: ['mocha', 'coverage'],
preprocessors: {
'src/*.js': ['coverage']
},
coverageReporter: {
reporters: [
{ type: 'text-summary' },
{
type: 'html',
dir: 'test/coverage/'
},
{
type: 'lcov',
dir: 'test/coverage/'
}
]
},
singleRun: true
});
};
11 changes: 6 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,17 @@
"gulp-coveralls": "^0.1.2",
"gulp-eslint": "^1.0.0",
"gulp-header": "^1.0.2",
"gulp-karma": "0.0.4",
"gulp-ng-annotate": "^0.3.3",
"gulp-rename": "^1.2.0",
"gulp-uglify": "^0.2.1",
"gulp-util": "^3.0.1",
"gulp-wrap": "^0.3.0",
"karma": "^0.12.9",
"karma-coverage": "~0.1.5",
"karma-jasmine": "^0.1.5",
"karma-phantomjs-launcher": "^0.1.4",
"jasmine": "^2.5.2",
"karma": "^1.3.0",
"karma-coverage": "^1.1.1",
"karma-jasmine": "^1.0.2",
"karma-mocha-reporter": "^2.2.0",
"karma-phantomjs-launcher": "^1.0.2",
"opn": "^0.1.1"
}
}
15 changes: 13 additions & 2 deletions src/featureFlagOverrides.service.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
angular.module('feature-flags').service('featureFlagOverrides', function($rootElement) {
var appName = $rootElement.attr('ng-app'),
keyPrefix = 'featureFlags.' + appName + '.',
var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-', ''],
appName,
keyPrefix,

localStorageAvailable = (function() {
try {
Expand Down Expand Up @@ -38,6 +39,16 @@ angular.module('feature-flags').service('featureFlagOverrides', function($rootEl
}
};

// Need to find the appName for the angular specific prefixes
angular.forEach(ngAttrPrefixes, function(prefix) {
var name = prefix + 'app';
if (!appName && $rootElement.attr(name)) {
appName = $rootElement.attr(name);
}
});

keyPrefix = 'featureFlags.' + appName + '.';

return {
isPresent: function(key) {
var value = get(key);
Expand Down
16 changes: 8 additions & 8 deletions test/featureFlag.directive.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
describe('when the feature flag', function() {
describe('is on', function() {
beforeEach(function() {
flagCheck.andReturn(true);
flagCheck.and.returnValue(true);
$scope.$digest();
});

Expand All @@ -34,7 +34,7 @@

describe('is off', function() {
beforeEach(function() {
flagCheck.andReturn(false);
flagCheck.and.returnValue(false);
$scope.$digest();
});

Expand All @@ -48,9 +48,9 @@

describe('when i toggle it on and off again', function() {
beforeEach(function() {
flagCheck.andReturn(true);
flagCheck.and.returnValue(true);
$scope.$digest();
flagCheck.andReturn(false);
flagCheck.and.returnValue(false);
$scope.$digest();
});

Expand Down Expand Up @@ -100,7 +100,7 @@
describe('when the feature flag', function() {
describe('is on', function() {
beforeEach(function() {
flagCheck.andReturn(true);
flagCheck.and.returnValue(true);
$scope.$digest();
});

Expand All @@ -113,7 +113,7 @@

describe('is off', function() {
beforeEach(function() {
flagCheck.andReturn(false);
flagCheck.and.returnValue(false);
$scope.$digest();
});

Expand All @@ -125,9 +125,9 @@

describe('when i toggle it on and off again', function() {
beforeEach(function() {
flagCheck.andReturn(true);
flagCheck.and.returnValue(true);
$scope.$digest();
flagCheck.andReturn(false);
flagCheck.and.returnValue(false);
$scope.$digest();
});

Expand Down
2 changes: 1 addition & 1 deletion test/featureFlagOverrides.directive.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
spyOn(featureFlags, 'enable');
spyOn(featureFlags, 'disable');
spyOn(featureFlags, 'reset');
spyOn(featureFlags, 'get').andReturn('FLAGS_ARRAY');
spyOn(featureFlags, 'get').and.returnValue('FLAGS_ARRAY');

container = angular.element('<div feature-flag-overrides></div>');
$compile(container)($scope);
Expand Down
26 changes: 15 additions & 11 deletions test/featureFlagOverrides.service.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@
'use strict';

var module = angular.mock.module,
inject = angular.mock.inject;
inject = angular.mock.inject,
appName = 'undefined',
$rootElement = angular.element('<div ng-app="' + appName + '" />');

describe('Service: featureFlagOverrides', function() {
var service, appName = '';
var service;

beforeEach(module('feature-flags'));
beforeEach(module('feature-flags', function($provide) {
$provide.value('$rootElement', $rootElement);
}));

beforeEach(inject(function(featureFlagOverrides) {
service = featureFlagOverrides;
beforeEach(inject(function(_featureFlagOverrides_) {
service = _featureFlagOverrides_;
}));

describe('when I set an override', function() {
Expand Down Expand Up @@ -66,7 +70,7 @@
describe('when I check the state of an override', function() {
describe('if there is one', function() {
beforeEach(function() {
spyOn(localStorage, 'getItem').andReturn('true');
spyOn(localStorage, 'getItem').and.returnValue('true');
});

it('should return true if there is a value', function() {
Expand All @@ -76,7 +80,7 @@

describe('if there is not one', function() {
beforeEach(function() {
spyOn(localStorage, 'getItem').andReturn(null);
spyOn(localStorage, 'getItem').and.returnValue(null);
});

it('should return false if there is no value', function() {
Expand Down Expand Up @@ -115,16 +119,16 @@
var service;

beforeEach(function() {
spyOn(localStorage, 'setItem').andThrow();
spyOn(localStorage, 'getItem').andThrow();
spyOn(localStorage, 'removeItem').andThrow();
spyOn(localStorage, 'setItem').and.throwError();
spyOn(localStorage, 'getItem').and.throwError();
spyOn(localStorage, 'removeItem').and.throwError();
});

beforeEach(module('feature-flags'));

beforeEach(inject(function(featureFlagOverrides) {
service = featureFlagOverrides;
localStorage.setItem.reset();
localStorage.setItem.calls.reset();
}));

describe('when I set an override', function() {
Expand Down
Loading