Licence
MIT
Version
2.0.0
Deps
7
Size
26 kB
Vulns
0
Weekly
0
ember-config-cat
This addon includes a service which wraps a ConfigCat client and aims at easing any feature flagging in your applications.
Compatibility
- Ember.js v3.24 or above
- Ember CLI v3.24 or above
- Node.js v12 or above
Installation
ember install ember-config-cat
Usage
Options
# environment.js
module.exports = function (environment) {
let ENV = {
emberConfigCat: {
// your options goes here
}
};
};
requestTimeoutMsanddataGovernanceare common polling options to the three available modes- All default values except
mode,localandautoStartare defined in the ConfigCat SDK - You may define either
localorsdkKeybut the addon will fallback tolocalmode if nosdkKeyis provided.
Content Security Policy (CSP)
If your app is using ember-cli-content-security-policy, you may need to add this into environment.js to allow ConfigCat requests.
module.exports = function (environment) {
let ENV = {
contentSecurityPolicy: {
'connect-src': ['https://cdn-global.configcat.com'],
},
};
};
Initializing the client
Without user identification
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
export default class WhateverRoute extends Route {
@service configCat;
beforeModel() {
return this.configCat.initClient();
}
}
With user identification
A ConfigCat user object is made of four properties (identifier, email, country and custom): structure
Calling .identifyUser() will initialize the client if needed.
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
export default class WhateverRoute extends Route {
@service configCat;
async model() {
const user = this.authenticate();
await this.configCat.identifyUser({
identifier: user.id,
email: user.email,
});
}
}
Using feature-flag values
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
export default class WhateverComponent extends Component {
@service configCat;
get isEnabled() {
return this.configCat.flags.isAwesomeFeatureEnabled;
}
}
{{#if this.isEnabled}}
Enabled
{{else}}
Disabled
{{/if}}
Template helpers
| Name | Parameters | Description |
|---|---|---|
is-flag-enabled |
key | Checks if the flag is enabled |
get-flag-value |
key | Gets the current flag value |
has-flag-value |
key, value | Compares the current flag value against a provided parameters |
Clearing data
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
export default class WhateverComponent extends Component {
@service configCat;
@action onClear() {
this.configCat.dispose();
}
}
Public methods and properties
| Name | Type | Description |
|---|---|---|
flags |
tracked property | Returns available feature-flags and values |
identifyUser |
method | Identifies user and update feature-flags values |
update |
method | Updates feature-flags values |
dispose |
method | Releases everything related to the ConfigCat client |
Testing
ember-config-cat comes with a couple of test-helpers:
// ...
import { setupConfigCat, TestContext } from 'ember-config-cat/test-support';
module('...', function (hooks) {
// ...
setupConfigCat(hooks);
test('...', async function (this: TestContext, assert) {
// configuring one flag
this.withFlag('featureA', true);
// configuring several flags
this.withFlags({ featureB: true, pricing: 10 });
// ...
});
});
Contributing
See the Contributing guide for details.
References
We draw our inspiration from the ember-launch-darkly addon
Docs
- ConfigCat API
- Using ConfigCat in JavaScript Documentation - SDK
- Browser compatibility
License
This project is licensed under the MIT License.