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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 870be529a755c9588ae0f02b65dd10ee67c8d21b
4
- data.tar.gz: 561c75ec7f9243d9ae106b733aa5356f57e93829
3
+ metadata.gz: f87f4c7dd6020944c3ae979759a058f28c5fc5b2
4
+ data.tar.gz: f169ab4179b0ef77f3ba0c38257bf09d69e3fd07
5
5
  SHA512:
6
- metadata.gz: 5c502888fcd4ef5ea988a3a20a639b4d2bf3b3bdf4df0248b479162772b8ab073d234004697e79b0d121b6eb25209412344401ba1c4b0a0a1ef20cca98aa9f33
7
- data.tar.gz: 57f3139aeaaab187cd2c30dbae45884a44920a7b6162679e02e573fd99f2074933a7c4b24da87969f9a967fb86d442a04242154c8b2702141ec8f553fe16ed82
6
+ metadata.gz: 872a3fb5c181c87913f4db432e093a84126e69959b408b3c68e4a5585680eb0aa4cf8965286968b92619ac83f4ea1b94cadbf149b6a6abf2079e2f97309182bf
7
+ data.tar.gz: 4117a18f6141462ccf5af5bc8e8dde69df493577fbd46c10e03e8c7f9ed710eeb8ecf477653199989ebf3d5dcd587aa2af1471d34605a056024bbfcb12b6775a
@@ -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
@@ -77,6 +77,10 @@ module ActiveRecord
77
77
  @backing_record.new?
78
78
  end
79
79
 
80
+ def errors
81
+ @backing_record.errors
82
+ end
83
+
80
84
  end
81
85
 
82
86
  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!(failed = nil) # sets saving to false AND notifies
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 failed
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 do |item|
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
- backing_records.each { |item| backing_records[item[0]].saved! false }
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 |model|
255
- log(" Model: #{model[1]} Attributes: #{model[2]} Errors: #{model[3]}", :error) if model[3]
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[:saved_models] if block
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 { |item| backing_records[item[0]].saved! } if response.json(:success)
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.full_messages)]
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
- @parent.as_hash({@ar_object.id => children})
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],
@@ -1,3 +1,3 @@
1
1
  module ReactiveRecord
2
- VERSION = "0.7.9"
2
+ VERSION = "0.7.10"
3
3
  end
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.9
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