hyper-mesh 1.0.0.lap26 → 1.0.0.lap27

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
  SHA256:
3
- metadata.gz: df6aec56f7f9fde7d07bc8504f5e6e2642043a52ebdd2df5779f4572af0a6c4a
4
- data.tar.gz: 4a3a92df3d11d950c36912e574b88ac046c449bb93b2cd0d9d8044587fd87eab
3
+ metadata.gz: ae2e1bd29b4c0fd94efb2466949a271d478a5585d2e81045e88871c02e412256
4
+ data.tar.gz: abf0a91cc51d3b62e3053392082b0df4a1f80113bb0cd3d8876aca6fbb994a54
5
5
  SHA512:
6
- metadata.gz: 67e68255390e2339097ada29e2a2b0dceb854ffc07ea0656237f855f71a57bed31e0e49bd12a01a1724007e1231b5f257b0deb4f54296cf8b9a2b4be79819bf7
7
- data.tar.gz: e4d963fa444d6a44a14684c5453e4de82f136063d757c38efd5a07c63f458a30fb92cf62b8f37e78380e893a42e74e2aca309e484a903cd3a453952dddd52131
6
+ metadata.gz: 7867946eaf76d99ef08323ccbf6c78fe20c7cb440e4cbe43b379bbd34e5ea168808b3d525c8649ce04f20e5ea37f196b6b1a1b0f7a0bca849abbbc14373c97f5
7
+ data.tar.gz: 820061867257b00bb28cedfc11212e3f5d0a28439a1080c0aca2651977673ea13eb9a6d997fca5a7b4dd333ffa1f88ceca07daa4923f7ed682c2b2a6ccf42156
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
1
  source 'https://rubygems.org'
2
+ gem 'hyper-operation', git: 'https://github.com/ruby-hyperloop/hyper-operation.git', branch: 'edge'
2
3
  gem "opal-jquery", git: "https://github.com/opal/opal-jquery.git", branch: "master"
3
4
  gemspec
@@ -17,6 +17,7 @@ if RUBY_ENGINE == 'opal'
17
17
  require 'reactive_record/active_record/reactive_record/column_types'
18
18
  require "reactive_record/active_record/aggregations"
19
19
  require "reactive_record/active_record/associations"
20
+ require "reactive_record/active_record/reactive_record/backing_record_inspector"
20
21
  require "reactive_record/active_record/reactive_record/base"
21
22
  require "reactive_record/active_record/reactive_record/reactive_set_relationship_helpers"
22
23
  require "reactive_record/active_record/reactive_record/collection"
@@ -1,3 +1,3 @@
1
1
  module Hypermesh
2
- VERSION = '1.0.0.lap26'
2
+ VERSION = '1.0.0.lap27'
3
3
  end
@@ -2,6 +2,12 @@ module ActiveRecord
2
2
 
3
3
  module InstanceMethods
4
4
 
5
+ def inspect
6
+ "<#{model_name}:#{ReactiveRecord::Operations::Base::FORMAT % to_key} "\
7
+ "(#{ReactiveRecord::Operations::Base::FORMAT % object_id}) "\
8
+ "#{backing_record.inspection_details} >"
9
+ end
10
+
5
11
  attr_reader :backing_record
6
12
 
7
13
  def attributes
@@ -167,6 +173,10 @@ module ActiveRecord
167
173
  @backing_record.errors
168
174
  end
169
175
 
176
+ def to_key
177
+ @backing_record.object_id
178
+ end
179
+
170
180
  def update_attribute(attr, value, &block)
171
181
  send("#{attr}=", value)
172
182
  save(validate: false, &block)
@@ -0,0 +1,39 @@
1
+ module ReactiveRecord
2
+ # inspection_details is used by client side ActiveRecord::Base
3
+ # runs down the possible states of a backing record and returns
4
+ # the appropriate string. The order of execution is important!
5
+ module BackingRecordInspector
6
+ def inspection_details
7
+ return error_details unless errors.empty?
8
+ return new_details if new?
9
+ return destroyed_details if destroyed
10
+ return loading_details unless attributes.key? primary_key
11
+ return dirty_details unless changed_attributes.empty?
12
+ "[loaded id: #{id}]"
13
+ end
14
+
15
+ def error_details
16
+ id_str = "id: #{id} " unless new?
17
+ "[errors #{id_str}#{errors.messages}]"
18
+ end
19
+
20
+ def new_details
21
+ "[new #{attributes.select { |attr| column_type(attr) }}]"
22
+ end
23
+
24
+ def destroyed_details
25
+ "[destroyed id: #{id}]"
26
+ end
27
+
28
+ def loading_details
29
+ "[loading #{vector}]"
30
+ end
31
+
32
+ def dirty_details
33
+ changes = Hash[changed_attributes.collect do |attr|
34
+ [attr, [@synced_attributes[attr], attributes[attr]]] if column_type(attr)
35
+ end.compact]
36
+ "[changed id: #{id} #{changes}]"
37
+ end
38
+ end
39
+ end
@@ -1,5 +1,6 @@
1
1
  module ReactiveRecord
2
2
  class Base
3
+ include BackingRecordInspector
3
4
 
4
5
  # Its all about lazy loading. This prevents us from grabbing enormous association collections, or large attributes
5
6
  # unless they are explicitly requested.
@@ -344,7 +345,7 @@ module ReactiveRecord
344
345
 
345
346
  def errors!(errors)
346
347
  @saving = false
347
- @errors = errors and ActiveModel::Error.new(errors)
348
+ @errors = errors && ActiveModel::Error.new(errors)
348
349
  end
349
350
 
350
351
  def saved! # sets saving to false AND notifies
@@ -363,7 +364,7 @@ module ReactiveRecord
363
364
  end
364
365
 
365
366
  def new?
366
- !id and !vector
367
+ !id && !vector
367
368
  end
368
369
 
369
370
  def find_association(association, id)
@@ -491,7 +491,7 @@ module ReactiveRecord
491
491
  end
492
492
 
493
493
  rescue Exception => e
494
- ReactiveRecord::Pry.rescued(e)
494
+ #ReactiveRecord::Pry.rescued(e)
495
495
  if save
496
496
  {success: false, saved_models: saved_models, message: e}
497
497
  else
@@ -554,7 +554,7 @@ module ReactiveRecord
554
554
  {success: true, attributes: {}}
555
555
 
556
556
  rescue Exception => e
557
- ReactiveRecord::Pry.rescued(e)
557
+ #ReactiveRecord::Pry.rescued(e)
558
558
  {success: false, record: record, message: e}
559
559
  end
560
560
  end
@@ -2,11 +2,56 @@ module ReactiveRecord
2
2
  # redefine if you want to process errors (i.e. logging, rollbar, etc)
3
3
  def self.on_fetch_error(e, params); end
4
4
 
5
+ # associations: {parent_id: record.object_id, attribute: attribute, child_id: assoc_record.object_id}
6
+ # models: {id: record.object_id, model: record.model.model_name, attributes: changed_attributes}
7
+
5
8
  module Operations
9
+ # to make debug easier we convert all the object_id strings to be hex representation
10
+ class Base < Hyperloop::ControllerOp
11
+ param :acting_user, nils: true
12
+
13
+ FORMAT = '0x%x'
14
+
15
+ def self.serialize_params(hash)
16
+ hash['associations'].each do |assoc|
17
+ assoc['parent_id'] = FORMAT % assoc['parent_id']
18
+ assoc['child_id'] = FORMAT % assoc['child_id']
19
+ end if hash['associations']
20
+ hash['models'].each do |assoc|
21
+ assoc['id'] = FORMAT % assoc[:id]
22
+ end if hash['models']
23
+ hash
24
+ end
25
+
26
+ def self.deserialize_params(hash)
27
+ hash['associations'].each do |assoc|
28
+ assoc['parent_id'] = assoc['parent_id'].to_i(16)
29
+ assoc['child_id'] = assoc['child_id'].to_i(16)
30
+ end if hash['associations']
31
+ hash['models'].each do |assoc|
32
+ assoc['id'] = assoc['id'].to_i(16)
33
+ end if hash['models']
34
+ hash
35
+ end
36
+
37
+ def self.serialize_response(response)
38
+ response[:saved_models].each do |saved_model|
39
+ saved_model[0] = FORMAT % saved_model[0]
40
+ end if response.is_a?(Hash) && response[:saved_models]
41
+ response
42
+ end
43
+
44
+ def self.deserialize_response(response)
45
+ response[:saved_models].each do |saved_model|
46
+ saved_model[0] = saved_model[0].to_i(16)
47
+ end if response.is_a?(Hash) && response[:saved_models]
48
+ response
49
+ end
50
+ end
6
51
  # fetch queued up records from the server
7
52
  # subclass of ControllerOp so we can pass the controller
8
53
  # along to on_fetch_error
9
- class Fetch < Hyperloop::ControllerOp
54
+ class Fetch < Base
10
55
  param :acting_user, nils: true
11
56
  param models: []
12
57
  param associations: []
@@ -25,7 +70,7 @@ module ReactiveRecord
25
70
  end
26
71
  end
27
72
 
28
- class Save < Hyperloop::ServerOp
73
+ class Save < Base
29
74
  param :acting_user, nils: true
30
75
  param models: []
31
76
  param associations: []
@@ -42,7 +87,7 @@ module ReactiveRecord
42
87
  end
43
88
  end
44
89
 
45
- class Destroy < Hyperloop::ServerOp
90
+ class Destroy < Base
46
91
  param :acting_user, nils: true
47
92
  param :model
48
93
  param :id
@@ -1,11 +1,3 @@
1
- module ReactiveRecord
2
- class AccessViolation < StandardError
3
- def message
4
- "ReactiveRecord::AccessViolation: #{super}"
5
- end
6
- end
7
- end
8
-
9
1
  module Hyperloop
10
2
  class InternalPolicy
11
3
 
@@ -3,7 +3,7 @@ module ReactiveRecord
3
3
  module Pry
4
4
 
5
5
  def self.rescued(e)
6
- if defined?(PryRescue) && e.instance_variable_defined?(:@rescue_bindings) && !e.is_a?(ReactiveRecord::AccessViolation)
6
+ if defined?(PryRescue) && e.instance_variable_defined?(:@rescue_bindings) && !e.is_a?(Hyperloop::AccessViolation)
7
7
  ::Pry::rescued(e)
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyper-mesh
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.lap26
4
+ version: 1.0.0.lap27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mitch VanDuyn
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-03-05 00:00:00.000000000 Z
12
+ date: 2018-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -31,28 +31,28 @@ dependencies:
31
31
  requirements:
32
32
  - - '='
33
33
  - !ruby/object:Gem::Version
34
- version: 1.0.0.lap26
34
+ version: 1.0.0.lap27
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - '='
40
40
  - !ruby/object:Gem::Version
41
- version: 1.0.0.lap26
41
+ version: 1.0.0.lap27
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: hyper-operation
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - '='
47
47
  - !ruby/object:Gem::Version
48
- version: 1.0.0.lap26
48
+ version: 1.0.0.lap27
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - '='
54
54
  - !ruby/object:Gem::Version
55
- version: 1.0.0.lap26
55
+ version: 1.0.0.lap27
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: bundler
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -129,14 +129,14 @@ dependencies:
129
129
  requirements:
130
130
  - - '='
131
131
  - !ruby/object:Gem::Version
132
- version: 1.0.0.lap26
132
+ version: 1.0.0.lap27
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - '='
138
138
  - !ruby/object:Gem::Version
139
- version: 1.0.0.lap26
139
+ version: 1.0.0.lap27
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: hyper-trace
142
142
  requirement: !ruby/object:Gem::Requirement
@@ -608,6 +608,7 @@ files:
608
608
  - lib/reactive_record/active_record/error.rb
609
609
  - lib/reactive_record/active_record/instance_methods.rb
610
610
  - lib/reactive_record/active_record/public_columns_hash.rb
611
+ - lib/reactive_record/active_record/reactive_record/backing_record_inspector.rb
611
612
  - lib/reactive_record/active_record/reactive_record/base.rb
612
613
  - lib/reactive_record/active_record/reactive_record/collection.rb
613
614
  - lib/reactive_record/active_record/reactive_record/column_types.rb