hyper-resource 1.0.0.lap53 → 1.0.0.lap55

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2fdb0a8d50f4f15b310d470b2e409627c2793c0512907b643b57919d204f58bb
4
- data.tar.gz: b61972174d030887f5d07b4a3a299f77ce0b7c816a97b4c882d18e26d9c28235
3
+ metadata.gz: 2f0ff6a1a9ad1ecd8ed92b3d96cab2fbe6965fcd86dfd41d0b9ffa4173f47f90
4
+ data.tar.gz: e7cc3aadbcc04ca3942c6f1550562ca063cd1e53943febe573277f8d8edf507d
5
5
  SHA512:
6
- metadata.gz: 3a4c12776795ea0c9cfbc88af0114e436b7b774fe7ddea644bbf06ef8d922721c8e5d290805c3bd148edcbda23c828c402a144a61eca4e6249ae68928bd2d0f1
7
- data.tar.gz: 3577ebf9be0425fad5d02e0a4151b3915b96cb037155c663c3a2f8333b1471f565d3fb494917d2f6e5fc2ebb1dac02be3ac531f86345a4adb179dbaacf203423
6
+ metadata.gz: 6bae29ddaf1e2fa9b5e48071cbeaa3cb4431a36bc0cb1681e8493d5f5a04c833d249550fb314f0f69a939c24e08048fe1b213a2cc98b976420c842a53ac9679c
7
+ data.tar.gz: 413c863a6c1c88e2a2dc69a4cc54a84b6269551ef7360b1d3e8bd532278ad522f6f83383b8f973c679990e20d90259c48ec62bb2ae1eb6503283054674a47ab0
@@ -14,11 +14,17 @@ module HyperRecord
14
14
 
15
15
  def all
16
16
  _register_class_observer
17
- if _class_fetch_states[:all] == 'f'
17
+ if _class_fetch_states.has_key?(:all) && 'fi'.include?(_class_fetch_states[:all]) # if f_etched or i_n progress of fetching
18
18
  collection = HyperRecord::Collection.new
19
19
  _record_cache.each_value { |record| collection.push(record) }
20
20
  return collection
21
21
  end
22
+ promise_all
23
+ HyperRecord::Collection.new
24
+ end
25
+
26
+ def promise_all
27
+ _class_fetch_states[:all] = 'i'
22
28
  _promise_get("#{resource_base_uri}.json").then do |response|
23
29
  collection = _convert_array_to_collection(response.json[self.to_s.underscore.pluralize])
24
30
  _class_fetch_states[:all] = 'f'
@@ -29,7 +35,6 @@ module HyperRecord
29
35
  `console.error(error_message)`
30
36
  response
31
37
  end
32
- HyperRecord::Collection.new
33
38
  end
34
39
 
35
40
  def belongs_to(direction, name = nil, options = { type: nil })
@@ -44,21 +49,25 @@ module HyperRecord
44
49
  name = direction
45
50
  end
46
51
  reflections[name] = { direction: direction, type: options[:type], kind: :belongs_to }
52
+ define_method("promise_#{name}") do
53
+ @fetch_states[name] = 'i'
54
+ self.class._promise_get("#{self.class.resource_base_uri}/#{self.id}/relations/#{name}.json").then do |response|
55
+ @relations[name] = self.class._convert_json_hash_to_record(response.json[self.class.to_s.underscore][name])
56
+ @fetch_states[name] = 'f'
57
+ _notify_observers
58
+ @relations[name]
59
+ end.fail do |response|
60
+ error_message = "#{self.class.to_s}[#{self.id}].#{name}, a belongs_to association, failed to fetch records!"
61
+ `console.error(error_message)`
62
+ response
63
+ end
64
+ end
47
65
  define_method(name) do
48
66
  _register_observer
49
- if @fetch_states[name] == 'f'
67
+ if 'fi'.include?(@fetch_states[name])
50
68
  @relations[name]
51
69
  elsif self.id
52
- self.class._promise_get("#{self.class.resource_base_uri}/#{self.id}/relations/#{name}.json").then do |response|
53
- @relations[name] = self.class._convert_json_hash_to_record(response.json[self.class.to_s.underscore][name])
54
- @fetch_states[name] = 'f'
55
- _notify_observers
56
- @relations[name]
57
- end.fail do |response|
58
- error_message = "#{self.class.to_s}[#{self.id}].#{name}, a belongs_to association, failed to fetch records!"
59
- `console.error(error_message)`
60
- response
61
- end
70
+ send("promise_#{name}")
62
71
  @relations[name]
63
72
  else
64
73
  @relations[name]
@@ -67,12 +76,13 @@ module HyperRecord
67
76
  define_method("update_#{name}") do
68
77
  @fetch_states[name] = 'u'
69
78
  end
70
- define_method("#{name}=") do |arg|
71
- _register_observer
72
- @relations[name] = arg
73
- @fetch_states[name] = 'f'
74
- @relations[name]
75
- end
79
+ # TODO
80
+ # define_method("#{name}=") do |arg|
81
+ # _register_observer
82
+ # @relations[name] = arg
83
+ # @fetch_states[name] = 'f'
84
+ # @relations[name]
85
+ # end
76
86
  end
77
87
 
78
88
  def create(record_hash = {})
@@ -80,9 +90,9 @@ module HyperRecord
80
90
  record.save
81
91
  end
82
92
 
83
- def create_record(record_hash = {})
93
+ def promise_create(record_hash = {})
84
94
  record = new(record_hash)
85
- record.save_record
95
+ record.promise_save
86
96
  end
87
97
 
88
98
  def find(id)
@@ -97,39 +107,40 @@ module HyperRecord
97
107
  record_in_progress_key = "#{self.to_s}_#{record_in_progress.object_id}"
98
108
  React::State.get_state(observer, record_in_progress_key) if observer
99
109
  return _record_cache[sid] if _record_cache.has_key?(sid) && _class_fetch_states["record_#{id}"] == 'i'
100
- _find_record(id, record_in_progress).then do
110
+ _promise_find(id, record_in_progress).then do
101
111
  React::State.set_state(observer, record_in_progress_key, `Date.now() + Math.random()`) if observer
102
112
  end
103
113
  record_in_progress
104
114
  end
105
115
 
106
- def find_record(id)
116
+ def promise_find(id)
107
117
  sid = id.to_s
108
118
  record_in_progress = if _record_cache.has_key?(sid)
109
119
  _record_cache[sid]
110
120
  else
111
121
  self.new(id: id)
112
122
  end
113
- _find_record(id, record_in_progress)
114
- end
115
-
116
- def find_record_by(hash)
117
- if hash.has_key?[:id] && _record_cache.has_key?(hash[:id].to_s)
118
- record = _record_cache[hash[:id].to_s]
119
- found = true
120
- hash.each do |k,v|
121
- if record.send(k) != v
122
- found = false
123
- break
124
- end
125
- end
126
- return record if found
127
- end
128
- # TODO needs clarification about how to call the endpoint
129
- _promise_get("#{resource_base_uri}/#{id}.json").then do |response|
130
- self.new(response.json[self.to_s.underscore])
131
- end
132
- end
123
+ _promise_find(id, record_in_progress)
124
+ end
125
+
126
+ # TODO find_by
127
+ # def promise_find_by(hash)
128
+ # if hash.has_key?[:id] && _record_cache.has_key?(hash[:id].to_s)
129
+ # record = _record_cache[hash[:id].to_s]
130
+ # found = true
131
+ # hash.each do |k,v|
132
+ # if record.send(k) != v
133
+ # found = false
134
+ # break
135
+ # end
136
+ # end
137
+ # return record if found
138
+ # end
139
+ # # TODO needs clarification about how to call the endpoint
140
+ # _promise_get("#{resource_base_uri}/#{id}.json").then do |response|
141
+ # self.new(response.json[self.to_s.underscore])
142
+ # end
143
+ # end
133
144
 
134
145
  def has_and_belongs_to_many(direction, name = nil, options = { type: nil })
135
146
  if name.is_a?(Hash)
@@ -143,22 +154,26 @@ module HyperRecord
143
154
  name = direction
144
155
  end
145
156
  reflections[name] = { direction: direction, type: options[:type], kind: :has_and_belongs_to_many }
157
+ define_method("promise_#{name}") do
158
+ @fetch_states[name] = 'i'
159
+ self.class._promise_get("#{self.class.resource_base_uri}/#{self.id}/relations/#{name}.json").then do |response|
160
+ collection = self.class._convert_array_to_collection(response.json[self.class.to_s.underscore][name], self, name)
161
+ @relations[name] = collection
162
+ @fetch_states[name] = 'f'
163
+ _notify_observers
164
+ @relations[name]
165
+ end.fail do |response|
166
+ error_message = "#{self.class.to_s}[#{self.id}].#{name}, a has_and_belongs_to_many association, failed to fetch records!"
167
+ `console.error(error_message)`
168
+ response
169
+ end
170
+ end
146
171
  define_method(name) do
147
172
  _register_observer
148
- if @fetch_states[name] == 'f'
173
+ if @fetch_states.has_key?(name) && 'fi'.include?(@fetch_states[name])
149
174
  @relations[name]
150
175
  elsif self.id
151
- self.class._promise_get("#{self.class.resource_base_uri}/#{self.id}/relations/#{name}.json").then do |response|
152
- collection = self.class._convert_array_to_collection(response.json[self.class.to_s.underscore][name], self, name)
153
- @relations[name] = collection
154
- @fetch_states[name] = 'f'
155
- _notify_observers
156
- @relations[name]
157
- end.fail do |response|
158
- error_message = "#{self.class.to_s}[#{self.id}].#{name}, a has_and_belongs_to_many association, failed to fetch records!"
159
- `console.error(error_message)`
160
- response
161
- end
176
+ send("promise_#{name}")
162
177
  @relations[name]
163
178
  else
164
179
  @relations[name]
@@ -167,19 +182,20 @@ module HyperRecord
167
182
  define_method("update_#{name}") do
168
183
  @fetch_states[name] = 'u'
169
184
  end
170
- define_method("#{name}=") do |arg|
171
- _register_observer
172
- collection = if arg.is_a?(Array)
173
- HyperRecord::Collection.new(arg, self, name)
174
- elsif arg.is_a?(HyperRecord::Collection)
175
- arg
176
- else
177
- raise "Argument must be a HyperRecord::Collection or a Array"
178
- end
179
- @relations[name] = collection
180
- @fetch_states[name] = 'f'
181
- @relations[name]
182
- end
185
+ # TODO
186
+ # define_method("#{name}=") do |arg|
187
+ # _register_observer
188
+ # collection = if arg.is_a?(Array)
189
+ # HyperRecord::Collection.new(arg, self, name)
190
+ # elsif arg.is_a?(HyperRecord::Collection)
191
+ # arg
192
+ # else
193
+ # raise "Argument must be a HyperRecord::Collection or a Array"
194
+ # end
195
+ # @relations[name] = collection
196
+ # @fetch_states[name] = 'f'
197
+ # @relations[name]
198
+ # end
183
199
  end
184
200
 
185
201
  def has_many(direction, name = nil, options = { type: nil })
@@ -194,22 +210,26 @@ module HyperRecord
194
210
  name = direction
195
211
  end
196
212
  reflections[name] = { direction: direction, type: options[:type], kind: :has_many }
213
+ define_method("promise_#{name}") do
214
+ @fetch_states[name] = 'i'
215
+ self.class._promise_get("#{self.class.resource_base_uri}/#{self.id}/relations/#{name}.json").then do |response|
216
+ collection = self.class._convert_array_to_collection(response.json[self.class.to_s.underscore][name], self, name)
217
+ @relations[name] = collection
218
+ @fetch_states[name] = 'f'
219
+ _notify_observers
220
+ @relations[name]
221
+ end.fail do |response|
222
+ error_message = "#{self.class.to_s}[#{self.id}].#{name}, a has_many association, failed to fetch records!"
223
+ `console.error(error_message)`
224
+ response
225
+ end
226
+ end
197
227
  define_method(name) do
198
228
  _register_observer
199
- if @fetch_states[name] == 'f'
229
+ if @fetch_states.has_key?(name) && 'fi'.include?(@fetch_states[name])
200
230
  @relations[name]
201
231
  elsif self.id
202
- self.class._promise_get("#{self.class.resource_base_uri}/#{self.id}/relations/#{name}.json").then do |response|
203
- collection = self.class._convert_array_to_collection(response.json[self.class.to_s.underscore][name], self, name)
204
- @relations[name] = collection
205
- @fetch_states[name] = 'f'
206
- _notify_observers
207
- @relations[name]
208
- end.fail do |response|
209
- error_message = "#{self.class.to_s}[#{self.id}].#{name}, a has_many association, failed to fetch records!"
210
- `console.error(error_message)`
211
- response
212
- end
232
+ send("promise_#{name}")
213
233
  @relations[name]
214
234
  else
215
235
  @relations[name]
@@ -218,19 +238,19 @@ module HyperRecord
218
238
  define_method("update_#{name}") do
219
239
  @fetch_states[name] = 'u'
220
240
  end
221
- define_method("#{name}=") do |arg|
222
- _register_observer
223
- collection = if arg.is_a?(Array)
224
- HyperRecord::Collection.new(arg, self, name)
225
- elsif arg.is_a?(HyperRecord::Collection)
226
- arg
227
- else
228
- raise "Argument must be a HyperRecord::Collection or a Array"
229
- end
230
- @relations[name] = collection
231
- @fetch_states[name] = 'f'
232
- @relations[name]
233
- end
241
+ # define_method("#{name}=") do |arg|
242
+ # _register_observer
243
+ # collection = if arg.is_a?(Array)
244
+ # HyperRecord::Collection.new(arg, self, name)
245
+ # elsif arg.is_a?(HyperRecord::Collection)
246
+ # arg
247
+ # else
248
+ # raise "Argument must be a HyperRecord::Collection or a Array"
249
+ # end
250
+ # @relations[name] = collection
251
+ # @fetch_states[name] = 'f'
252
+ # @relations[name]
253
+ # end
234
254
  end
235
255
 
236
256
  def has_one(direction, name, options = { type: nil })
@@ -245,21 +265,25 @@ module HyperRecord
245
265
  name = direction
246
266
  end
247
267
  reflections[name] = { direction: direction, type: options[:type], kind: :has_one }
268
+ define_method("promise_#{name}") do
269
+ @fetch_states[name] = 'i'
270
+ self.class._promise_get("#{self.class.resource_base_uri}/#{self.id}/relations/#{name}.json").then do |response|
271
+ @relations[name] = self.class._convert_json_hash_to_record(response.json[self.class.to_s.underscore][name])
272
+ @fetch_states[name] = 'f'
273
+ _notify_observers
274
+ @relations[name]
275
+ end.fail do |response|
276
+ error_message = "#{self.class.to_s}[#{self.id}].#{name}, a has_one association, failed to fetch records!"
277
+ `console.error(error_message)`
278
+ response
279
+ end
280
+ end
248
281
  define_method(name) do
249
282
  _register_observer
250
- if @fetch_states[name] == 'f'
283
+ if @fetch_states.has_key?(name) && 'fi'.include?(@fetch_states[name])
251
284
  @relations[name]
252
285
  elsif self.id
253
- self.class._promise_get("#{self.class.resource_base_uri}/#{self.id}/relations/#{name}.json").then do |response|
254
- @relations[name] = self.class._convert_json_hash_to_record(response.json[self.class.to_s.underscore][name])
255
- @fetch_states[name] = 'f'
256
- _notify_observers
257
- @relations[name]
258
- end.fail do |response|
259
- error_message = "#{self.class.to_s}[#{self.id}].#{name}, a has_one association, failed to fetch records!"
260
- `console.error(error_message)`
261
- response
262
- end
286
+ send("promise_#{name}")
263
287
  @relations[name]
264
288
  else
265
289
  @relations[name]
@@ -268,12 +292,12 @@ module HyperRecord
268
292
  define_method("update_#{name}") do
269
293
  @fetch_states[name] = 'u'
270
294
  end
271
- define_method("#{name}=") do |arg|
272
- _register_observer
273
- @relations[name] = arg
274
- @fetch_states[name] = 'f'
275
- @relations[name]
276
- end
295
+ # define_method("#{name}=") do |arg|
296
+ # _register_observer
297
+ # @relations[name] = arg
298
+ # @fetch_states[name] = 'f'
299
+ # @relations[name]
300
+ # end
277
301
  end
278
302
 
279
303
  def record_cached?(id)
@@ -393,6 +417,7 @@ module HyperRecord
393
417
  else
394
418
  name
395
419
  end
420
+ _class_fetch_states[name_args] = 'i'
396
421
  self._promise_get_or_patch("#{resource_base_uri}/scopes/#{name}.json", *args).then do |response_json|
397
422
  scopes[name_args] = _convert_array_to_collection(response_json[self.to_s.underscore][name])
398
423
  _class_fetch_states[name_args] = 'f'
@@ -411,7 +436,7 @@ module HyperRecord
411
436
  name
412
437
  end
413
438
  scopes[name_args] = HyperRecord::Collection.new unless scopes.has_key?(name_args)
414
- if _class_fetch_states[name_args] == 'f'
439
+ if _class_fetch_states.has_key?(name_args) && 'fi'.include?(_class_fetch_states[name_args])
415
440
  scopes[name_args]
416
441
  else
417
442
  _register_class_observer
@@ -477,7 +502,7 @@ module HyperRecord
477
502
  @_class_state_key
478
503
  end
479
504
 
480
- def _find_record(id, record_in_progress)
505
+ def _promise_find(id, record_in_progress)
481
506
  _class_fetch_states["record_#{id}"] = 'i'
482
507
  _promise_get("#{resource_base_uri}/#{id}.json").then do |response|
483
508
  klass_key = self.to_s.underscore
@@ -70,7 +70,7 @@ module HyperRecord
70
70
 
71
71
  def link(other_record)
72
72
  _register_observer
73
- link_record(other_record).then do
73
+ promise_link(other_record).then do
74
74
  _notify_observers
75
75
  end
76
76
  self
@@ -112,7 +112,7 @@ module HyperRecord
112
112
 
113
113
  def save
114
114
  _register_observer
115
- save_record.then do
115
+ promise_save.then do
116
116
  _notify_observers
117
117
  end
118
118
  self
@@ -132,7 +132,7 @@ module HyperRecord
132
132
 
133
133
  def unlink(other_record)
134
134
  _register_observer
135
- unlink_record(other_record).then do
135
+ promise_unlink(other_record).then do
136
136
  _notify_observers
137
137
  end
138
138
  self
@@ -151,7 +151,7 @@ module HyperRecord
151
151
  end
152
152
  end
153
153
 
154
- def link_record(other_record, relation_name = nil)
154
+ def promise_link(other_record, relation_name = nil)
155
155
  called_from_collection = relation_name ? true : false
156
156
  relation_name = other_record.class.to_s.underscore.pluralize unless relation_name
157
157
  if reflections.has_key?(relation_name)
@@ -172,7 +172,7 @@ module HyperRecord
172
172
  end
173
173
  end
174
174
 
175
- def save_record
175
+ def promise_save
176
176
  payload_hash = @properties_hash.merge(@changed_properties_hash) # copy hash, because we need to delete some keys
177
177
  (%i[id created_at updated_at] + reflections.keys).each do |key|
178
178
  payload_hash.delete(key)
@@ -200,7 +200,7 @@ module HyperRecord
200
200
  end
201
201
  end
202
202
 
203
- def unlink_record(other_record, relation_name = nil)
203
+ def promise_unlink(other_record, relation_name = nil)
204
204
  called_from_collection = collection_name ? true : false
205
205
  relation_name = other_record.class.to_s.underscore.pluralize unless relation_name
206
206
  raise "No relation for record of type #{other_record.class}" unless reflections.has_key?(relation_name)
@@ -254,27 +254,24 @@ module HyperRecord
254
254
 
255
255
  def _update_record(data)
256
256
  if data.has_key?(:relation)
257
- if data.has_key?(:cause)
258
- # this creation of variables for things that could be done in one line
259
- # are a workaround for safari, to get it updating correctly
260
- klass_name = data[:cause][:record_type]
261
- c_record_class = Object.const_get(klass_name)
262
- if c_record_class._record_cache.has_key?(data[:cause][:id].to_s)
263
- c_record = c_record_class.find(data[:cause][:id])
264
- if `Date.parse(#{c_record.updated_at}) >= Date.parse(#{data[:cause][:updated_at]})`
265
- if @fetch_states[data[:relation]] == 'f'
266
- if send(data[:relation]).include?(c_record)
267
- return
268
- end
269
- end
270
- end
271
- end
272
- end
273
- relation_fetch_state = @fetch_states[data[:relation]]
274
- if relation_fetch_state == 'f'
275
- @fetch_states[data[:relation]] = 'u'
276
- send(data[:relation])
277
- end
257
+ # if data.has_key?(:cause)
258
+ # # this creation of variables for things that could be done in one line
259
+ # # are a workaround for safari, to get it updating correctly
260
+ # klass_name = data[:cause][:record_type]
261
+ # c_record_class = Object.const_get(klass_name)
262
+ # if c_record_class._record_cache.has_key?(data[:cause][:id].to_s)
263
+ # c_record = c_record_class.find(data[:cause][:id])
264
+ # if `Date.parse(#{c_record.updated_at}) >= Date.parse(#{data[:cause][:updated_at]})`
265
+ # if @fetch_states[data[:relation]] == 'f'
266
+ # if send(data[:relation]).include?(c_record)
267
+ # return
268
+ # end
269
+ # end
270
+ # end
271
+ # end
272
+ # end
273
+ @fetch_states[data[:relation]] = 'u'
274
+ send(data[:relation])
278
275
  return
279
276
  end
280
277
  if data[:destroyed]
@@ -14,7 +14,7 @@ module HyperRecord
14
14
 
15
15
  def <<(other_record)
16
16
  if @record && @relation_name
17
- @record.link_record(other_record, @relation_name)
17
+ @record.promise_link(other_record, @relation_name)
18
18
  end
19
19
  other_record._register_collection(self)
20
20
  @record._notify_observers if @record
@@ -23,7 +23,7 @@ module HyperRecord
23
23
 
24
24
  def delete(other_record)
25
25
  if @record && @relation_name && !other_record.instance_variable_get(:@remotely_destroyed)
26
- @record.unlink_record(other_record, @relation_name)
26
+ @record.promise_unlink(other_record, @relation_name)
27
27
  end
28
28
  other_record._unregister_collection(self)
29
29
  @record._notify_observers if @record
@@ -93,16 +93,14 @@ module Hyperloop
93
93
  def self.process_notification(data)
94
94
  record_class = Object.const_get(data[:record_type])
95
95
  if data[:scope]
96
- scope_fetch_state = record_class._class_fetch_states[data[:scope]]
97
- if scope_fetch_state == 'f'
96
+ scope_name, scope_params = data[:scope].split('_[')
97
+ if scope_params
98
+ scope_params = '[' + scope_params
98
99
  record_class._class_fetch_states[data[:scope]] = 'u'
99
- scope_name, scope_params = data[:scope].split('_[')
100
- if scope_params
101
- scope_params = '[' + scope_params
102
- record_class.send(scope_name, JSON.parse(scope_params))
103
- else
104
- record_class.send(data[:scope])
105
- end
100
+ record_class.send(scope_name, JSON.parse(scope_params))
101
+ else
102
+ record_class._class_fetch_states[data[:scope]] = 'u'
103
+ record_class.send(data[:scope])
106
104
  end
107
105
  elsif record_class.record_cached?(data[:id])
108
106
  record = record_class.find(data[:id])
@@ -1,5 +1,5 @@
1
1
  module Hyperloop
2
2
  module Resource
3
- VERSION = '1.0.0.lap53'
3
+ VERSION = '1.0.0.lap55'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyper-resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.lap53
4
+ version: 1.0.0.lap55
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-24 00:00:00.000000000 Z
11
+ date: 2018-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal