hyper-model 1.0.alpha1.6 → 1.0.alpha1.7
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/hyper-model.gemspec +1 -1
- data/lib/active_record_base.rb +5 -1
- data/lib/enumerable/pluck.rb +3 -2
- data/lib/hyper_model/version.rb +1 -1
- data/lib/reactive_record/active_record/base.rb +15 -0
- data/lib/reactive_record/active_record/public_columns_hash.rb +25 -26
- data/lib/reactive_record/active_record/reactive_record/collection.rb +11 -2
- data/lib/reactive_record/active_record/reactive_record/isomorphic_base.rb +11 -8
- data/lib/reactive_record/server_data_cache.rb +1 -1
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d85eab56099328a86bb19e2911f16bd1b5b9a6e98a79d7c912898dce7775e876
|
4
|
+
data.tar.gz: cf0f2c03f22c84710e76e5177f8f54f8847c9e1e671f3c5aab38b8c77abbfc8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8095f00d457423d733f0d1f8ea0118a47b5084b282bc224b9a3a7b90e8ea9321487e849932b48a4f2fe0d75ee1047033150da036019cdc7be0556d7fe3d71eb2
|
7
|
+
data.tar.gz: b734954d84ae3b363a9fceff250b0a49a4062ec5d893a96197d4c9cd9f6ccb3adbdd90d8f41f325a51faffaef08c7b976217005fdd3b85c98e9fd219575dd1ec
|
data/hyper-model.gemspec
CHANGED
@@ -52,7 +52,7 @@ Gem::Specification.new do |spec|
|
|
52
52
|
spec.add_development_dependency 'rspec-rails'
|
53
53
|
spec.add_development_dependency 'rspec-steps', '~> 2.1.1'
|
54
54
|
spec.add_development_dependency 'rspec-wait'
|
55
|
-
spec.add_development_dependency 'rubocop'
|
55
|
+
spec.add_development_dependency 'rubocop' #, '~> 0.51.0'
|
56
56
|
spec.add_development_dependency 'shoulda'
|
57
57
|
spec.add_development_dependency 'shoulda-matchers'
|
58
58
|
spec.add_development_dependency 'spring-commands-rspec', '~> 1.0.4'
|
data/lib/active_record_base.rb
CHANGED
@@ -14,7 +14,7 @@ module ActiveRecord
|
|
14
14
|
else
|
15
15
|
{ server: args[0] }
|
16
16
|
end
|
17
|
-
return opts if opts
|
17
|
+
return opts if opts[:server].respond_to?(:call) || RUBY_ENGINE == 'opal'
|
18
18
|
raise 'must provide either a proc as the first arg or by the '\
|
19
19
|
'`:server` option to scope and default_scope methods'
|
20
20
|
end
|
@@ -392,6 +392,10 @@ module ActiveRecord
|
|
392
392
|
nil
|
393
393
|
end
|
394
394
|
end
|
395
|
+
|
396
|
+
scope :__hyperstack_internal_where_hash_scope, ->(*args) { where(*args) }
|
397
|
+
|
398
|
+
scope :__hyperstack_internal_where_sql_scope, ->(*args) { where(*args) }
|
395
399
|
end
|
396
400
|
end
|
397
401
|
|
data/lib/enumerable/pluck.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Add pluck to enumerable... its already done for us in rails 5+
|
2
2
|
module Enumerable
|
3
|
-
def pluck(
|
4
|
-
map { |element| element[key] }
|
3
|
+
def pluck(*keys)
|
4
|
+
map { |element| keys.map { |key| element[key] } }
|
5
|
+
.flatten(keys.count > 1 ? 0 : 1)
|
5
6
|
end
|
6
7
|
end unless Enumerable.method_defined? :pluck
|
data/lib/hyper_model/version.rb
CHANGED
@@ -10,6 +10,21 @@ module ActiveRecord
|
|
10
10
|
finder_method :__hyperstack_internal_scoped_last
|
11
11
|
scope :__hyperstack_internal_scoped_last_n, ->(n) { last(n) }
|
12
12
|
|
13
|
+
def self.where(*args)
|
14
|
+
if args[0].is_a? Hash
|
15
|
+
# we can compute membership in the scope when the arg is a hash
|
16
|
+
__hyperstack_internal_where_hash_scope(args[0])
|
17
|
+
else
|
18
|
+
# otherwise the scope has to always be computed on the server
|
19
|
+
__hyperstack_internal_where_sql_scope(*args)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
scope :__hyperstack_internal_where_hash_scope,
|
24
|
+
client: ->(attrs) { !attrs.detect { |k, v| self[k] != v } }
|
25
|
+
|
26
|
+
scope :__hyperstack_internal_where_sql_scope
|
27
|
+
|
13
28
|
ReactiveRecord::ScopeDescription.new(
|
14
29
|
self, :___hyperstack_internal_scoped_find_by,
|
15
30
|
client: ->(attrs) { !attrs.detect { |attr, value| attributes[attr] != value } }
|
@@ -6,39 +6,38 @@ module ActiveRecord
|
|
6
6
|
# adds method to get the HyperMesh public column types
|
7
7
|
# this works because the public folder is currently required to be eager loaded.
|
8
8
|
class Base
|
9
|
+
@@hyper_stack_public_columns_hash_mutex = Mutex.new
|
9
10
|
def self.public_columns_hash
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
@@hyper_stack_public_columns_hash_mutex.synchronize do
|
12
|
+
return @public_columns_hash if @public_columns_hash && Rails.env.production?
|
13
|
+
files = []
|
14
|
+
Hyperstack.public_model_directories.each do |dir|
|
15
|
+
dir_length = Rails.root.join(dir).to_s.length + 1
|
16
|
+
Dir.glob(Rails.root.join(dir, '**', '*.rb')).each do |file|
|
17
|
+
require_dependency(file) # still the file is loaded to make sure for development and test env
|
18
|
+
files << file[dir_length..-4]
|
19
|
+
end
|
17
20
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
@public_columns_hash = {}
|
22
|
+
# descendants only works for already loaded models!
|
23
|
+
descendants.each do |model|
|
24
|
+
if files.include?(model.name.underscore) && model.name.underscore != 'application_record'
|
25
|
+
@public_columns_hash[model.name] = model.columns_hash rescue nil # why rescue?
|
26
|
+
end
|
24
27
|
end
|
25
|
-
|
26
|
-
# @public_columns_hash[model.name] = model.columns_hash if model.table_name
|
27
|
-
# rescue Exception => e
|
28
|
-
# binding.pry
|
29
|
-
# @public_columns_hash = nil
|
30
|
-
# raise $!, "Could not read 'columns_hash' for #{model}: #{$!}", $!.backtrace
|
31
|
-
# end if files.include?(model.name.underscore) && model.name.underscore != 'application_record'
|
28
|
+
@public_columns_hash
|
32
29
|
end
|
33
|
-
@public_columns_hash
|
34
30
|
end
|
35
31
|
|
32
|
+
@@hyper_stack_public_columns_hash_as_json_mutex = Mutex.new
|
36
33
|
def self.public_columns_hash_as_json
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
@@hyper_stack_public_columns_hash_as_json_mutex.synchronize do
|
35
|
+
return @public_columns_hash_json if @public_columns_hash_json && Rails.env.production?
|
36
|
+
pch = public_columns_hash
|
37
|
+
return @public_columns_hash_json if @prev_public_columns_hash == pch
|
38
|
+
@prev_public_columns_hash = pch
|
39
|
+
@public_columns_hash_json = pch.to_json
|
40
|
+
end
|
42
41
|
end
|
43
42
|
end
|
44
43
|
end
|
@@ -677,10 +677,19 @@ To determine this sync_scopes first asks if the record being changed is in the s
|
|
677
677
|
all.send(method, *args, &block)
|
678
678
|
elsif ScopeDescription.find(@target_klass, method)
|
679
679
|
apply_scope(method, *args)
|
680
|
-
elsif
|
680
|
+
elsif !@target_klass.respond_to?(method)
|
681
|
+
super
|
682
|
+
elsif ScopeDescription.find(@target_klass, "_#{method}")
|
681
683
|
apply_scope("_#{method}", *args).first
|
682
684
|
else
|
683
|
-
|
685
|
+
# create a subclass of the original target class that responds to all
|
686
|
+
# by returning our collection back
|
687
|
+
fake_class = Class.new(@target_klass)
|
688
|
+
fake_class.instance_variable_set("@all", self)
|
689
|
+
# Opal 0.11 does not handle overridding the original @target_klass
|
690
|
+
# with an accessor, so we define the accessor as a method.
|
691
|
+
fake_class.define_singleton_method(:all) { @all }
|
692
|
+
fake_class.send(method, *args, &block)
|
684
693
|
end
|
685
694
|
end
|
686
695
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
1
|
module ReactiveRecord
|
4
2
|
|
5
3
|
class Base
|
@@ -557,13 +555,21 @@ module ReactiveRecord
|
|
557
555
|
if !data_loading? && (id || vector)
|
558
556
|
Operations::Destroy.run(model: ar_instance.model_name.to_s, id: id, vector: vector)
|
559
557
|
.then do |response|
|
560
|
-
|
558
|
+
#[reactive_record_id, model.class.name, attributes, messages] model.errors.messages
|
559
|
+
|
560
|
+
if response[:success]
|
561
|
+
@destroyed = true
|
562
|
+
Broadcast.to_self ar_instance
|
563
|
+
else
|
564
|
+
errors! response[:messages]
|
565
|
+
end
|
561
566
|
yield response[:success], response[:message] if block
|
562
567
|
promise.resolve response
|
563
568
|
end
|
564
569
|
else
|
565
570
|
destroy_associations
|
566
571
|
# sync_unscoped_collection! # ? should we do this here was NOT being done before hypermesh integration
|
572
|
+
@destroyed = true
|
567
573
|
yield true, nil if block
|
568
574
|
promise.resolve(success: true)
|
569
575
|
end
|
@@ -575,8 +581,6 @@ module ReactiveRecord
|
|
575
581
|
# sync!
|
576
582
|
# and modify server_data_cache so that it does NOT call destroy
|
577
583
|
|
578
|
-
@destroyed = true
|
579
|
-
|
580
584
|
promise
|
581
585
|
end
|
582
586
|
|
@@ -590,10 +594,9 @@ module ReactiveRecord
|
|
590
594
|
ServerDataCache.new(acting_user, {})[*vector].value
|
591
595
|
end
|
592
596
|
|
593
|
-
record.check_permission_with_acting_user(acting_user, :destroy_permitted?).destroy
|
594
|
-
{ success:
|
597
|
+
success = record.check_permission_with_acting_user(acting_user, :destroy_permitted?).destroy
|
598
|
+
{ success: success, attributes: {}, messages: record.errors.messages }
|
595
599
|
rescue Exception => e
|
596
|
-
# ReactiveRecord::Pry.rescued(e)
|
597
600
|
{ success: false, record: record, message: e }
|
598
601
|
end
|
599
602
|
end
|
@@ -506,7 +506,7 @@ keys:
|
|
506
506
|
|
507
507
|
target.send "#{method}=", value.first
|
508
508
|
elsif value.is_a? Array
|
509
|
-
target.send("_hyperstack_internal_setter_#{method}", value.first) unless
|
509
|
+
target.send("_hyperstack_internal_setter_#{method}", value.first) unless [target.class.primary_key, :id].include? method
|
510
510
|
elsif value.is_a?(Hash) && value[:id] && value[:id].first && (association = target.class.reflect_on_association(method))
|
511
511
|
# not sure if its necessary to check the id above... is it possible to for the method to be an association but not have an id?
|
512
512
|
klass = value[:model_name] ? Object.const_get(value[:model_name].first) : association.klass
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyper-model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.alpha1.
|
4
|
+
version: 1.0.alpha1.7
|
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: 2021-
|
12
|
+
date: 2021-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - '='
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 1.0.alpha1.
|
48
|
+
version: 1.0.alpha1.7
|
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.alpha1.
|
55
|
+
version: 1.0.alpha1.7
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: bundler
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,28 +101,28 @@ dependencies:
|
|
101
101
|
requirements:
|
102
102
|
- - '='
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.0.alpha1.
|
104
|
+
version: 1.0.alpha1.7
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
109
|
- - '='
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: 1.0.alpha1.
|
111
|
+
version: 1.0.alpha1.7
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: hyper-trace
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - '='
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.0.alpha1.
|
118
|
+
version: 1.0.alpha1.7
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - '='
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: 1.0.alpha1.
|
125
|
+
version: 1.0.alpha1.7
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: mini_racer
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -397,16 +397,16 @@ dependencies:
|
|
397
397
|
name: rubocop
|
398
398
|
requirement: !ruby/object:Gem::Requirement
|
399
399
|
requirements:
|
400
|
-
- - "
|
400
|
+
- - ">="
|
401
401
|
- !ruby/object:Gem::Version
|
402
|
-
version: 0
|
402
|
+
version: '0'
|
403
403
|
type: :development
|
404
404
|
prerelease: false
|
405
405
|
version_requirements: !ruby/object:Gem::Requirement
|
406
406
|
requirements:
|
407
|
-
- - "
|
407
|
+
- - ">="
|
408
408
|
- !ruby/object:Gem::Version
|
409
|
-
version: 0
|
409
|
+
version: '0'
|
410
410
|
- !ruby/object:Gem::Dependency
|
411
411
|
name: shoulda
|
412
412
|
requirement: !ruby/object:Gem::Requirement
|