Computed Property Macros for Ember
Version 2.0+ will only work with Ember 2.0+ Version 3.0+ is only tested in the last 2 LTS.
Just run ember install ember-cpm
Just import individual macros from ember-cpm/macros/* or all macros from ember-cpm.
// Import only one macros
import ifNull from "ember-cpm/macros/if-null";
// or alternatively import all the namespace
import EmberCPM from "ember-cpm";To generate a new computed property macros with ember-cli
- Run
ember g macro <dasherized-macro-name>. This will generate a few files./addon/macros/dasherized-macro-name.js(the macro)./addon/tests/dummy/unit/macro/dasherized-macro-name-test.js(a test)*- and modify
./addon/ember-cpm.js
// import the macro
import camelizedMacroName from './macros/dasherized-macro-name.js'
...
var Macros = {
...
// allows use via EmberCPM.Macros.camelizedMacroName
camelizedMacroName: camelizedMacroName,
...
};ember d macro <dasherized-macro-name> will do the reverse of these changes
among-- returnstrueif the original value is among the given literals (testing using===)encodeURIComponent-- callsencodeURIComponenton the original valueencodeURI-- callsencodeURIon the original valuefirstPresent-- returns the first property with a value, as determined byEmber.isPresentfmt-- pass the original values into a format-stringhtmlEscape-- escapes the original value withHandlebars.Utils.escapeExpressionand wraps the result in aHandlebars.SafeString(since it's now safe)ifNull-- fall back on a default valuepromise-- wraps the original value in an already-resolved promisesafeString-- wraps the original value in aHandlebars.SafeStringjoin-- joins the supplied values together with a provided sepatatorquotient-- divides one numeric property or literal by anotherdifference-- subtracts one numeric property or literal from anotherproduct-- multiplies numeric properties and literals togethersum-- sums numeric properties and literals togetherconditional-- returns values based on a boolean property (good replacement for ternary operator)computedPromise-- Updates computed property when supplied callback (which must return a promise) is resolved
Unlike Ember's computed property macros, the macros in this addon are composable. That means you define macros inside other macros without defining them in a separate key.
import Ember from 'ember';
import EmberCPM from 'ember-cpm';
const { Macros: { sum, difference, product } } = EmberCPM;
export default Ember.Component.extend({
num1: 45,
num2: 3.5,
num3: 13.4,
num4: -2,
total: sum(
sum('num1', 'num2', 'num3'),
difference('num3', 'num2'),
product(difference('num2', 'num1'), 'num4')
)
});