reactive-record 0.7.35 → 0.7.36
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/reactive_record/reactive_record_controller.rb +6 -1
- data/lib/reactive-record.rb +1 -0
- data/lib/reactive_record/active_record/reactive_record/base.rb +0 -2
- data/lib/reactive_record/active_record/reactive_record/isomorphic_base.rb +152 -147
- data/lib/reactive_record/active_record/reactive_record/while_loading.rb +0 -2
- data/lib/reactive_record/permissions.rb +32 -24
- data/lib/reactive_record/pry.rb +19 -0
- data/lib/reactive_record/server_data_cache.rb +10 -7
- data/lib/reactive_record/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71c7a7abb7ea51cdb5f5139725724b0a1cd773fd
|
4
|
+
data.tar.gz: c1d222084866c7aa0f8b3f77d495825b504f3e35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0332dfa333ea3344e970d4b37c24a1ff9703823c5f53c645754de0b815a4254655f5da7dc15b3c0dbbd33b8adc522815395e6871d4eb61b826f9d16d5034125a
|
7
|
+
data.tar.gz: 1262dc1375cbbc0f423dde4d4e181bc69b2c44acad615944fd8833cd29efac2f6cb5d2338daa6f8b12b017cac75f4a93dd5b78cebdf0c032b5ec382c4e84177b
|
@@ -11,9 +11,10 @@ module ReactiveRecord
|
|
11
11
|
params[:pending_fetches],
|
12
12
|
acting_user
|
13
13
|
]
|
14
|
+
rescue Exception => e
|
15
|
+
render json: {error: e.message, backtrace: e.backtrace}, status: 500
|
14
16
|
end
|
15
17
|
|
16
|
-
|
17
18
|
def save
|
18
19
|
render :json => ReactiveRecord::Base.save_records(
|
19
20
|
(params[:models] || []).map(&:with_indifferent_access),
|
@@ -22,6 +23,8 @@ module ReactiveRecord
|
|
22
23
|
params[:validate],
|
23
24
|
true
|
24
25
|
)
|
26
|
+
rescue Exception => e
|
27
|
+
render json: {error: e.message, backtrace: e.backtrace}, status: 500
|
25
28
|
end
|
26
29
|
|
27
30
|
def destroy
|
@@ -31,6 +34,8 @@ module ReactiveRecord
|
|
31
34
|
params[:vector],
|
32
35
|
acting_user
|
33
36
|
)
|
37
|
+
rescue Exception => e
|
38
|
+
render json: {error: e.message, backtrace: e.backtrace}, status: 500
|
34
39
|
end
|
35
40
|
|
36
41
|
end
|
data/lib/reactive-record.rb
CHANGED
@@ -44,6 +44,7 @@ else
|
|
44
44
|
require "reactive_record/server_data_cache"
|
45
45
|
require "reactive_record/active_record/reactive_record/isomorphic_base"
|
46
46
|
require "reactive_record/serializers"
|
47
|
+
require "reactive_record/pry"
|
47
48
|
|
48
49
|
Opal.append_path File.expand_path('../', __FILE__).untaint
|
49
50
|
Opal.append_path File.expand_path('../../vendor', __FILE__).untaint
|
@@ -267,11 +267,9 @@ module ReactiveRecord
|
|
267
267
|
if !data_loading?
|
268
268
|
React::State.set_state(self, attribute, value)
|
269
269
|
elsif on_opal_client? and had_key and current_value.loaded? and current_value != value and args.count > 0 # this is to handle changes in already loaded server side methods
|
270
|
-
puts "setting up delayed change for #{@ar_instance}.#{attribute} current: #{current_value} new: #{value}"
|
271
270
|
React::State.set_state(self, attribute, value, true)
|
272
271
|
end
|
273
272
|
if empty_before != changed_attributes.empty?
|
274
|
-
puts "setting up delayed change on record" unless on_opal_server? or data_loading?
|
275
273
|
React::State.set_state(self, "!CHANGED!", !changed_attributes.empty?, true) unless on_opal_server? or data_loading?
|
276
274
|
aggregate_owner.update_attribute(aggregate_attribute) if aggregate_owner
|
277
275
|
end
|
@@ -324,7 +324,7 @@ module ReactiveRecord
|
|
324
324
|
backing_records.each { |id, record| record.saved! }
|
325
325
|
|
326
326
|
rescue Exception => e
|
327
|
-
|
327
|
+
log("Exception raised while saving - #{e}", :error)
|
328
328
|
end
|
329
329
|
end
|
330
330
|
promise
|
@@ -372,156 +372,154 @@ module ReactiveRecord
|
|
372
372
|
|
373
373
|
def self.save_records(models, associations, acting_user, validate, save)
|
374
374
|
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
[
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
if record and record.respond_to?(:id) and record.id
|
395
|
-
# we have an already exising activerecord model
|
396
|
-
keys = record.attributes.keys
|
397
|
-
attributes.each do |key, value|
|
398
|
-
if keys.include? key
|
399
|
-
record[key] = value
|
400
|
-
elsif !value.nil? and aggregation = record.class.reflect_on_aggregation(key.to_sym) and !(aggregation.klass < ActiveRecord::Base)
|
401
|
-
aggregation.mapping.each_with_index do |pair, i|
|
402
|
-
record[pair.first] = value[i]
|
375
|
+
ReactiveRecord::Pry.rescue do
|
376
|
+
begin
|
377
|
+
|
378
|
+
reactive_records = {}
|
379
|
+
vectors = {}
|
380
|
+
new_models = []
|
381
|
+
saved_models = []
|
382
|
+
dont_save_list = []
|
383
|
+
|
384
|
+
models.each do |model_to_save|
|
385
|
+
attributes = model_to_save[:attributes]
|
386
|
+
model = Object.const_get(model_to_save[:model])
|
387
|
+
id = attributes.delete(model.primary_key) if model.respond_to? :primary_key # if we are saving existing model primary key value will be present
|
388
|
+
vector = model_to_save[:vector]
|
389
|
+
vector = [vector[0].constantize] + vector[1..-1].collect do |method|
|
390
|
+
if method.is_a?(Array) and method.first == "find_by_id"
|
391
|
+
["find", method.last]
|
392
|
+
else
|
393
|
+
method
|
403
394
|
end
|
404
|
-
elsif record.respond_to? "#{key}="
|
405
|
-
record.send("#{key}=",value)
|
406
|
-
else
|
407
|
-
# TODO once reading schema.rb on client is implemented throw an error here
|
408
395
|
end
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
396
|
+
reactive_records[model_to_save[:id]] = vectors[vector] = record = find_record(model, id, vector, save)
|
397
|
+
if record and record.respond_to?(:id) and record.id
|
398
|
+
# we have an already exising activerecord model
|
399
|
+
keys = record.attributes.keys
|
400
|
+
attributes.each do |key, value|
|
401
|
+
if keys.include? key
|
402
|
+
record[key] = value
|
403
|
+
elsif !value.nil? and aggregation = record.class.reflect_on_aggregation(key.to_sym) and !(aggregation.klass < ActiveRecord::Base)
|
404
|
+
aggregation.mapping.each_with_index do |pair, i|
|
405
|
+
record[pair.first] = value[i]
|
406
|
+
end
|
407
|
+
elsif record.respond_to? "#{key}="
|
408
|
+
record.send("#{key}=",value)
|
409
|
+
else
|
410
|
+
# TODO once reading schema.rb on client is implemented throw an error here
|
411
|
+
end
|
420
412
|
end
|
421
|
-
elsif
|
422
|
-
#
|
423
|
-
|
424
|
-
record.
|
413
|
+
elsif record
|
414
|
+
# either the model is new, or its not even an active record model
|
415
|
+
dont_save_list << record unless save
|
416
|
+
keys = record.attributes.keys
|
417
|
+
attributes.each do |key, value|
|
418
|
+
if keys.include? key
|
419
|
+
record[key] = value
|
420
|
+
elsif !value.nil? and aggregation = record.class.reflect_on_aggregation(key) and !(aggregation.klass < ActiveRecord::Base)
|
421
|
+
aggregation.mapping.each_with_index do |pair, i|
|
422
|
+
record[pair.first] = value[i]
|
423
|
+
end
|
424
|
+
elsif key.to_s != "id" and record.respond_to?("#{key}=") # server side methods can get included and we won't be able to write them...
|
425
|
+
# for example if you have a server side method foo, that you "get" on a new record, then later that value will get sent to the server
|
426
|
+
# we should track better these server side methods so this does not happen
|
427
|
+
record.send("#{key}=",value)
|
428
|
+
end
|
429
|
+
end
|
430
|
+
new_models << record
|
425
431
|
end
|
426
432
|
end
|
427
|
-
new_models << record
|
428
|
-
end
|
429
|
-
end
|
430
433
|
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
puts "saved complete errors = <#{!saved}>, #{messages} has_errors #{has_errors}"
|
496
|
-
[reactive_record_id, model.class.name, model.attributes, messages]
|
497
|
-
end
|
498
|
-
end.compact
|
434
|
+
#puts "!!!!!!!!!!!!!!attributes updated"
|
435
|
+
ActiveRecord::Base.transaction do
|
436
|
+
associations.each do |association|
|
437
|
+
parent = reactive_records[association[:parent_id]]
|
438
|
+
next unless parent
|
439
|
+
#parent.instance_variable_set("@reactive_record_#{association[:attribute]}_changed", true) remove this????
|
440
|
+
if parent.class.reflect_on_aggregation(association[:attribute].to_sym)
|
441
|
+
#puts ">>>>>>AGGREGATE>>>> #{parent.class.name}.send('#{association[:attribute]}=', #{reactive_records[association[:child_id]]})"
|
442
|
+
aggregate = reactive_records[association[:child_id]]
|
443
|
+
dont_save_list << aggregate
|
444
|
+
current_attributes = parent.send(association[:attribute]).attributes
|
445
|
+
#puts "current parent attributes = #{current_attributes}"
|
446
|
+
new_attributes = aggregate.attributes
|
447
|
+
#puts "current child attributes = #{new_attributes}"
|
448
|
+
merged_attributes = current_attributes.merge(new_attributes) { |k, current_attr, new_attr| aggregate.send("#{k}_changed?") ? new_attr : current_attr}
|
449
|
+
#puts "merged attributes = #{merged_attributes}"
|
450
|
+
aggregate.assign_attributes(merged_attributes)
|
451
|
+
#puts "aggregate attributes after merge = #{aggregate.attributes}"
|
452
|
+
parent.send("#{association[:attribute]}=", aggregate)
|
453
|
+
#puts "updated is frozen? #{aggregate.frozen?}, parent attributes = #{parent.send(association[:attribute]).attributes}"
|
454
|
+
elsif parent.class.reflect_on_association(association[:attribute].to_sym).nil?
|
455
|
+
raise "Missing association :#{association[:attribute]} for #{parent.class.name}. Was association defined on opal side only?"
|
456
|
+
elsif parent.class.reflect_on_association(association[:attribute].to_sym).collection?
|
457
|
+
#puts ">>>>>>>>>> #{parent.class.name}.send('#{association[:attribute]}') << #{reactive_records[association[:child_id]]})"
|
458
|
+
dont_save_list.delete(parent)
|
459
|
+
if false and parent.new?
|
460
|
+
parent.send("#{association[:attribute]}") << reactive_records[association[:child_id]] if parent.new?
|
461
|
+
#puts "updated"
|
462
|
+
else
|
463
|
+
#puts "skipped"
|
464
|
+
end
|
465
|
+
else
|
466
|
+
#puts ">>>>ASSOCIATION>>>> #{parent.class.name}.send('#{association[:attribute]}=', #{reactive_records[association[:child_id]]})"
|
467
|
+
parent.send("#{association[:attribute]}=", reactive_records[association[:child_id]])
|
468
|
+
dont_save_list.delete(parent)
|
469
|
+
#puts "updated"
|
470
|
+
end
|
471
|
+
end if associations
|
472
|
+
|
473
|
+
#puts "!!!!!!!!!!!!associations updated"
|
474
|
+
|
475
|
+
has_errors = false
|
476
|
+
|
477
|
+
#puts "ready to start saving... dont_save_list = #{dont_save_list}"
|
478
|
+
|
479
|
+
saved_models = reactive_records.collect do |reactive_record_id, model|
|
480
|
+
#puts "saving rr_id: #{reactive_record_id} model.object_id: #{model.object_id} frozen? <#{model.frozen?}>"
|
481
|
+
if model and (model.frozen? or dont_save_list.include?(model) or model.changed.include?(model.class.primary_key))
|
482
|
+
# the above check for changed including the private key happens if you have an aggregate that includes its own id
|
483
|
+
#puts "validating frozen model #{model.class.name} #{model} (reactive_record_id = #{reactive_record_id})"
|
484
|
+
valid = model.valid?
|
485
|
+
#puts "has_errors before = #{has_errors}, validate= #{validate}, !valid= #{!valid} (validate and !valid) #{validate and !valid}"
|
486
|
+
has_errors ||= (validate and !valid)
|
487
|
+
#puts "validation complete errors = <#{!valid}>, #{model.errors.messages} has_errors #{has_errors}"
|
488
|
+
[reactive_record_id, model.class.name, model.attributes, (valid ? nil : model.errors.messages)]
|
489
|
+
elsif model and (!model.id or model.changed?)
|
490
|
+
#puts "saving #{model.class.name} #{model} (reactive_record_id = #{reactive_record_id})"
|
491
|
+
saved = model.check_permission_with_acting_user(acting_user, new_models.include?(model) ? :create_permitted? : :update_permitted?).save(validate: validate)
|
492
|
+
has_errors ||= !saved
|
493
|
+
messages = model.errors.messages if (validate and !saved) or (!validate and !model.valid?)
|
494
|
+
#puts "saved complete errors = <#{!saved}>, #{messages} has_errors #{has_errors}"
|
495
|
+
[reactive_record_id, model.class.name, model.attributes, messages]
|
496
|
+
end
|
497
|
+
end.compact
|
499
498
|
|
500
|
-
|
499
|
+
raise "Could not save all models" if has_errors
|
501
500
|
|
502
|
-
|
503
|
-
if save
|
501
|
+
if save
|
504
502
|
|
505
|
-
|
503
|
+
{success: true, saved_models: saved_models }
|
506
504
|
|
507
|
-
|
505
|
+
else
|
508
506
|
|
509
|
-
|
510
|
-
|
507
|
+
vectors.each { |vector, model| model.reload unless model.nil? or model.new_record? or model.frozen? }
|
508
|
+
vectors
|
511
509
|
|
512
|
-
|
510
|
+
end
|
513
511
|
|
514
|
-
|
512
|
+
end
|
515
513
|
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
514
|
+
rescue Exception => e
|
515
|
+
ReactiveRecord::Pry.rescued(e)
|
516
|
+
if save
|
517
|
+
{success: false, saved_models: saved_models, message: e}
|
518
|
+
else
|
519
|
+
{}
|
520
|
+
end
|
521
|
+
end
|
523
522
|
end
|
524
|
-
|
525
523
|
end
|
526
524
|
|
527
525
|
end
|
@@ -569,19 +567,26 @@ module ReactiveRecord
|
|
569
567
|
else
|
570
568
|
|
571
569
|
def self.destroy_record(model, id, vector, acting_user)
|
572
|
-
model = Object.const_get(model)
|
573
|
-
record = if id
|
574
|
-
model.find(id)
|
575
|
-
else
|
576
|
-
ServerDataCache.new(acting_user, {})[*vector]
|
577
|
-
end
|
578
|
-
record.check_permission_with_acting_user(acting_user, :destroy_permitted?).destroy
|
579
|
-
{success: true, attributes: {}}
|
580
570
|
|
581
|
-
|
582
|
-
|
583
|
-
|
571
|
+
ReactiveRecord::Pry.rescue do
|
572
|
+
begin
|
573
|
+
model = Object.const_get(model)
|
574
|
+
record = if id
|
575
|
+
model.find(id)
|
576
|
+
else
|
577
|
+
ServerDataCache.new(acting_user, {})[*vector]
|
578
|
+
end
|
579
|
+
|
584
580
|
|
581
|
+
record.check_permission_with_acting_user(acting_user, :destroy_permitted?).destroy
|
582
|
+
{success: true, attributes: {}}
|
583
|
+
|
584
|
+
rescue Exception => e
|
585
|
+
ReactiveRecord::Pry.rescued(e)
|
586
|
+
{success: false, record: record, message: e}
|
587
|
+
end
|
588
|
+
end
|
589
|
+
end
|
585
590
|
end
|
586
591
|
end
|
587
592
|
|
@@ -1,55 +1,63 @@
|
|
1
|
+
module ReactiveRecord
|
2
|
+
class AccessViolation < StandardError
|
3
|
+
def message
|
4
|
+
"ReactiveRecord::AccessViolation: #{super}"
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
1
9
|
class ActiveRecord::Base
|
2
|
-
|
10
|
+
|
3
11
|
attr_accessor :acting_user
|
4
|
-
|
12
|
+
|
5
13
|
def create_permitted?
|
6
14
|
true
|
7
15
|
end
|
8
|
-
|
16
|
+
|
9
17
|
def update_permitted?
|
10
18
|
true
|
11
19
|
end
|
12
|
-
|
20
|
+
|
13
21
|
def destroy_permitted?
|
14
22
|
true
|
15
23
|
end
|
16
|
-
|
17
|
-
def view_permitted?(attribute)
|
24
|
+
|
25
|
+
def view_permitted?(attribute)
|
18
26
|
true
|
19
27
|
end
|
20
|
-
|
28
|
+
|
21
29
|
def only_changed?(*attributes)
|
22
30
|
(self.attributes.keys + self.class.reactive_record_association_keys).each do |key|
|
23
31
|
return false if self.send("#{key}_changed?") and !attributes.include? key
|
24
32
|
end
|
25
33
|
true
|
26
34
|
end
|
27
|
-
|
35
|
+
|
28
36
|
def none_changed?(*attributes)
|
29
37
|
attributes.each do |key|
|
30
38
|
return false if self.send("#{key}_changed?")
|
31
39
|
end
|
32
40
|
true
|
33
41
|
end
|
34
|
-
|
42
|
+
|
35
43
|
def any_changed?(*attributes)
|
36
44
|
attributes.each do |key|
|
37
45
|
return true if self.send("#{key}_changed?")
|
38
46
|
end
|
39
47
|
false
|
40
|
-
end
|
41
|
-
|
48
|
+
end
|
49
|
+
|
42
50
|
def all_changed?(*attributes)
|
43
51
|
attributes.each do |key|
|
44
52
|
return false unless self.send("#{key}_changed?")
|
45
53
|
end
|
46
54
|
true
|
47
55
|
end
|
48
|
-
|
56
|
+
|
49
57
|
class << self
|
50
|
-
|
58
|
+
|
51
59
|
attr_reader :reactive_record_association_keys
|
52
|
-
|
60
|
+
|
53
61
|
[:has_many, :belongs_to, :composed_of].each do |macro|
|
54
62
|
define_method "#{macro}_with_reactive_record_add_changed_method".to_sym do |attr_name, *args, &block|
|
55
63
|
define_method "#{attr_name}_changed?".to_sym do
|
@@ -60,19 +68,19 @@ class ActiveRecord::Base
|
|
60
68
|
end
|
61
69
|
alias_method_chain macro, :reactive_record_add_changed_method
|
62
70
|
end
|
63
|
-
|
71
|
+
|
64
72
|
def belongs_to_with_reactive_record_add_is_method(attr_name, scope = nil, options = {})
|
65
73
|
define_method "#{attr_name}_is?".to_sym do |model|
|
66
74
|
send(options[:foreign_key] || "#{attr_name}_id") == model.id
|
67
75
|
end
|
68
76
|
belongs_to_without_reactive_record_add_is_method(attr_name, scope, options)
|
69
77
|
end
|
70
|
-
|
78
|
+
|
71
79
|
alias_method_chain :belongs_to, :reactive_record_add_is_method
|
72
|
-
|
80
|
+
|
73
81
|
end
|
74
|
-
|
75
|
-
|
82
|
+
|
83
|
+
|
76
84
|
def check_permission_with_acting_user(user, permission, *args)
|
77
85
|
old = acting_user
|
78
86
|
self.acting_user = user
|
@@ -80,15 +88,15 @@ class ActiveRecord::Base
|
|
80
88
|
self.acting_user = old
|
81
89
|
self
|
82
90
|
else
|
83
|
-
raise
|
91
|
+
raise ReactiveRecord::AccessViolation, "for #{permission}(#{args})"
|
84
92
|
end
|
85
93
|
end
|
86
|
-
|
94
|
+
|
87
95
|
end
|
88
96
|
|
89
97
|
class ActionController::Base
|
90
|
-
|
98
|
+
|
91
99
|
def acting_user
|
92
100
|
end
|
93
|
-
|
94
|
-
end
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ReactiveRecord
|
2
|
+
|
3
|
+
module Pry
|
4
|
+
|
5
|
+
def self.rescue(&block)
|
6
|
+
if defined? PryRescue
|
7
|
+
::Pry::rescue &block
|
8
|
+
else
|
9
|
+
block.call
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.rescued(e)
|
14
|
+
::Pry::rescued(e) if defined?(PryRescue) && !e.is_a?(ReactiveRecord::AccessViolation)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -186,13 +186,16 @@ module ReactiveRecord
|
|
186
186
|
elsif aggregation = cache_item.aggregation?(method)
|
187
187
|
cache_item.build_new_cache_item(aggregation.mapping.collect { |attribute, accessor| cache_item.value[attribute] }, method, method)
|
188
188
|
else
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
189
|
+
ReactiveRecord::Pry::rescue do
|
190
|
+
begin
|
191
|
+
cache_item.build_new_cache_item(cache_item.value.send(*method), method, method)
|
192
|
+
rescue Exception => e
|
193
|
+
if cache_item.value and cache_item.value != []
|
194
|
+
ReactiveRecord::Pry::rescued(e)
|
195
|
+
raise e, "ReactiveRecord exception caught when applying #{method} to db object #{cache_item.value}: #{e}", e.backtrace
|
196
|
+
else
|
197
|
+
representative
|
198
|
+
end
|
196
199
|
end
|
197
200
|
end
|
198
201
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.36
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mitch VanDuyn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- lib/reactive_record/engine.rb
|
165
165
|
- lib/reactive_record/interval.rb
|
166
166
|
- lib/reactive_record/permissions.rb
|
167
|
+
- lib/reactive_record/pry.rb
|
167
168
|
- lib/reactive_record/serializers.rb
|
168
169
|
- lib/reactive_record/server_data_cache.rb
|
169
170
|
- lib/reactive_record/version.rb
|