@cityads/ember-data-change-tracker 0.11.4 → 0.12.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,13 +10,13 @@
10
10
  attributes. But if you don't have object types it works fine.
11
11
 
12
12
  This addon aims to fill in the gaps in the change tracking / rollback that ember data does now.
13
-
13
+
14
14
  - Currently ember-data
15
15
  - tracks changes for numbers/strings/date/boolean attributes
16
16
  - has a ```changedAttributes()``` method to see what changed => [ last, current ]
17
17
  - has a ```rollbackAttributes()``` method to rollback attributes
18
18
  - has a ```hasDirtyAttributes``` computed property
19
-
19
+
20
20
  - This addon:
21
21
  - tracks modifications in attributes that are object/json/custom type
22
22
  - tracks replacement of belongsTo associations
@@ -31,7 +31,7 @@ This addon aims to fill in the gaps in the change tracking / rollback that ember
31
31
  - Can be used in two modes
32
32
  - auto track mode
33
33
  - manual track mode ( the default )
34
-
34
+
35
35
  ## Installation
36
36
 
37
37
  * `ember install @cityads/ember-data-change-tracker`
@@ -42,22 +42,36 @@ This addon aims to fill in the gaps in the change tracking / rollback that ember
42
42
 
43
43
  ```javascript
44
44
  export default Model.extend({
45
- name: attr('string'), // ember-data tracks this already
46
- info: attr('object'), // ember-data does not track modifications
47
- json: attr(), // ember-data does not track modifications if this is object
48
- company: belongsTo('company', { async: false, polymorphic: true }), // ember-data does not track replacement
49
- profile: belongsTo('profile', { async: true }), // ember-data does not track replacement
50
- projects: hasMany('project', { async: false }), // ember-data does not track additions/deletions
51
- pets: hasMany('pet', { async: true, polymorphic: true }) // ember-data does not track additions/deletions
52
- });
45
+ name: attr('string'), // ember-data tracks this already
46
+ info: attr('object'), // ember-data does not track modifications
47
+ json: attr(), // ember-data does not track modifications if this is object
48
+ company: belongsTo('company', { async: false, polymorphic: true }), // ember-data does not track replacement
49
+ profile: belongsTo('profile', { async: true }), // ember-data does not track replacement
50
+ projects: hasMany('project', { async: false }), // ember-data does not track additions/deletions
51
+ pets: hasMany('pet', { async: true, polymorphic: true }) // ember-data does not track additions/deletions
52
+ });
53
53
  ```
54
54
 
55
55
  You can not currently rollback the info, json if they are modified
56
56
  or company, profile, projects and pets if they change.
57
-
58
-
57
+
58
+
59
+ ### setting up tracking
60
+
61
+ This addon exports a mixin you should add to the models you want to track:
62
+
63
+ ```javascript
64
+ import ChangeTracker from '@cityads/ember-data-change-tracker/mixins/change-tracker';
65
+
66
+ export default Model.extend(ChangeTracker, {
67
+ name: attr('string'),
68
+ ...
69
+ pets: hasMany('pet', { async: true, polymorphic: true })
70
+ });
71
+ ```
72
+
59
73
  ### model changes
60
-
74
+
61
75
  - The method ```modelChanges()``` is added to model
62
76
  - Shows you any changes in an object attribute type
63
77
  - whether modified or replacing the value
@@ -73,7 +87,7 @@ This addon aims to fill in the gaps in the change tracking / rollback that ember
73
87
  Example: ( remove from a hasMany )
74
88
  ```javascript
75
89
  user.get('projects').removeObject(firstProject); // remove project1
76
- user.modelChanges() //=> {projects: true }
90
+ user.modelChanges() //=> { projects: true }
77
91
  ```
78
92
 
79
93
 
@@ -103,9 +117,9 @@ Usage:
103
117
 
104
118
  // manual tracking model means you have to explicitly call => startTrack
105
119
  // to save the current state of things before you edit
106
- user.startTrack();
120
+ user.startTrack();
107
121
 
108
- // edit things
122
+ // edit things
109
123
  user.setProperties({
110
124
  'info.foo': 3,
111
125
  company: smallCompany,
@@ -144,15 +158,15 @@ Usage:
144
158
 
145
159
  let user = make('user', { company: bigCompany, pets });
146
160
 
147
- user.startTrack();
161
+ user.startTrack();
148
162
 
149
- // edit things
163
+ // edit things
150
164
  user.set('name', "new name");
151
165
  user.get('isDirty'); //=> true
152
-
166
+
153
167
  user.rollback();
154
168
  user.get('isDirty'); //=> false
155
-
169
+
156
170
  user.set('company', smallCompany);
157
171
  user.get('hasDirtyRelations'); //=> true
158
172
  user.get('isDirty'); //=> true
@@ -163,18 +177,18 @@ Usage:
163
177
  user.set('pets', [cat, cat2]);
164
178
  user.get('hasDirtyRelations'); //=> true
165
179
  user.get('isDirty'); //=> true
166
-
180
+
167
181
  user.rollback();
168
182
  user.get('isDirty'); //=> false
169
183
 
170
- // things that don't work
171
- user.set('info.foo', 3);
184
+ // things that don't work
185
+ user.set('info.foo', 3);
172
186
  user.get('isDirty'); //=> false ( object/array attributes don't work for computed isDirty )
173
187
 
174
188
  ```
175
189
 
176
190
  ### Configuration
177
-
191
+
178
192
  - Global configuration
179
193
  - By default the global settings are:
180
194
  - { **trackHasMany**: *true*, **auto**: *false*, **enableIsDirty**: *false* }
@@ -305,4 +319,4 @@ moduleForModel('project', 'Unit | Model | project', {
305
319
  }
306
320
  });
307
321
 
308
- ```
322
+ ```
package/addon/index.js CHANGED
@@ -1,4 +1,5 @@
1
- import {initializer} from './initializer';
1
+ import changeTracker from './mixins/change-tracker';
2
2
  import keepOnlyChanged from './mixins/keep-only-changed';
3
+ import Model from './model';
3
4
 
4
- export {keepOnlyChanged, initializer};
5
+ export { changeTracker, keepOnlyChanged, Model };
@@ -1,10 +1,8 @@
1
1
  import Ember from 'ember';
2
- import Model from 'ember-data/model';
3
- import Tracker from './tracker';
2
+ import Mixin from '@ember/object/mixin';
3
+ import Tracker from '../tracker';
4
4
 
5
- const assign = Object.assign || Ember.assign || Ember.merge;
6
-
7
- Model.reopen({
5
+ export default Mixin.create({
8
6
 
9
7
  init(){
10
8
  this._super(...arguments);
@@ -42,7 +40,7 @@ Model.reopen({
42
40
  * @returns {*}
43
41
  */
44
42
  modelChanges() {
45
- let changed = assign({}, this.changedAttributes());
43
+ let changed = { ...this.changedAttributes() };
46
44
  let trackerInfo = Tracker.metaInfo(this);
47
45
  for (let key in trackerInfo) {
48
46
  if (!changed[key] && trackerInfo.hasOwnProperty(key)) {
@@ -1,7 +1,7 @@
1
- import Ember from 'ember';
1
+ import Mixin from '@ember/object/mixin';
2
2
 
3
3
  // EmberData does not serialize hasMany relationships by default
4
- export default Ember.Mixin.create({
4
+ export default Mixin.create({
5
5
  keepValue(record, key) {
6
6
  return record.get('isNew') || record.didChange(key);
7
7
  },
package/addon/model.js ADDED
@@ -0,0 +1,4 @@
1
+ import Model from 'ember-data/model';
2
+ import changeTracker from './mixins/change-tracker';
3
+
4
+ export default Model.extend(changeTracker);
package/addon/tracker.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import Ember from 'ember';
2
2
  import { didModelChange, didModelsChange, relationShipTransform, relationshipKnownState } from './utilities';
3
3
 
4
- const assign = Object.assign || Ember.assign || Ember.merge;
5
4
  export const ModelTrackerKey = '-change-tracker';
6
5
  export const RelationshipsKnownTrackerKey = '-change-tracker-relationships-known';
7
6
  const alreadyTrackedRegex = /^-mf-|string|boolean|date|^number$/,
@@ -165,7 +164,7 @@ export default class Tracker {
165
164
  static options(model) {
166
165
  let envConfig = this.envConfig(model);
167
166
  let modelConfig = this.modelConfig(model);
168
- let opts = assign({}, defaultOpts, envConfig, modelConfig);
167
+ let opts = { ...defaultOpts, ...envConfig, ...modelConfig };
169
168
 
170
169
  let unknownOpts = Object.keys(opts).filter((v) => !knownTrackerOpts.includes(v));
171
170
  Ember.assert(`[ember-data-change-tracker] changeTracker options can have
@@ -1,19 +1,19 @@
1
- import DS from 'ember-data';
2
- import Ember from 'ember';
1
+ import Transform from 'ember-data/transform';
2
+ import { isEmpty, typeOf } from '@ember/utils';
3
3
 
4
- export default DS.Transform.extend({
4
+ export default Transform.extend({
5
5
  serialize: function(value) {
6
6
  return value && JSON.stringify(value);
7
7
  },
8
8
 
9
9
  deserialize: function(value) {
10
- if (Ember.isEmpty(value)) {
10
+ if (isEmpty(value)) {
11
11
  return {};
12
12
  }
13
- if (Ember.typeOf(value) === "object") {
13
+ if (typeOf(value) === 'object') {
14
14
  return value;
15
15
  }
16
- if (Ember.typeOf(value) === 'string') {
16
+ if (typeOf(value) === 'string') {
17
17
  return JSON.parse(value);
18
18
  }
19
19
  }
@@ -0,0 +1 @@
1
+ export { default } from '@cityads/ember-data-change-tracker/mixins/change-tracker';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cityads/ember-data-change-tracker",
3
- "version": "0.11.4",
3
+ "version": "0.12.0-beta.1",
4
4
  "description": "Track changes and rollback object attributes and relationships. Ember data 2.5+",
5
5
  "keywords": [
6
6
  "ember-addon",
@@ -32,7 +32,7 @@
32
32
  "@ember/optional-features": "^0.7.0",
33
33
  "broccoli-asset-rev": "^2.7.0",
34
34
  "ember-fetch": "^6.5.1",
35
- "ember-cli": "3.8",
35
+ "ember-cli": "~4.8.1",
36
36
  "ember-cli-app-version": "^2.0.0",
37
37
  "ember-cli-dependency-checker": "^3.2.0",
38
38
  "ember-cli-eslint": "^4.2.3",
@@ -43,7 +43,7 @@
43
43
  "ember-cli-release": "^0.2.9",
44
44
  "ember-cli-sri": "^2.1.1",
45
45
  "ember-cli-uglify": "^1.2.0",
46
- "ember-data": "3.8",
46
+ "ember-data": "~4.7.3",
47
47
  "ember-data-factory-guy": "3.9.4",
48
48
  "ember-data-model-fragments": "4.0.0",
49
49
  "ember-disable-prototype-extensions": "^1.1.0",
@@ -51,7 +51,7 @@
51
51
  "ember-load-initializers": "^2.0.0",
52
52
  "ember-resolver": "5.0.1",
53
53
  "ember-sinon": "4.0.0",
54
- "ember-source": "3.8",
54
+ "ember-source": "~4.8.0",
55
55
  "ember-source-channel-url": "^1.1.0",
56
56
  "ember-try": "^0.2.23",
57
57
  "loader.js": "4.7.0"
@@ -1,4 +0,0 @@
1
- /* global require */
2
- export function initializer() {
3
- require('@cityads/ember-data-change-tracker/model-ext');
4
- }
@@ -1,7 +0,0 @@
1
- import {initializer as initialize} from '@cityads/ember-data-change-tracker';
2
-
3
- export default {
4
- name: 'ember-data-change-tracker',
5
- after: 'ember-data',
6
- initialize
7
- };