reactive-record 0.7.9 → 0.7.10
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/reactive-record.rb +1 -0
- data/lib/reactive_record/active_record/error.rb +22 -0
- data/lib/reactive_record/active_record/instance_methods.rb +4 -0
- data/lib/reactive_record/active_record/reactive_record/base.rb +10 -2
- data/lib/reactive_record/active_record/reactive_record/isomorphic_base.rb +16 -13
- data/lib/reactive_record/server_data_cache.rb +5 -1
- data/lib/reactive_record/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f87f4c7dd6020944c3ae979759a058f28c5fc5b2
|
4
|
+
data.tar.gz: f169ab4179b0ef77f3ba0c38257bf09d69e3fd07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 872a3fb5c181c87913f4db432e093a84126e69959b408b3c68e4a5585680eb0aa4cf8965286968b92619ac83f4ea1b94cadbf149b6a6abf2079e2f97309182bf
|
7
|
+
data.tar.gz: 4117a18f6141462ccf5af5bc8e8dde69df493577fbd46c10e03e8c7f9ed710eeb8ecf477653199989ebf3d5dcd587aa2af1471d34605a056024bbfcb12b6775a
|
data/lib/reactive-record.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
if RUBY_ENGINE == 'opal'
|
2
2
|
|
3
3
|
require "reactive-ruby"
|
4
|
+
require "reactive_record/active_record/error"
|
4
5
|
require "reactive_record/server_data_cache"
|
5
6
|
require "reactive_record/active_record/reactive_record/while_loading"
|
6
7
|
require "reactive_record/active_record/reactive_record/isomorphic_base"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ActiveModel
|
2
|
+
|
3
|
+
class Error
|
4
|
+
|
5
|
+
attr_reader :messages
|
6
|
+
|
7
|
+
def initialize(msgs = {})
|
8
|
+
@messages = msgs || {}
|
9
|
+
@messages.each { |attribute, messages| @messages[attribute] = messages.uniq }
|
10
|
+
end
|
11
|
+
|
12
|
+
def [](attribute)
|
13
|
+
messages[attribute]
|
14
|
+
end
|
15
|
+
|
16
|
+
def empty?
|
17
|
+
messages.empty?
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -208,12 +208,18 @@ module ReactiveRecord
|
|
208
208
|
end
|
209
209
|
false
|
210
210
|
end
|
211
|
+
|
212
|
+
|
213
|
+
def errors
|
214
|
+
@errors ||= ActiveModel::Error.new
|
215
|
+
end
|
211
216
|
|
212
217
|
def sync!(hash = {}) # does NOT notify (see saved! for notification)
|
213
218
|
@attributes.merge! hash
|
214
219
|
@synced_attributes = @attributes.dup
|
215
220
|
@synced_attributes.each { |key, value| @synced_attributes[key] = value.dup_for_sync if value.is_a? Collection }
|
216
221
|
@saving = false
|
222
|
+
@errors = nil
|
217
223
|
self
|
218
224
|
end
|
219
225
|
|
@@ -228,6 +234,7 @@ module ReactiveRecord
|
|
228
234
|
@ar_instance.send("#{attribute}=", @synced_attributes[attribute])
|
229
235
|
end
|
230
236
|
@attributes.delete_if { |attribute, value| !@synced_attributes.has_key?(attribute) }
|
237
|
+
@errors = nil
|
231
238
|
end
|
232
239
|
|
233
240
|
def saving!
|
@@ -235,9 +242,10 @@ module ReactiveRecord
|
|
235
242
|
@saving = true
|
236
243
|
end
|
237
244
|
|
238
|
-
def saved!(
|
245
|
+
def saved!(errors = nil) # sets saving to false AND notifies
|
239
246
|
@saving = false
|
240
|
-
React::State.set_state(self, self, :saved) unless data_loading? or
|
247
|
+
React::State.set_state(self, self, :saved) unless data_loading? or errors
|
248
|
+
@errors = ActiveModel::Error.new(errors)
|
241
249
|
self
|
242
250
|
end
|
243
251
|
|
@@ -242,25 +242,28 @@ module ReactiveRecord
|
|
242
242
|
promise = Promise.new
|
243
243
|
|
244
244
|
HTTP.post(`window.ReactiveRecordEnginePath`+"/save", payload: {models: models, associations: associations}).then do |response|
|
245
|
-
|
245
|
+
begin
|
246
|
+
response.json[:models] = response.json[:saved_models].collect do |item|
|
247
|
+
backing_records[item[0]].ar_instance
|
248
|
+
end
|
249
|
+
|
246
250
|
if response.json[:success]
|
247
|
-
response.json[:saved_models].each
|
248
|
-
internal_id, klass, attributes = item
|
249
|
-
backing_records[internal_id].sync!(attributes)
|
250
|
-
end
|
251
|
+
response.json[:saved_models].each { | item | backing_records[item[0]].sync!(item[2]) }
|
251
252
|
else
|
252
|
-
|
253
|
+
response.json[:saved_models].each { | item | backing_records[item[0]].saved! item[3] }
|
253
254
|
log("Reactive Record Save Failed: #{response.json[:message]}", :error)
|
254
|
-
response.json[:saved_models].each do |
|
255
|
-
log(" Model: #{
|
255
|
+
response.json[:saved_models].each do | item |
|
256
|
+
log(" Model: #{item[1]}[#{item[0]}] Attributes: #{item[2]} Errors: #{item[3]}", :error) if item[3]
|
256
257
|
end
|
257
258
|
end
|
258
|
-
|
259
|
-
yield response.json[:success], response.json[:message], response.json[:
|
259
|
+
|
260
|
+
yield response.json[:success], response.json[:message], response.json[:models] if block
|
260
261
|
promise.resolve response.json
|
261
262
|
|
262
|
-
backing_records.each { |
|
263
|
-
|
263
|
+
backing_records.each { |id, record| record.saved! } if response.json(:success)
|
264
|
+
rescue Exception => e
|
265
|
+
puts "whahhh #{e}"
|
266
|
+
end
|
264
267
|
end
|
265
268
|
promise
|
266
269
|
else
|
@@ -329,7 +332,7 @@ module ReactiveRecord
|
|
329
332
|
unless model.frozen?
|
330
333
|
saved = model.check_permission_with_acting_user(acting_user, new_models.include?(model) ? :create_permitted? : :update_permitted?).save
|
331
334
|
has_errors ||= !saved
|
332
|
-
[reactive_record_id, model.class.name, model.attributes, (saved ? nil : model.errors.
|
335
|
+
[reactive_record_id, model.class.name, model.attributes, (saved ? nil : model.errors.messages)]
|
333
336
|
end
|
334
337
|
end.compact
|
335
338
|
|
@@ -211,7 +211,11 @@ module ReactiveRecord
|
|
211
211
|
def as_hash(children = [@ar_object])
|
212
212
|
if @parent
|
213
213
|
if method == "*"
|
214
|
-
@
|
214
|
+
if @ar_object.is_a? Array # this happens when a scope is empty there is test case, but
|
215
|
+
@parent.as_hash({}) # does it work for all edge cases?
|
216
|
+
else
|
217
|
+
@parent.as_hash({@ar_object.id => children})
|
218
|
+
end
|
215
219
|
elsif @ar_object.class < ActiveRecord::Base and children.is_a? Hash
|
216
220
|
@parent.as_hash({method => children.merge({
|
217
221
|
:id => [@ar_object.id],
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reactive-record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mitch VanDuyn
|
@@ -155,6 +155,7 @@ files:
|
|
155
155
|
- lib/reactive_record/active_record/associations.rb
|
156
156
|
- lib/reactive_record/active_record/base.rb
|
157
157
|
- lib/reactive_record/active_record/class_methods.rb
|
158
|
+
- lib/reactive_record/active_record/error.rb
|
158
159
|
- lib/reactive_record/active_record/instance_methods.rb
|
159
160
|
- lib/reactive_record/active_record/reactive_record/base.rb
|
160
161
|
- lib/reactive_record/active_record/reactive_record/collection.rb
|