hyper-resource 1.0.0.lap38 → 1.0.0.lap39

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d7b649c6ec2096366f08fa25d95af57a01e869b764534bc1ae93b0d10fc60497
4
- data.tar.gz: b09a6a3ce5354eaf2731b427cb6b5a45c4901007448d96974f5d0acfa97e8fbd
3
+ metadata.gz: 81aa4247a77ddaa5de2bc89c0aff444b2679113598992d0e4bae9537921224a5
4
+ data.tar.gz: 82c7b2ae16f57887f2443f68b8f0a9d0399acd22adad131fb97b1d5917ea7014
5
5
  SHA512:
6
- metadata.gz: 2d73031cd588bdb8b5e27976d947773316d69a3206053a4ce8a7a8187ab63f54eecaf55622eab3728ccd4b8ceb2dea916b7f9b082c95a6e8de4e3c30701c93a8
7
- data.tar.gz: baace49e8182fbde221c2335dcdf56179237a8aa575630926d3a51c50c19822ae0d78edbe58419cbc0d7f9ee87d7b9a8df05f280827efef81cfa759352479a41
6
+ metadata.gz: 6bbe5b55732247244d67270e89e0f57bc699591cb2f59a41ed5ca1d860afcfd37c35063af068d7e5f65d28676f262b930a461fa0178d96686ee7d2c41b69d069
7
+ data.tar.gz: cc84c5fee0e51e57dadd4b569018eef9efc446d35a483d5bd67cfdb31dc08a0c3cd4eb87b464b45eca1801ad6491d262501dbc8e616a952a16346d5c0f14aa65
@@ -82,41 +82,32 @@ module HyperRecord
82
82
  end
83
83
 
84
84
  def find(id)
85
- return _record_cache[id] if _record_cache.has_key?(id)
86
-
85
+ return _record_cache[id] if _record_cache.has_key?(id) && _class_fetch_states["record_#{id}"] == 'f'
87
86
  observer = React::State.current_observer
88
- record_in_progress = self.new
89
-
87
+ record_in_progress = if _record_cache.has_key?(id)
88
+ _record_cache[id]
89
+ else
90
+ self.new
91
+ end
90
92
  record_in_progress_key = "#{self.to_s}_#{record_in_progress.object_id}"
91
93
  React::State.get_state(observer, record_in_progress_key) if observer
92
-
93
- _promise_get("#{resource_base_uri}/#{id}.json").then do |response|
94
- klass_key = self.to_s.underscore
95
- reflections.keys.each do |relation|
96
- if response.json[klass_key].has_key?(relation)
97
- response.json[klass_key][r_or_s] = _convert_array_to_collection(response.json[klass_key][relation])
98
- record_in_progress.instance_variable_get(:@fetch_states)[relation] = 'f'
99
- end
100
- end
101
- record_in_progress._initialize_from_hash(response.json[klass_key]) if response.json[klass_key]
102
- _record_cache[record_in_progress.id] = record_in_progress
94
+ return _record_cache[id] if _record_cache.has_key?(id)
95
+ _record_cache[id] = record_in_progress
96
+ _find_record(id, record_in_progress, record_in_progress_key).then do
103
97
  React::State.set_state(observer, record_in_progress_key, `Date.now() + Math.random()`) if observer
104
- record_in_progress
105
- end.fail do |response|
106
- error_message = "#{self.to_s}.find(#{id}) failed to fetch record!"
107
- `console.error(error_message)`
108
- response
109
98
  end
110
-
111
99
  record_in_progress
112
100
  end
113
101
 
114
102
  def find_record(id)
115
- # TODO this is bogus, needs some attention
116
- _promise_get("#{resource_base_uri}/#{id}.json").then do |response|
117
- klass_name = self.to_s.underscore
118
- self.new(response.json[klass_name])
119
- end
103
+ record_in_progress = if _record_cache.has_key?(id)
104
+ _record_cache[id]
105
+ else
106
+ self.new
107
+ end
108
+ record_in_progress_key = "#{self.to_s}_#{record_in_progress.object_id}"
109
+ _record_cache[id] = record_in_progress unless _record_cache.has_key?(id)
110
+ _find_record(id, record_in_progress, record_in_progress_key)
120
111
  end
121
112
 
122
113
  def find_record_by(hash)
@@ -301,8 +292,8 @@ module HyperRecord
301
292
  define_method(name) do |*args|
302
293
  _register_observer
303
294
  if self.id && (@rest_methods_hash[name][:force] || !@rest_methods_hash[name].has_key?(:result))
304
- self.class._promise_get_or_patch("#{resource_base_uri}/#{self.id}/methods/#{name}.json?timestamp=#{`Date.now() + Math.random()`}", *args).then do |result|
305
- @rest_methods_hash[name][:result] = result # result is parsed json
295
+ self.class._promise_get_or_patch("#{resource_base_uri}/#{self.id}/methods/#{name}.json?timestamp=#{`Date.now() + Math.random()`}", *args).then do |response_json|
296
+ @rest_methods_hash[name][:result] = response_json[:result] # result is parsed json
306
297
  _notify_observers
307
298
  @rest_methods_hash[name][:result]
308
299
  end.fail do |response|
@@ -328,23 +319,30 @@ module HyperRecord
328
319
  end
329
320
 
330
321
  def scope(name, options)
331
- scopes[name] = HyperRecord::Collection.new
332
322
  define_singleton_method(name) do |*args|
333
- if _class_fetch_states[name] == 'f'
334
- scopes[name]
323
+ name_args = if args.size > 0
324
+ "#{name}_#{args.to_json}"
325
+ else
326
+ name
327
+ end
328
+ scopes[name_args] = HyperRecord::Collection.new unless scopes.has_key?(name_args)
329
+ if _class_fetch_states[name_args] == 'f'
330
+ scopes[name_args]
335
331
  else
336
332
  _register_class_observer
337
- self._promise_get_or_patch("#{resource_base_uri}/scopes/#{name}.json", *args).then do |response|
338
- scopes[name] = _convert_array_to_collection(response.json[self.to_s.underscore][name])
339
- _class_fetch_states[name] = 'f'
333
+ self._promise_get_or_patch("#{resource_base_uri}/scopes/#{name}.json", *args).then do |response_json|
334
+ ch = response_json[self.to_s.underscore]
335
+ nh = ch[name]
336
+ scopes[name_args] = _convert_array_to_collection(nh)
337
+ _class_fetch_states[name_args] = 'f'
340
338
  _notify_class_observers
341
- scopes[name]
339
+ scopes[name_args]
342
340
  end.fail do |response|
343
- error_message = "#{self.class.to_s}.#{name}, a scope, failed to fetch records!"
341
+ error_message = "#{self.to_s}.#{name_args}, a scope, failed to fetch records!"
344
342
  `console.error(error_message)`
345
343
  response
346
344
  end
347
- scopes[name]
345
+ scopes[name_args]
348
346
  end
349
347
  end
350
348
  end
@@ -397,6 +395,25 @@ module HyperRecord
397
395
  @_class_state_key
398
396
  end
399
397
 
398
+ def _find_record(id, record_in_progress, record_in_progress_key)
399
+ _promise_get("#{resource_base_uri}/#{id}.json").then do |response|
400
+ klass_key = self.to_s.underscore
401
+ reflections.keys.each do |relation|
402
+ if response.json[klass_key].has_key?(relation)
403
+ response.json[klass_key][r_or_s] = _convert_array_to_collection(response.json[klass_key][relation])
404
+ record_in_progress.instance_variable_get(:@fetch_states)[relation] = 'f'
405
+ end
406
+ end
407
+ record_in_progress._initialize_from_hash(response.json[klass_key]) if response.json[klass_key]
408
+ _class_fetch_states["record_#{id}"] == 'f'
409
+ record_in_progress
410
+ end.fail do |response|
411
+ error_message = "#{self.to_s}.find(#{id}) failed to fetch record!"
412
+ `console.error(error_message)`
413
+ response
414
+ end
415
+ end
416
+
400
417
  def _notify_class_observers
401
418
  _class_observers.each do |observer|
402
419
  React::State.set_state(observer, _class_state_key, `Date.now() + Math.random()`)
@@ -411,12 +428,12 @@ module HyperRecord
411
428
  def _promise_get_or_patch(uri, *args)
412
429
  if args && args.size > 0
413
430
  payload = { params: args }
414
- _promise_patch(uri, payload).then do |result|
415
- result.json[:result]
431
+ _promise_patch(uri, payload).then do |response|
432
+ response.json
416
433
  end
417
434
  else
418
- _promise_get(uri).then do |result|
419
- result.json[:result]
435
+ _promise_get(uri).then do |response|
436
+ response.json
420
437
  end
421
438
  end
422
439
  end
@@ -69,7 +69,10 @@ module HyperRecord
69
69
  end
70
70
 
71
71
  def link(other_record)
72
- link_record(other_record)
72
+ _register_observer
73
+ link_record(other_record).then do
74
+ _notify_observers
75
+ end
73
76
  self
74
77
  end
75
78
 
@@ -109,7 +112,10 @@ module HyperRecord
109
112
  end
110
113
 
111
114
  def save
112
- save_record
115
+ _register_observer
116
+ save_record.then do
117
+ _notify_observers
118
+ end
113
119
  self
114
120
  end
115
121
 
@@ -126,7 +132,10 @@ module HyperRecord
126
132
  end
127
133
 
128
134
  def unlink(other_record)
129
- unlink_record(other_record, observer)
135
+ _register_observer
136
+ unlink_record(other_record).then do
137
+ _notify_observers
138
+ end
130
139
  self
131
140
  end
132
141
 
@@ -144,7 +153,6 @@ module HyperRecord
144
153
  end
145
154
 
146
155
  def link_record(other_record, relation_name = nil)
147
- _register_observer
148
156
  called_from_collection = relation_name ? true : false
149
157
  relation_name = other_record.class.to_s.underscore.pluralize unless relation_name
150
158
  if reflections.has_key?(relation_name)
@@ -157,7 +165,6 @@ module HyperRecord
157
165
  payload_hash = other_record.to_hash
158
166
  self.class._promise_post("#{resource_base_uri}/#{self.id}/relations/#{relation_name}.json", { data: payload_hash }).then do |response|
159
167
  other_record.instance_variable_get(:@properties_hash).merge!(response.json[other_record.class.to_s.underscore])
160
- _notify_observers
161
168
  self
162
169
  end.fail do |response|
163
170
  error_message = "Linking record #{other_record} to #{self} failed!"
@@ -167,8 +174,7 @@ module HyperRecord
167
174
  end
168
175
 
169
176
  def save_record
170
- _register_observer
171
- payload_hash = @properties_hash.merge(@changed_properties_hash) # copy hash, becasue we need to delete some keys
177
+ payload_hash = @properties_hash.merge(@changed_properties_hash) # copy hash, because we need to delete some keys
172
178
  (%i[id created_at updated_at] + reflections.keys).each do |key|
173
179
  payload_hash.delete(key)
174
180
  end
@@ -176,7 +182,6 @@ module HyperRecord
176
182
  reset
177
183
  self.class._promise_patch("#{resource_base_uri}/#{@properties_hash[:id]}", { data: payload_hash }).then do |response|
178
184
  @properties_hash.merge!(response.json[self.class.to_s.underscore])
179
- _notify_observers
180
185
  self
181
186
  end.fail do |response|
182
187
  error_message = "Saving record #{self} failed!"
@@ -187,7 +192,6 @@ module HyperRecord
187
192
  reset
188
193
  self.class._promise_post(resource_base_uri, { data: payload_hash }).then do |response|
189
194
  @properties_hash.merge!(response.json[self.class.to_s.underscore])
190
- _notify_observers
191
195
  self
192
196
  end.fail do |response|
193
197
  error_message = "Creating record #{self} failed!"
@@ -198,13 +202,11 @@ module HyperRecord
198
202
  end
199
203
 
200
204
  def unlink_record(other_record, relation_name = nil)
201
- _register_observer
202
205
  called_from_collection = collection_name ? true : false
203
206
  relation_name = other_record.class.to_s.underscore.pluralize unless relation_name
204
207
  raise "No relation for record of type #{other_record.class}" unless reflections.has_key?(relation_name)
205
208
  self.send(relation_name).delete_if { |cr| cr == other_record } unless called_from_collection
206
209
  self.class._promise_delete("#{resource_base_uri}/#{@properties_hash[:id]}/relations/#{relation_name}.json?record_id=#{other_record.id}").then do |response|
207
- _notify_observers
208
210
  self
209
211
  end.fail do |response|
210
212
  error_message = "Unlinking #{other_record} from #{self} failed!"
@@ -1,5 +1,5 @@
1
1
  module Hyperloop
2
2
  module Resource
3
- VERSION = '1.0.0.lap38'
3
+ VERSION = '1.0.0.lap39'
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.lap38
4
+ version: 1.0.0.lap39
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-10 00:00:00.000000000 Z
11
+ date: 2018-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal