Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

MakeMusicInc/ember-config-cat

Repository files navigation

ember-config-cat

Build

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
 }
 };
};
Option Default Description Links
mode 'auto' Polling mode: 'auto'/'lazy'/'manual' πŸ”—
local false Enabling local mode: will only use default flag values -
flags - Default values for feature-flags -
sdkKey – Your SDK Key πŸ”—
requestTimeoutMs 30000 Amount of time the SDK waits before returning cached values πŸ”—
maxInitWaitTimeSeconds 5 Maximum waiting time between client init and config fetch πŸ”—
pollIntervalSeconds 60 Polling interval πŸ”—
cacheTimeToLiveSeconds 60 Cache TTL πŸ”—
dataGovernance 0 (Global) Determine the CDN location of the data: 0 for Global / 1 for EuOnly πŸ”—
logLevel - Set a custom log level πŸ”—
  • requestTimeoutMs and dataGovernance are common polling options to the three available modes
  • All default values except mode, local and autoStart are defined in the ConfigCat SDK
  • You may define either local or sdkKey but the addon will fallback to local mode if no sdkKey is 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, type 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

License

This project is licensed under the MIT License.

About

Ember addon for ConfigCat

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

Contributors

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /