Skip to content

Commit

Permalink
Add Marionette feature flags
Browse files Browse the repository at this point in the history
Feature flags are added onto the Marionette.FEATURES
object:

```js
Marionette.FEATURES = {
  fooFlag: false
};
```

and are checked in the library code via a simple `isEnabled` check:

```js
Marionette.isEnabled('fooFlag')
```

The goal of feature flags is to be able to add *breaking* features in
a minor release behind a feature flag. There are two benefits to this
strategy:
1) users can access the new feature immediately
2) the code can be merged onto master much sooner, which prevents higher
risk merges down the road.
  • Loading branch information
jasonLaster authored and samccone committed Feb 22, 2015
1 parent 94484e3 commit 4eaf14b
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 0 deletions.
3 changes: 3 additions & 0 deletions SpecRunner.html
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
<script src="src/renderer.js"></script>
<script src="src/template-cache.js"></script>
<script src="src/object.js"></script>
<script src="src/features.js"></script>
<script src="src/controller.js"></script>
<script src="src/app-router.js"></script>
<script src="src/application.js"></script>
Expand All @@ -91,6 +92,7 @@
<script src="src/collection-view.js"></script>
<script src="src/composite-view.js"></script>


<script src="test/unit/application.app-regions.spec.js"></script>
<script src="test/unit/application.spec.js"></script>
<script src="test/unit/app-router.spec.js"></script>
Expand All @@ -108,6 +110,7 @@
<script src="test/unit/controller.spec.js"></script>
<script src="test/unit/destroying-views.spec.js"></script>
<script src="test/unit/error.spec.js"></script>
<script src="test/unit/features.spec.js"></script>
<script src="test/unit/get-immediate-children.spec.js"></script>
<script src="test/unit/get-nested-views.spec.js"></script>
<script src="test/unit/get-option.spec.js"></script>
Expand Down
1 change: 1 addition & 0 deletions src/build/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
// Get the Deferred creator for later use
Marionette.Deferred = Backbone.$.Deferred;

// @include ../features.js
// @include ../helpers.js
// @include ../trigger-method.js
// @include ../dom-refresh.js
Expand Down
6 changes: 6 additions & 0 deletions src/features.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Marionette.FEATURES = {
};

Marionette.isEnabled = function(name) {
return !!Marionette.FEATURES[name];
};
20 changes: 20 additions & 0 deletions test/unit/features.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
describe('features', function() {

beforeEach(function() {
Marionette.FEATURES = {};
});

it('enabled when its present and true', function() {
Marionette.FEATURES.foo = true;
expect(Marionette.isEnabled('foo')).to.be.true;
});

it('disabled when its present and false', function() {
Marionette.FEATURES.foo = false;
expect(Marionette.isEnabled('foo')).to.be.false;
});

it('disabled when not present', function() {
expect(Marionette.isEnabled('foo')).to.be.false;
});
});
1 change: 1 addition & 0 deletions test/unit/setup/node.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ requireHelper('trigger-method');
requireHelper('helpers');
requireHelper('dom-refresh');
requireHelper('object');
requireHelper('features');
requireHelper('controller');
requireHelper('app-router');
requireHelper('application');
Expand Down

0 comments on commit 4eaf14b

Please sign in to comment.