hyper-model 1.0.alpha1.6 → 1.0.alpha1.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|