ar_sync 1.0.3 → 1.0.4
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/Gemfile.lock +17 -17
- data/ar_sync.gemspec +1 -1
- data/core/{ActioncableAdapter.d.ts → ActionCableAdapter.d.ts} +0 -0
- data/core/{ActioncableAdapter.js → ActionCableAdapter.js} +0 -0
- data/lib/ar_sync/class_methods.rb +7 -13
- data/lib/ar_sync/instance_methods.rb +6 -3
- data/lib/ar_sync/type_script.rb +41 -6
- data/lib/ar_sync/version.rb +1 -1
- data/lib/generators/ar_sync/install/install_generator.rb +1 -1
- data/src/core/{ActioncableAdapter.ts → ActionCableAdapter.ts} +0 -0
- data/vendor/assets/javascripts/{ar_sync_actioncable_adapter.js.erb → ar_sync_action_cable_adapter.js.erb} +1 -1
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1998952425317eff3faa4eb8511f2ad0e40a5f5025dbdc3fae6b5ca7916c454f
|
4
|
+
data.tar.gz: 2b5819d226d4f05892e6fda8a639d758d5579414e6e0ce7eb0fe2cddae978da4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8c730609dedb72287c26ae09b39dfbe75aeb2b9e9c41b029e2c90212bb4253383a08e96fa975d00f56eb24154ba34dbe4fc13620654314e7fe061b227465a5b
|
7
|
+
data.tar.gz: 5c5bed249fbc71e1c620aa1d0ef476efbb34492ee28554b86a158181d1f572e6449959b0e2fabd60af16f9b75e33b043e8d7d58dc8b50934949d88784cdc320a
|
data/Gemfile.lock
CHANGED
@@ -1,46 +1,46 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ar_sync (1.0.
|
4
|
+
ar_sync (1.0.4)
|
5
5
|
activerecord
|
6
|
-
ar_serializer
|
6
|
+
ar_serializer
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activemodel (
|
12
|
-
activesupport (=
|
13
|
-
activerecord (
|
14
|
-
activemodel (=
|
15
|
-
activesupport (=
|
16
|
-
arel (>= 9.0)
|
11
|
+
activemodel (6.0.2.1)
|
12
|
+
activesupport (= 6.0.2.1)
|
13
|
+
activerecord (6.0.2.1)
|
14
|
+
activemodel (= 6.0.2.1)
|
15
|
+
activesupport (= 6.0.2.1)
|
17
16
|
activerecord-import (1.0.2)
|
18
17
|
activerecord (>= 3.2)
|
19
|
-
activesupport (
|
18
|
+
activesupport (6.0.2.1)
|
20
19
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
21
20
|
i18n (>= 0.7, < 2)
|
22
21
|
minitest (~> 5.1)
|
23
22
|
tzinfo (~> 1.1)
|
24
|
-
|
23
|
+
zeitwerk (~> 2.2)
|
24
|
+
ar_serializer (1.1.0)
|
25
25
|
activerecord
|
26
26
|
top_n_loader
|
27
|
-
arel (9.0.0)
|
28
27
|
coderay (1.1.2)
|
29
28
|
concurrent-ruby (1.1.5)
|
30
|
-
i18n (1.
|
29
|
+
i18n (1.7.0)
|
31
30
|
concurrent-ruby (~> 1.0)
|
32
31
|
method_source (0.9.2)
|
33
|
-
minitest (5.
|
32
|
+
minitest (5.13.0)
|
34
33
|
pry (0.12.2)
|
35
34
|
coderay (~> 1.1.0)
|
36
35
|
method_source (~> 0.9.0)
|
37
36
|
rake (12.3.2)
|
38
|
-
sqlite3 (1.
|
37
|
+
sqlite3 (1.4.2)
|
39
38
|
thread_safe (0.3.6)
|
40
|
-
top_n_loader (1.0.
|
39
|
+
top_n_loader (1.0.1)
|
41
40
|
activerecord
|
42
|
-
tzinfo (1.2.
|
41
|
+
tzinfo (1.2.6)
|
43
42
|
thread_safe (~> 0.1)
|
43
|
+
zeitwerk (2.2.2)
|
44
44
|
|
45
45
|
PLATFORMS
|
46
46
|
ruby
|
@@ -53,4 +53,4 @@ DEPENDENCIES
|
|
53
53
|
sqlite3
|
54
54
|
|
55
55
|
BUNDLED WITH
|
56
|
-
1.
|
56
|
+
2.1.2
|
data/ar_sync.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
23
|
spec.add_dependency 'activerecord'
|
24
|
-
spec.add_dependency 'ar_serializer'
|
24
|
+
spec.add_dependency 'ar_serializer'
|
25
25
|
%w[rake pry sqlite3 activerecord-import].each do |gem_name|
|
26
26
|
spec.add_development_dependency gem_name
|
27
27
|
end
|
File without changes
|
File without changes
|
@@ -21,7 +21,7 @@ module ArSync::ModelBase::ClassMethods
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def _each_sync_parent(&block)
|
24
|
-
_sync_parents_info.each(
|
24
|
+
_sync_parents_info.each { |parent, options| block.call(parent, **options) }
|
25
25
|
superclass._each_sync_parent(&block) if superclass < ActiveRecord::Base
|
26
26
|
end
|
27
27
|
|
@@ -46,32 +46,32 @@ module ArSync::ModelBase::ClassMethods
|
|
46
46
|
@_sync_self = true
|
47
47
|
names.each do |name|
|
48
48
|
_sync_children_info[name] = nil
|
49
|
-
_sync_define name, option, &data_block
|
49
|
+
_sync_define name, **option, &data_block
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
53
|
def sync_has_many(name, **option, &data_block)
|
54
54
|
_sync_children_info[name] = [:many, option, data_block]
|
55
|
-
_sync_has_many name, option, &data_block
|
55
|
+
_sync_has_many name, **option, &data_block
|
56
56
|
end
|
57
57
|
|
58
58
|
def sync_has_one(name, **option, &data_block)
|
59
59
|
_sync_children_info[name] = [:one, option, data_block]
|
60
|
-
_sync_define name, option, &data_block
|
60
|
+
_sync_define name, **option, &data_block
|
61
61
|
end
|
62
62
|
|
63
63
|
def _sync_has_many(name, order: :asc, limit: nil, preload: nil, association: nil, **option, &data_block)
|
64
64
|
raise "order not in [:asc, :desc] : #{order}" unless %i[asc desc].include? order
|
65
65
|
if data_block.nil? && preload.nil?
|
66
66
|
underscore_name = name.to_s.underscore.to_sym
|
67
|
-
preload = lambda do |records, _context, params|
|
67
|
+
preload = lambda do |records, _context, **params|
|
68
68
|
ArSerializer::Field.preload_association(
|
69
69
|
self, records, association || underscore_name,
|
70
70
|
order: (!limit && params && params[:order]) || order,
|
71
71
|
limit: [params && params[:limit]&.to_i, limit].compact.min
|
72
72
|
)
|
73
73
|
end
|
74
|
-
data_block = lambda do |preloaded, _context, params|
|
74
|
+
data_block = lambda do |preloaded, _context, **params|
|
75
75
|
records = preloaded ? preloaded[id] || [] : send(name)
|
76
76
|
next records unless limit || order == :asc
|
77
77
|
ArSync::CollectionWithOrder.new(
|
@@ -80,7 +80,7 @@ module ArSync::ModelBase::ClassMethods
|
|
80
80
|
limit: [params && params[:limit]&.to_i, limit].compact.min
|
81
81
|
)
|
82
82
|
end
|
83
|
-
serializer_data_block = lambda do |preloaded, _context, _params|
|
83
|
+
serializer_data_block = lambda do |preloaded, _context, **_params|
|
84
84
|
preloaded ? preloaded[id] || [] : send(name)
|
85
85
|
end
|
86
86
|
params_type = { limit?: :int, order?: [{ :* => %w[asc desc] }, 'asc', 'desc'] }
|
@@ -150,12 +150,6 @@ module ArSync::ModelBase::ClassMethods
|
|
150
150
|
@_sync_belongs_to_info_before_mutation ||= _sync_current_belongs_to_info
|
151
151
|
end
|
152
152
|
|
153
|
-
before_save on: :create do
|
154
|
-
@_sync_parents_info_before_mutation ||= {}
|
155
|
-
@_sync_watch_values_before_mutation ||= {}
|
156
|
-
@_sync_belongs_to_info_before_mutation ||= {}
|
157
|
-
end
|
158
|
-
|
159
153
|
%i[create update destroy].each do |action|
|
160
154
|
after_commit on: action do
|
161
155
|
next if ArSync.skip_notification?
|
@@ -33,10 +33,10 @@ module ArSync::ModelBase::InstanceMethods
|
|
33
33
|
def _serializer_field_value(name)
|
34
34
|
field = self.class._serializer_field_info name
|
35
35
|
preloadeds = field.preloaders.map do |preloader|
|
36
|
-
args = [[self], nil
|
36
|
+
args = [[self], nil]
|
37
37
|
preloader.call(*(preloader.arity < 0 ? args : args.take(preloader.arity)))
|
38
38
|
end
|
39
|
-
instance_exec(*preloadeds, nil,
|
39
|
+
instance_exec(*preloadeds, nil, &field.data_block)
|
40
40
|
end
|
41
41
|
|
42
42
|
def _sync_current_belongs_to_info
|
@@ -65,11 +65,13 @@ module ArSync::ModelBase::InstanceMethods
|
|
65
65
|
parents_was = parents.map { nil }
|
66
66
|
elsif action == :destroy
|
67
67
|
parents_was = _sync_parents_info_before_mutation
|
68
|
+
return unless parents_was
|
68
69
|
parents = parents_was.map { nil }
|
69
70
|
else
|
70
71
|
parents_was = _sync_parents_info_before_mutation
|
72
|
+
return unless parents_was
|
71
73
|
parents = _sync_current_parents_info
|
72
|
-
column_values_was = _sync_watch_values_before_mutation
|
74
|
+
column_values_was = _sync_watch_values_before_mutation || {}
|
73
75
|
column_values = _sync_current_watch_values
|
74
76
|
end
|
75
77
|
parents_was.zip(parents).each do |(parent_was, info_was), (parent, info)|
|
@@ -109,6 +111,7 @@ module ArSync::ModelBase::InstanceMethods
|
|
109
111
|
|
110
112
|
def _sync_notify_self
|
111
113
|
belongs_was = _sync_belongs_to_info_before_mutation
|
114
|
+
return unless belongs_was
|
112
115
|
belongs = _sync_current_belongs_to_info
|
113
116
|
belongs.each do |name, info|
|
114
117
|
next if belongs_was[name] == info
|
data/lib/ar_sync/type_script.rb
CHANGED
@@ -10,17 +10,14 @@ module ArSync::TypeScript
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.generate_type_definition(api_class)
|
13
|
+
types = ArSerializer::TypeScript.related_serializer_types([api_class]).reject { |t| t.type == api_class }
|
13
14
|
[
|
14
|
-
|
15
|
+
types.map { |t| data_type_definition t },
|
16
|
+
types.map { |t| query_type_definition t },
|
15
17
|
request_type_definition(api_class)
|
16
18
|
].join "\n"
|
17
19
|
end
|
18
20
|
|
19
|
-
def self.api_related_classes(api_class)
|
20
|
-
classes = ArSerializer::TypeScript.related_serializer_types([api_class]).map(&:type)
|
21
|
-
classes - [api_class]
|
22
|
-
end
|
23
|
-
|
24
21
|
def self.request_type_definition(api_class)
|
25
22
|
type = ArSerializer::GraphQL::TypeClass.from api_class
|
26
23
|
definitions = []
|
@@ -98,4 +95,42 @@ module ArSync::TypeScript
|
|
98
95
|
}
|
99
96
|
CODE
|
100
97
|
end
|
98
|
+
|
99
|
+
def self.query_type_definition(type)
|
100
|
+
field_definitions = type.fields.map do |field|
|
101
|
+
association_type = field.type.association_type
|
102
|
+
if association_type
|
103
|
+
qname = "Type#{association_type.name}Query"
|
104
|
+
if field.args.empty?
|
105
|
+
"#{field.name}?: true | #{qname} | { attributes?: #{qname} }"
|
106
|
+
else
|
107
|
+
"#{field.name}?: true | #{qname} | { params: #{field.args_ts_type}; attributes?: #{qname} }"
|
108
|
+
end
|
109
|
+
else
|
110
|
+
"#{field.name}?: true"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
field_definitions << "'*'?: true"
|
114
|
+
query_type_name = "Type#{type.name}Query"
|
115
|
+
base_query_type_name = "Type#{type.name}QueryBase"
|
116
|
+
<<~TYPE
|
117
|
+
export type #{query_type_name} = keyof (#{base_query_type_name}) | Readonly<(keyof (#{base_query_type_name}))[]> | #{base_query_type_name}
|
118
|
+
export interface #{base_query_type_name} {
|
119
|
+
#{field_definitions.map { |line| " #{line}" }.join("\n")}
|
120
|
+
}
|
121
|
+
TYPE
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.data_type_definition(type)
|
125
|
+
field_definitions = []
|
126
|
+
type.fields.each do |field|
|
127
|
+
field_definitions << "#{field.name}: #{field.type.ts_type}"
|
128
|
+
end
|
129
|
+
field_definitions << "_meta?: { name: '#{type.name}'; query: Type#{type.name}QueryBase }"
|
130
|
+
<<~TYPE
|
131
|
+
export interface Type#{type.name} {
|
132
|
+
#{field_definitions.map { |line| " #{line}" }.join("\n")}
|
133
|
+
}
|
134
|
+
TYPE
|
135
|
+
end
|
101
136
|
end
|
data/lib/ar_sync/version.rb
CHANGED
@@ -78,7 +78,7 @@ module ArSync
|
|
78
78
|
[
|
79
79
|
'//= require ar_sync',
|
80
80
|
'//= require action_cable',
|
81
|
-
'//= require
|
81
|
+
'//= require ar_sync_action_cable_adapter',
|
82
82
|
'ArSyncModel.setConnectionAdapter(new ArSyncActionCableAdapter(ActionCable))'
|
83
83
|
].join("\n") + "\n",
|
84
84
|
before: '//= require_tree .'
|
File without changes
|
@@ -2,6 +2,6 @@
|
|
2
2
|
var modules = { actioncable: window.ActionCable }
|
3
3
|
var exports = {}
|
4
4
|
function require(name) { return modules[name] }
|
5
|
-
<%= File.read File.dirname(__FILE__) + '/../../../core/
|
5
|
+
<%= File.read File.dirname(__FILE__) + '/../../../core/ActionCableAdapter.js' %>
|
6
6
|
window.ArSyncActionCableAdapter = ActionCableAdapter
|
7
7
|
}())
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tompng
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: ar_serializer
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,8 +111,8 @@ files:
|
|
111
111
|
- ar_sync.gemspec
|
112
112
|
- bin/console
|
113
113
|
- bin/setup
|
114
|
-
- core/
|
115
|
-
- core/
|
114
|
+
- core/ActionCableAdapter.d.ts
|
115
|
+
- core/ActionCableAdapter.js
|
116
116
|
- core/ArSyncApi.d.ts
|
117
117
|
- core/ArSyncApi.js
|
118
118
|
- core/ArSyncModel.d.ts
|
@@ -143,7 +143,7 @@ files:
|
|
143
143
|
- lib/generators/ar_sync/types/types_generator.rb
|
144
144
|
- package-lock.json
|
145
145
|
- package.json
|
146
|
-
- src/core/
|
146
|
+
- src/core/ActionCableAdapter.ts
|
147
147
|
- src/core/ArSyncApi.ts
|
148
148
|
- src/core/ArSyncModel.ts
|
149
149
|
- src/core/ArSyncStore.ts
|
@@ -154,7 +154,7 @@ files:
|
|
154
154
|
- src/index.ts
|
155
155
|
- tsconfig.json
|
156
156
|
- vendor/assets/javascripts/ar_sync.js.erb
|
157
|
-
- vendor/assets/javascripts/
|
157
|
+
- vendor/assets/javascripts/ar_sync_action_cable_adapter.js.erb
|
158
158
|
homepage: https://github.com/tompng/ar_sync
|
159
159
|
licenses:
|
160
160
|
- MIT
|
@@ -174,8 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
174
|
- !ruby/object:Gem::Version
|
175
175
|
version: '0'
|
176
176
|
requirements: []
|
177
|
-
|
178
|
-
rubygems_version: 2.7.3
|
177
|
+
rubygems_version: 3.1.2
|
179
178
|
signing_key:
|
180
179
|
specification_version: 4
|
181
180
|
summary: ActiveRecord - JavaScript Sync
|