hyper-resource 1.0.0.lap38 → 1.0.0.lap39

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: 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