@kaspernj/api-maker 1.0.116 → 1.0.120

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.
Files changed (42) hide show
  1. package/.eslintrc.js +5 -2
  2. package/__tests__/base-model.test.js +17 -0
  3. package/__tests__/cable-connection-pool.test.js +1 -1
  4. package/__tests__/support/task.js +1 -1
  5. package/__tests__/support/user.js +7 -2
  6. package/index.js +2 -0
  7. package/package.json +4 -4
  8. package/src/base-model.cjs +7 -27
  9. package/src/cable-connection-pool.cjs +1 -1
  10. package/src/cable-subscription-pool.cjs +1 -1
  11. package/src/can-can-loader.jsx +4 -4
  12. package/src/can-can.cjs +1 -1
  13. package/src/collection.cjs +2 -2
  14. package/src/commands-pool.cjs +1 -1
  15. package/src/custom-error.cjs +1 -1
  16. package/src/deserializer.cjs +3 -3
  17. package/src/devise.cjs +3 -3
  18. package/src/event-connection.jsx +3 -2
  19. package/src/event-created.jsx +3 -2
  20. package/src/event-destroyed.jsx +3 -2
  21. package/src/event-emitter-listener.jsx +1 -1
  22. package/src/event-listener.jsx +1 -1
  23. package/src/event-location-changed.jsx +21 -0
  24. package/src/event-model-class.jsx +3 -2
  25. package/src/event-updated.jsx +3 -2
  26. package/src/history-listener.jsx +1 -1
  27. package/src/instance-of-class-name.cjs +1 -1
  28. package/src/model-events.cjs +38 -0
  29. package/src/model-prop-type.cjs +1 -1
  30. package/src/models-response-reader.cjs +2 -2
  31. package/src/models.js.erb +6 -0
  32. package/src/preloaded.cjs +2 -2
  33. package/src/resource-route.cjs +1 -1
  34. package/src/resource-routes.jsx +1 -1
  35. package/src/routes-native.cjs +1 -1
  36. package/src/routes.cjs +1 -1
  37. package/src/serializer.cjs +1 -1
  38. package/src/translated-collections-data.js.erb +5 -0
  39. package/src/translated-collections.cjs +11 -0
  40. package/src/updated-attribute.jsx +4 -3
  41. package/src/validation-error.cjs +1 -1
  42. package/src/validation-errors.cjs +2 -2
package/.eslintrc.js CHANGED
@@ -73,7 +73,9 @@ module.exports = {
73
73
  "jest/no-large-snapshots": "error",
74
74
  "jest/no-restricted-matchers": "error",
75
75
  "jest/no-test-return-statement": "error",
76
+ "jest/prefer-expect-resolves": "off", // Needs configuration and no documentation could be found?
76
77
  "jest/prefer-hooks-on-top": "error",
78
+ "jest/prefer-to-be": "off", // Needs configuration and no documentation could be found?
77
79
  "jest/prefer-spy-on": "error",
78
80
  "jest/prefer-to-be-null": "error",
79
81
  "jest/prefer-to-be-undefined": "error",
@@ -86,7 +88,7 @@ module.exports = {
86
88
  "key-spacing": "error",
87
89
  "keyword-spacing": "error",
88
90
  "linebreak-style": ["error", "unix"],
89
- "line-comment-position": "error",
91
+ "line-comment-position": "off",
90
92
  "lines-around-comment": "error",
91
93
  "lines-between-class-members": "error",
92
94
  "max-classes-per-file": "error",
@@ -118,7 +120,7 @@ module.exports = {
118
120
  "no-implicit-coercion": "error",
119
121
  "no-implicit-globals": "error",
120
122
  "no-implied-eval": "error",
121
- "no-inline-comments": "error",
123
+ "no-inline-comments": "off",
122
124
  "no-invalid-this": "error",
123
125
  "no-iterator": "error",
124
126
  "no-label-var": "error",
@@ -244,6 +246,7 @@ module.exports = {
244
246
  "react/no-did-mount-set-state": "error",
245
247
  "react/no-did-update-set-state": "error",
246
248
  "react/no-multi-comp": "error",
249
+ "react/no-namespace": "error",
247
250
  "react/no-redundant-should-component-update": "error",
248
251
  "react/no-set-state": "error",
249
252
  "react/no-this-in-sfc": "error",
@@ -8,8 +8,25 @@ const {JSDOM} = require("jsdom")
8
8
  const {window} = new JSDOM()
9
9
  const document = window.document
10
10
  const ValidationError = require("../src/validation-error.cjs")
11
+ const User = require("./support/user")
11
12
 
12
13
  describe("BaseModel", () => {
14
+ describe("identifierKey", () => {
15
+ it("returns the id when persisted", () => {
16
+ const user = new User({a: {id: 5}})
17
+
18
+ expect(user.identifierKey()).toEqual(5)
19
+ })
20
+
21
+ it("returns the unique key when new record", () => {
22
+ const user = new User({isNewRecord: true})
23
+
24
+ user.uniqueKey = () => 45
25
+
26
+ expect(user.identifierKey()).toEqual(45)
27
+ })
28
+ })
29
+
13
30
  describe("update", () => {
14
31
  it("aborts if no changes", async () => {
15
32
  const model = new BaseModel()
@@ -3,7 +3,7 @@ jest.mock("@rails/actioncable", () => ({
3
3
  }))
4
4
  const CableConnectionPool = require("../src/cable-connection-pool.cjs")
5
5
  const CableSubscriptionPool = require("../src/cable-subscription-pool.cjs")
6
- const {digg} = require("@kaspernj/object-digger")
6
+ const {digg} = require("diggerize")
7
7
 
8
8
  describe("CableConnectionPool", () => {
9
9
  describe("connectCreated", () => {
@@ -2,7 +2,7 @@ module.exports = class Task {
2
2
  static modelClassData() {
3
3
  return {
4
4
  attributes: [],
5
- name: "User"
5
+ name: "Task"
6
6
  }
7
7
  }
8
8
 
@@ -1,8 +1,11 @@
1
- module.exports = class User {
1
+ const BaseModel = require("../../src/base-model.cjs")
2
+
3
+ module.exports = class User extends BaseModel {
2
4
  static modelClassData() {
3
5
  return {
4
6
  attributes: [],
5
- name: "User"
7
+ name: "User",
8
+ primaryKey: "id"
6
9
  }
7
10
  }
8
11
 
@@ -11,6 +14,8 @@ module.exports = class User {
11
14
  }
12
15
 
13
16
  constructor({a, b, isNewRecord = false, r}) {
17
+ super({a})
18
+
14
19
  this.abilities = b
15
20
  this._isNewRecord = isNewRecord
16
21
  this.modelData = a
package/index.js CHANGED
@@ -16,6 +16,7 @@ const EventCreated = require("./src/event-created").default
16
16
  const EventDestroyed = require("./src/event-destroyed").default
17
17
  const EventEmitterListener = require("./src/event-emitter-listener").default
18
18
  const EventListener = require("./src/event-listener").default
19
+ const EventLocationChanged = require("./src/event-location-changed").default
19
20
  const EventModelClass = require("./src/event-model-class").default
20
21
  const EventUpdated = require("./src/event-updated").default
21
22
  const HistoryListener = require("./src/history-listener").default
@@ -61,6 +62,7 @@ export {
61
62
  EventDestroyed,
62
63
  EventEmitterListener,
63
64
  EventListener,
65
+ EventLocationChanged,
64
66
  EventModelClass,
65
67
  EventUpdated,
66
68
  HistoryListener,
package/package.json CHANGED
@@ -16,7 +16,7 @@
16
16
  ]
17
17
  },
18
18
  "name": "@kaspernj/api-maker",
19
- "version": "1.0.116",
19
+ "version": "1.0.120",
20
20
  "description": "",
21
21
  "main": "index.js",
22
22
  "repository": {
@@ -51,15 +51,15 @@
51
51
  "eslint-find-rules": "^3.6.1",
52
52
  "eslint-plugin-jest": "^24.3.6",
53
53
  "eslint-plugin-react": "^7.23.2",
54
- "i18n-on-steroids": "^1.0.0",
54
+ "i18n-on-steroids": "^1.0.2",
55
55
  "jest": "^27.0.6",
56
- "jsdom": "^17.0.0"
56
+ "jsdom": "^18.0.0"
57
57
  },
58
58
  "dependencies": {
59
- "@kaspernj/object-digger": ">= 1.0.2",
60
59
  "@rails/actioncable": ">= 6.1.0",
61
60
  "clone-deep": ">= 4.0.1",
62
61
  "debounce": ">= 1.2.1",
62
+ "diggerize": ">= 1.0.3",
63
63
  "epic-locks": ">= 1.0.1",
64
64
  "form-data-objectizer": ">= 1.0.0",
65
65
  "form-serialize": ">= 0.7.2",
@@ -1,9 +1,8 @@
1
1
  const AttributeNotLoadedError = require("./attribute-not-loaded-error.cjs")
2
- const CableConnectionPool = require("./cable-connection-pool.cjs")
3
2
  const Collection = require("./collection.cjs")
4
3
  const CommandsPool = require("./commands-pool.cjs")
5
4
  const CustomError = require("./custom-error.cjs")
6
- const {digg} = require("@kaspernj/object-digger")
5
+ const {digg} = require("diggerize")
7
6
  const FormDataObjectizer = require("form-data-objectizer")
8
7
  const inflection = require("inflection")
9
8
  const ModelName = require("./model-name.cjs")
@@ -128,31 +127,6 @@ module.exports = class BaseModel {
128
127
  return clone
129
128
  }
130
129
 
131
- connect(eventName, callback) {
132
- const cableSubscription = CableConnectionPool.current().connectEvent(digg(this.modelClassData(), "name"), this.primaryKey(), eventName, callback)
133
- return cableSubscription
134
- }
135
-
136
- static connect(eventName, callback) {
137
- const cableSubscription = CableConnectionPool.current().connectModelClassEvent(digg(this.modelClassData(), "name"), eventName, callback)
138
- return cableSubscription
139
- }
140
-
141
- static connectCreated(callback) {
142
- const cableSubscription = CableConnectionPool.current().connectCreated(digg(this.modelClassData(), "name"), callback)
143
- return cableSubscription
144
- }
145
-
146
- connectDestroyed(callback) {
147
- const cableSubscription = CableConnectionPool.current().connectDestroyed(digg(this.modelClassData(), "name"), this.primaryKey(), callback)
148
- return cableSubscription
149
- }
150
-
151
- connectUpdated(callback) {
152
- const cableSubscription = CableConnectionPool.current().connectUpdate(digg(this.modelClassData(), "name"), this.primaryKey(), callback)
153
- return cableSubscription
154
- }
155
-
156
130
  cacheKey() {
157
131
  if (this.isPersisted()) {
158
132
  const keyParts = [
@@ -310,6 +284,12 @@ module.exports = class BaseModel {
310
284
  throw new new CustomError("Response wasn't successful", {model: this, response})
311
285
  }
312
286
 
287
+ identifierKey() {
288
+ if (!this._identifierKey) this._identifierKey = this.isPersisted() ? this.primaryKey() : this.uniqueKey()
289
+
290
+ return this._identifierKey
291
+ }
292
+
313
293
  isAssociationLoaded(associationName) {
314
294
  if (associationName in this.relationshipsCache) return true
315
295
  return false
@@ -1,6 +1,6 @@
1
1
  const CableSubscriptionPool = require("./cable-subscription-pool.cjs")
2
2
  const CableSubscription = require("./cable-subscription.cjs")
3
- const {dig} = require("@kaspernj/object-digger")
3
+ const {dig} = require("diggerize")
4
4
 
5
5
  module.exports = class ApiMakerCableConnectionPool {
6
6
  static current() {
@@ -1,7 +1,7 @@
1
1
  const ChannelsConsumer = require("./channels-consumer.cjs")
2
2
  const CommandsPool = require("./commands-pool.cjs")
3
3
  const Deserializer = require("./deserializer.cjs")
4
- const {digg} = require("@kaspernj/object-digger")
4
+ const {digg} = require("diggerize")
5
5
  const inflection = require("inflection")
6
6
  const Logger = require("./logger.cjs")
7
7
 
@@ -1,11 +1,11 @@
1
1
  import ApiMakerEventEmitterListener from "./event-emitter-listener"
2
- import {digg, digs} from "@kaspernj/object-digger"
2
+ import {digg, digs} from "diggerize"
3
3
  const CanCan = require("./can-can.cjs")
4
4
  const PropTypes = require("prop-types")
5
5
  const PropTypesExact = require("prop-types-exact")
6
6
  const React = require("react")
7
7
 
8
- export default class ApiMakerCanCanLoader extends React.Component {
8
+ export default class ApiMakerCanCanLoader extends React.PureComponent {
9
9
  static propTypes = PropTypesExact({
10
10
  abilities: PropTypes.array.isRequired,
11
11
  component: PropTypes.object.isRequired
@@ -32,12 +32,12 @@ export default class ApiMakerCanCanLoader extends React.Component {
32
32
  <ApiMakerEventEmitterListener
33
33
  events={events}
34
34
  event="onResetAbilities"
35
- onCalled={() => this.onResetAbilities()}
35
+ onCalled={this.onResetAbilities}
36
36
  />
37
37
  )
38
38
  }
39
39
 
40
- onResetAbilities() {
40
+ onResetAbilities = () => {
41
41
  this.updateComponent({canCan: undefined})
42
42
  this.loadAbilities()
43
43
  }
package/src/can-can.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
  const EventEmitter = require("events")
3
3
  const inflection = require("inflection")
4
4
  const {ReadersWriterLock} = require("epic-locks")
@@ -1,6 +1,6 @@
1
1
  const cloneDeep = require("clone-deep")
2
2
  const CommandsPool = require("./commands-pool.cjs")
3
- const {digg} = require("@kaspernj/object-digger")
3
+ const {digg} = require("diggerize")
4
4
  const inflection = require("inflection")
5
5
  const {merge} = require("./merge.cjs")
6
6
  const ModelsResponseReader = require("./models-response-reader.cjs")
@@ -205,7 +205,7 @@ module.exports = class ApiMakerCollection {
205
205
  modelClass() {
206
206
  const modelName = digg(this.args.modelClass.modelClassData(), "name")
207
207
 
208
- return digg(require("api-maker/models"), modelName)
208
+ return digg(require("@kaspernj/api-maker/src/models"), modelName)
209
209
  }
210
210
 
211
211
  clone() {
@@ -2,7 +2,7 @@ const Api = require("./api.cjs")
2
2
  const CommandSubmitData = require("./command-submit-data.cjs")
3
3
  const CustomError = require("./custom-error.cjs")
4
4
  const Deserializer = require("./deserializer.cjs")
5
- const {dig, digg} = require("@kaspernj/object-digger")
5
+ const {dig, digg} = require("diggerize")
6
6
  const FormDataObjectizer = require("form-data-objectizer")
7
7
  const Serializer = require("./serializer.cjs")
8
8
  const ValidationError = require("./validation-error.cjs")
@@ -1,4 +1,4 @@
1
- const {dig, digg} = require("@kaspernj/object-digger")
1
+ const {dig, digg} = require("diggerize")
2
2
 
3
3
  function errorMessages(args) {
4
4
  return digg(args, "response", "errors").map((error) => {
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
  const inflection = require("inflection")
3
3
  const Money = require("js-money")
4
4
 
@@ -18,14 +18,14 @@ module.exports = class ApiMakerDeserializer {
18
18
  return Money.fromInteger(cents, currency)
19
19
  } else if (object.api_maker_type == "model") {
20
20
  const modelClassName = inflection.classify(digg(object, "model_name"))
21
- const modelClass = digg(require("api-maker/models"), modelClassName)
21
+ const modelClass = digg(require("@kaspernj/api-maker/src/models"), modelClassName)
22
22
  const data = ApiMakerDeserializer.parse(digg(object, "serialized"))
23
23
  const model = new modelClass({data, isNewRecord: false})
24
24
 
25
25
  return model
26
26
  } else if (object.api_maker_type == "resource") {
27
27
  const modelClassName = inflection.classify(digg(object, "name"))
28
- const modelClass = digg(require("api-maker/models"), modelClassName)
28
+ const modelClass = digg(require("@kaspernj/api-maker/src/models"), modelClassName)
29
29
 
30
30
  return modelClass
31
31
  } else {
package/src/devise.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  const CanCan = require("./can-can.cjs")
2
2
  const Deserializer = require("./deserializer.cjs")
3
- const {digg} = require("@kaspernj/object-digger")
3
+ const {digg} = require("diggerize")
4
4
  const EventEmitter = require("events")
5
5
  const inflection = require("inflection")
6
6
  const Services = require("./services.cjs")
@@ -50,7 +50,7 @@ module.exports = class ApiMakerDevise {
50
50
 
51
51
  const postData = {username, password, args}
52
52
  const response = await Services.current().sendRequest("Devise::SignIn", postData)
53
- const modelClass = digg(require("api-maker/models"), inflection.camelize(args.scope))
53
+ const modelClass = digg(require("@kaspernj/api-maker/src/models"), inflection.camelize(args.scope))
54
54
  const modelInstance = new modelClass(digg(response, "model_data"))
55
55
 
56
56
  await CanCan.current().resetAbilities()
@@ -109,7 +109,7 @@ module.exports = class ApiMakerDevise {
109
109
  return null
110
110
 
111
111
  const parsedScopeData = Deserializer.parse(scopeData)
112
- const modelClass = digg(require("api-maker/models"), inflection.camelize(scope))
112
+ const modelClass = digg(require("@kaspernj/api-maker/src/models"), inflection.camelize(scope))
113
113
  const modelInstance = new modelClass({data: parsedScopeData})
114
114
 
115
115
  return modelInstance
@@ -1,8 +1,9 @@
1
+ const ModelEvents = require("./model-events.cjs")
1
2
  const PropTypes = require("prop-types")
2
3
  const PropTypesExact = require("prop-types-exact")
3
4
  const React = require("react")
4
5
 
5
- export default class ApiMakerEventConnection extends React.Component {
6
+ export default class ApiMakerEventConnection extends React.PureComponent {
6
7
  static defaultProps = {
7
8
  active: true
8
9
  }
@@ -15,7 +16,7 @@ export default class ApiMakerEventConnection extends React.Component {
15
16
  })
16
17
 
17
18
  componentDidMount() {
18
- this.subscription = this.props.model.connect(this.props.event, (...args) => this.onCall(...args))
19
+ this.subscription = ModelEvents.connect(this.props.model, this.props.event, (...args) => this.onCall(...args))
19
20
  }
20
21
 
21
22
  componentWillUnmount() {
@@ -1,9 +1,10 @@
1
1
  const debounce = require("debounce")
2
+ const ModelEvents = require("./model-events.cjs")
2
3
  const PropTypes = require("prop-types")
3
4
  const PropTypesExact = require("prop-types-exact")
4
5
  const React = require("react")
5
6
 
6
- export default class ApiMakerEventCreated extends React.Component {
7
+ export default class ApiMakerEventCreated extends React.PureComponent {
7
8
  static defaultProps = {
8
9
  active: true
9
10
  }
@@ -29,7 +30,7 @@ export default class ApiMakerEventCreated extends React.Component {
29
30
  }
30
31
 
31
32
  connect() {
32
- this.connectCreated = this.props.modelClass.connectCreated((...args) => this.onCreated(...args))
33
+ this.connectCreated = ModelEvents.connectCreated(this.props.modelClass, (...args) => this.onCreated(...args))
33
34
  }
34
35
 
35
36
  debounce() {
@@ -1,8 +1,9 @@
1
+ const ModelEvents = require("./model-events.cjs")
1
2
  const PropTypes = require("prop-types")
2
3
  const PropTypesExact = require("prop-types-exact")
3
4
  const React = require("react")
4
5
 
5
- export default class ApiMakerEventDestroyed extends React.Component {
6
+ export default class ApiMakerEventDestroyed extends React.PureComponent {
6
7
  static propTypes = PropTypesExact({
7
8
  model: PropTypes.object.isRequired,
8
9
  onDestroyed: PropTypes.func.isRequired
@@ -19,7 +20,7 @@ export default class ApiMakerEventDestroyed extends React.Component {
19
20
  }
20
21
 
21
22
  connect() {
22
- this.connectDestroyed = this.props.model.connectDestroyed(this.props.onDestroyed)
23
+ this.connectDestroyed = ModelEvents.connectDestroyed(this.props.model, this.props.onDestroyed)
23
24
  }
24
25
 
25
26
  render() {
@@ -2,7 +2,7 @@ const EventEmitter = require("events")
2
2
  const PropTypes = require("prop-types")
3
3
  const React = require("react")
4
4
 
5
- export default class ApiMakerEventEmitterListener extends React.Component {
5
+ export default class ApiMakerEventEmitterListener extends React.PureComponent {
6
6
  static propTypes = {
7
7
  events: PropTypes.instanceOf(EventEmitter).isRequired,
8
8
  event: PropTypes.string.isRequired,
@@ -2,7 +2,7 @@ const PropTypes = require("prop-types")
2
2
  const PropTypesExact = require("prop-types-exact")
3
3
  const React = require("react")
4
4
 
5
- export default class ApiMakerEventListener extends React.Component {
5
+ export default class ApiMakerEventListener extends React.PureComponent {
6
6
  static callEvent(target, eventName, args = []) {
7
7
  let event = document.createEvent("Event")
8
8
  event.initEvent(eventName, false, true)
@@ -0,0 +1,21 @@
1
+ import PropTypes from "prop-types"
2
+ import React from "react"
3
+
4
+ export default class EventLocationChanged extends React.PureComponent {
5
+ static propTypes = {
6
+ history: PropTypes.object.isRequired,
7
+ onChanged: PropTypes.func.isRequired
8
+ }
9
+
10
+ componentDidMount() {
11
+ this.appHistoryUnlisten = this.props.history.listen(this.props.onChanged)
12
+ }
13
+
14
+ componentWillUnmount() {
15
+ this.appHistoryUnlisten()
16
+ }
17
+
18
+ render() {
19
+ return null
20
+ }
21
+ }
@@ -1,8 +1,9 @@
1
+ const ModelEvents = require("./model-events.cjs")
1
2
  const PropTypes = require("prop-types")
2
3
  const PropTypesExact = require("prop-types-exact")
3
4
  const React = require("react")
4
5
 
5
- export default class ApiMakerEventModelClass extends React.Component {
6
+ export default class ApiMakerEventModelClass extends React.PureComponent {
6
7
  static propTypes = PropTypesExact({
7
8
  event: PropTypes.string.isRequired,
8
9
  modelClass: PropTypes.func.isRequired,
@@ -20,7 +21,7 @@ export default class ApiMakerEventModelClass extends React.Component {
20
21
  }
21
22
 
22
23
  connect() {
23
- this.connection = this.props.modelClass.connect(this.props.event, this.props.onCall)
24
+ this.connection = ModelEvents.connectModelClass(this.props.modelClass, this.props.event, this.props.onCall)
24
25
  }
25
26
 
26
27
  render() {
@@ -1,9 +1,10 @@
1
1
  const debounce = require("debounce")
2
+ const ModelEvents = require("./model-events.cjs")
2
3
  const PropTypes = require("prop-types")
3
4
  const PropTypesExact = require("prop-types-exact")
4
5
  const React = require("react")
5
6
 
6
- export default class ApiMakerEventUpdated extends React.Component {
7
+ export default class ApiMakerEventUpdated extends React.PureComponent {
7
8
  static defaultProps = {
8
9
  active: true
9
10
  }
@@ -41,7 +42,7 @@ export default class ApiMakerEventUpdated extends React.Component {
41
42
  connect() {
42
43
  const {model, onConnected} = this.props
43
44
 
44
- this.connectUpdated = model.connectUpdated((...args) => this.onUpdated(...args))
45
+ this.connectUpdated = ModelEvents.connectUpdated(model, (...args) => this.onUpdated(...args))
45
46
 
46
47
  if (onConnected) {
47
48
  this.connectUpdated.events.addListener("connected", this.onConnected)
@@ -1,7 +1,7 @@
1
1
  const PropTypes = require("prop-types")
2
2
  const PropTypesExact = require("prop-types-exact")
3
3
 
4
- export default class ApiMakerHistoryListener extends React.Component {
4
+ export default class ApiMakerHistoryListener extends React.PureComponent {
5
5
  static propTypes = PropTypesExact({
6
6
  onChanged: PropTypes.func.isRequired
7
7
  })
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
 
3
3
  const instanceOfClassName = (expectedClassName) => {
4
4
  return (props, propName, componentName) => {
@@ -0,0 +1,38 @@
1
+ const CableConnectionPool = require("./cable-connection-pool.cjs")
2
+
3
+ module.exports = class ModelEvents {
4
+ static connect(model, eventName, callback) {
5
+ const modelClassName = digg(model.modelClassData(), "name")
6
+ const cableSubscription = CableConnectionPool.current().connectEvent(modelClassName, model.primaryKey(), eventName, callback)
7
+
8
+ return cableSubscription
9
+ }
10
+
11
+ static connectModelClass(modelClass, eventName, callback) {
12
+ const modelClassName = digg(modelClass.modelClassData(), "name")
13
+ const cableSubscription = CableConnectionPool.current().connectModelClassEvent(modelClassName, eventName, callback)
14
+
15
+ return cableSubscription
16
+ }
17
+
18
+ static connectCreated(modelClass, callback) {
19
+ const modelClassName = digg(modelClass.modelClassData(), "name")
20
+ const cableSubscription = CableConnectionPool.current().connectCreated(modelClassName, callback)
21
+
22
+ return cableSubscription
23
+ }
24
+
25
+ static connectDestroyed(model, callback) {
26
+ const modelClassName = digg(model.modelClassData(), "name")
27
+ const cableSubscription = CableConnectionPool.current().connectDestroyed(modelClassName, model.primaryKey(), callback)
28
+
29
+ return cableSubscription
30
+ }
31
+
32
+ static connectUpdated(model, callback) {
33
+ const modelClassName = digg(model.modelClassData(), "name")
34
+ const cableSubscription = CableConnectionPool.current().connectUpdate(modelClassName, model.primaryKey(), callback)
35
+
36
+ return cableSubscription
37
+ }
38
+ }
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
  const Inflection = require("inflection")
3
3
 
4
4
  module.exports = class ApiMakerModelPropType {
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
  const inflection = require("inflection")
3
3
  const Preloaded = require("./preloaded.cjs")
4
4
 
@@ -23,7 +23,7 @@ module.exports = class ModelsResponseReader {
23
23
 
24
24
  for(const modelType in this.response.data) {
25
25
  const modelClassName = inflection.classify(modelType)
26
- const modelClass = digg(require("api-maker/models"), modelClassName)
26
+ const modelClass = digg(require("@kaspernj/api-maker/src/models"), modelClassName)
27
27
  const collectionName = modelClass.modelClassData().collectionName
28
28
 
29
29
  for(const modelId of this.response.data[modelType]) {
@@ -0,0 +1,6 @@
1
+ /* rails-erb-loader-dependencies api_maker/resources/ */
2
+
3
+ import {BaseModel, Collection} from "@kaspernj/api-maker"
4
+ import {digg} from "diggerize"
5
+
6
+ <%= ApiMaker::ModelClassesJavaScriptGeneratorService.execute! %>
package/src/preloaded.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
  const inflection = require("inflection")
3
3
 
4
4
  module.exports = class ApiMakerPreloaded {
@@ -12,7 +12,7 @@ module.exports = class ApiMakerPreloaded {
12
12
 
13
13
  for (const preloadedType in this.response.preloaded) {
14
14
  const modelClassName = inflection.classify(preloadedType)
15
- const modelClass = digg(require("api-maker/models"), modelClassName)
15
+ const modelClass = digg(require("@kaspernj/api-maker/src/models"), modelClassName)
16
16
 
17
17
  for(const preloadedId in this.response.preloaded[preloadedType]) {
18
18
  const preloadedData = this.response.preloaded[preloadedType][preloadedId]
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
  const inflection = require("inflection")
3
3
 
4
4
  module.exports = class ApiMakerResourceRoute {
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
  const React = require("react")
3
3
  const ResourceRoute = require("./resource-route.cjs")
4
4
  const {Route} = require("react-router-dom")
@@ -1,4 +1,4 @@
1
- const {dig, digg, digs} = require("@kaspernj/object-digger")
1
+ const {dig, digg, digs} = require("diggerize")
2
2
  const inflection = require("inflection")
3
3
  const qs = require("qs")
4
4
 
package/src/routes.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
  const inflection = require("inflection")
3
3
 
4
4
  module.exports = class ApiMakerRoutes {
@@ -1,4 +1,4 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
2
 
3
3
  module.exports = class Serializer {
4
4
  static serialize(arg) {
@@ -0,0 +1,5 @@
1
+ /* rails-erb-loader-dependencies models/ */
2
+
3
+ const translatedCollections = <%= ApiMaker::TranslatedCollections.translated_collections.to_json %>
4
+
5
+ export default translatedCollections
@@ -0,0 +1,11 @@
1
+ const translatedCollectionsData = require("./translated-collections-data").default
2
+
3
+ export default class ApiMakerTranslatedCollections {
4
+ static get(modelClass, collectionName) {
5
+ const locale = I18n.locale
6
+ const modelClassName = digg(modelClass.modelClassData(), "name")
7
+ const collection = digg(translatedCollectionsData, modelClassName, collectionName, locale, "collection_array")
8
+
9
+ return collection
10
+ }
11
+ }
@@ -1,9 +1,10 @@
1
- const {digg} = require("@kaspernj/object-digger")
1
+ const {digg} = require("diggerize")
2
+ const ModelEvents = require("./model-events.cjs")
2
3
  const PropTypes = require("prop-types")
3
4
  const PropTypesExact = require("prop-types-exact")
4
5
  const React = require("react")
5
6
 
6
- export default class ApiMakerUpdatedAttribute extends React.Component {
7
+ export default class ApiMakerUpdatedAttribute extends React.PureComponent {
7
8
  static propTypes = PropTypesExact({
8
9
  attribute: PropTypes.string,
9
10
  model: PropTypes.object.isRequired,
@@ -30,7 +31,7 @@ export default class ApiMakerUpdatedAttribute extends React.Component {
30
31
  }
31
32
 
32
33
  connect() {
33
- this.connectUpdated = this.props.model.connectUpdated(args => {
34
+ this.connectUpdated = ModelEvents.connectUpdated(this.props.model, args => {
34
35
  if (!this.props.attribute || args.model.isAttributeLoaded(this.props.attribute)) {
35
36
  this.setState(
36
37
  {model: args.model},
@@ -1,5 +1,5 @@
1
1
  const CustomError = require("./custom-error.cjs")
2
- const {digg} = require("@kaspernj/object-digger")
2
+ const {digg} = require("diggerize")
3
3
  const inflection = require("inflection")
4
4
 
5
5
  module.exports = class ValidationError extends CustomError {
@@ -1,4 +1,4 @@
1
- const {digg, digs} = require("@kaspernj/object-digger")
1
+ const {digg, digs} = require("diggerize")
2
2
  const inflection = require("inflection")
3
3
 
4
4
  class ValidationError {
@@ -65,7 +65,7 @@ class ValidationError {
65
65
  getModelClass() {
66
66
  const modelName = inflection.classify(digg(this, "modelName"))
67
67
 
68
- return digg(require("api-maker/models"), modelName)
68
+ return digg(require("@kaspernj/api-maker/src/models"), modelName)
69
69
  }
70
70
 
71
71
  setHandled() {