# ember-buffered-proxy

> An Ember Object Proxy with change buffering

Latest version **2.1.1** (published 2022-05-11) · MIT license · 0 weekly downloads

## Install

```sh
npm install ember-buffered-proxy
pnpm add ember-buffered-proxy
yarn add ember-buffered-proxy
bun add ember-buffered-proxy
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.1.1 |
| Published | 2022-05-11 |
| First published | 2014-10-31 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | 12.* \|\| 14.* \|\| >= 16 |
| Dependencies | 2 |
| Unpacked size | 28.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 164 |
| Author | Kris Selden, Stefan Penner & Yapp Labs |
| Maintainers | krisselden, blimmer, lukemelia, raycohen, denisnazarov, stefanpenner, tniezurawski |
| Keywords | ember-addon |

## Links

- npm: https://www.npmjs.com/package/ember-buffered-proxy
- Repository: https://github.com/yapplabs/ember-buffered-proxy
- Homepage: https://github.com/yapplabs/ember-buffered-proxy#readme
- Issues: https://github.com/yapplabs/ember-buffered-proxy/issues
- npm.io page: https://npm.io/package/ember-buffered-proxy

## Dependencies (2)

- [ember-cli-babel](https://npm.io/package/ember-cli-babel.md) ^7.26.10
- [ember-compatibility-helpers](https://npm.io/package/ember-compatibility-helpers.md) ^1.2.6

## Recent versions

- 2.1.1 (latest) — 2022-05-11
- 2.0.0-beta.0 (beta) — 2020-01-10
- 2.1.0 — 2022-05-11
- 2.0.0 — 2021-08-03
- 1.0.1 — 2019-04-09
- 1.0.0 — 2018-04-24
- 1.0.0-beta.0 — 2018-03-23
- 0.8.1 — 2017-11-29
- 0.8.0 — 2017-11-21
- 0.7.0 — 2017-04-07
- 0.6.0 — 2016-06-01
- 0.5.1 — 2015-07-06
- 0.5.0 — 2015-03-09
- 0.4.0 — 2015-02-07
- 0.3.0 — 2015-02-07
- … 5 more at https://npm.io/package/ember-buffered-proxy/versions

## README

# ember-buffered-proxy

[![Build Status](https://github.com/yapplabs/ember-buffered-proxy/actions/workflows/ci.yml/badge.svg)](https://github.com/yapplabs/ember-buffered-proxy/actions/workflows/ci.yml)
[![Ember Observer Score](https://emberobserver.com/badges/ember-buffered-proxy.svg)](https://emberobserver.com/addons/ember-buffered-proxy)


An Ember Object Proxy (and mixin) that enables change buffering. Ever need to "hold back" property changes before they propagate? If so, this may be the addon for you.

## Usage

```sh
ember install ember-buffered-proxy
```

```js
import BufferedProxy from 'ember-buffered-proxy/proxy';

let content = {
  firstName: 'stefan'
};

let buffer = BufferedProxy.create({
  content: content
});

buffer.get('firstName'); // => 'stefan'
buffer.set('firstName', 'Kris');

buffer.get('firstName'); // => 'Kris'
buffer.get('content.firstName'); // => 'stefan'

buffer.get('hasChanges'); // => true
buffer.buffer; // => (get an object describing changed keys) -- {"firstName": "Kris"}

buffer.applyBufferedChanges();

buffer.get('firstName'); // => 'Kris'
buffer.get('content.firstName'); // => 'Kris'
buffer.get('hasChanges'); // => false

buffer.set('firstName', 'Luke');
buffer.get('firstName'); // => 'Luke'
buffer.get('content.firstName'); // => 'Kris'
buffer.hasChanged('firstName'); // => true

buffer.discardBufferedChanges();

buffer.get('firstName'); // => 'Kris'
buffer.get('content.firstName'); // => 'Kris'
buffer.hasChanged('firstName'); // => false

// Below demonstrates that applyBufferedChanges and discardBufferedChanges
// can take an optional array of keys.

buffer.set('email', 'example@example.com');
buffer.get('email'); // => 'example@example.com'
buffer.get('content.email'); // => undefined

buffer.set('address', '123 paradise road');
buffer.get('address'); // => '123 paradise road'
buffer.get('content.address'); // => undefined

buffer.applyBufferedChanges(['email']); // Only apply the email from the buffer

buffer.get('email'); // => 'example@example.com'
buffer.get('address'); // => '123 paradise road'
buffer.get('content.email'); // => 'example@example.com'
buffer.get('content.address'); // => undefined

buffer.setProperties({
  email: 'sample@sample.com',
  address: '1717 rose street'
});

buffer.discardBufferedChanges(['address']); // Discard only the address property from the buffer

buffer.get('email'); // => sample@sample.com
buffer.get('address'); // => undefined
```

You can also use these shorter method names

```js
buffer.discardChanges(); // equivalent to buffer.discardBufferedChanges()
buffer.applyChanges();   // equivalent to buffer.applyBufferedChanges()
```

Or you can grab the mixin directly

```js
import BufferedMixin from 'ember-buffered-proxy/mixin';

let content = {
  firstName: 'stefan'
};

let buffer = ObjectProxy.extend(BufferedMixin).create({
  content: content
});

// same as above
```


Compatibility
------------------------------------------------------------------------------

| Version | Minimal Ember version required |
| --- | --- |
| > 2.1.0 | 3.13 |
| > 1.0.1 | 3.8 |
| 0.8.0 - 1.0.1 | 2.15 |
| < 0.8 | 2.5 |

Contributing
------------------------------------------------------------------------------

See the [Contributing](CONTRIBUTING.md) guide for details.

License
------------------------------------------------------------------------------

This project is licensed under the [MIT License](LICENSE.md).

---
_Source: https://npm.io/package/ember-buffered-proxy · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
