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 +4 -4
- data/lib/hyper_record/class_methods.rb +58 -41
- data/lib/hyper_record/client_instance_methods.rb +13 -11
- data/lib/hyperloop/resource/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81aa4247a77ddaa5de2bc89c0aff444b2679113598992d0e4bae9537921224a5
|
4
|
+
data.tar.gz: 82c7b2ae16f57887f2443f68b8f0a9d0399acd22adad131fb97b1d5917ea7014
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 =
|
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
|
-
|
94
|
-
|
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
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
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 |
|
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
|
334
|
-
|
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 |
|
338
|
-
|
339
|
-
|
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[
|
339
|
+
scopes[name_args]
|
342
340
|
end.fail do |response|
|
343
|
-
error_message = "#{self.
|
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[
|
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 |
|
415
|
-
|
431
|
+
_promise_patch(uri, payload).then do |response|
|
432
|
+
response.json
|
416
433
|
end
|
417
434
|
else
|
418
|
-
_promise_get(uri).then do |
|
419
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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!"
|
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.
|
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-
|
11
|
+
date: 2018-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|