motor-admin 0.1.43 → 0.1.44
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/motor/active_storage_attachments_controller.rb +1 -1
- data/config/routes.rb +0 -2
- data/lib/motor/active_record_utils.rb +1 -0
- data/lib/motor/active_record_utils/active_storage_blob_patch.rb +25 -0
- data/lib/motor/admin.rb +7 -1
- data/lib/motor/build_schema.rb +1 -0
- data/lib/motor/build_schema/adjust_devise_model_schema.rb +60 -0
- data/lib/motor/build_schema/load_from_rails.rb +33 -19
- data/lib/motor/version.rb +1 -1
- data/ui/dist/{main-c3893a249308242d20f5.css.gz → main-e763d59007bb725ea622.css.gz} +0 -0
- data/ui/dist/main-e763d59007bb725ea622.js.gz +0 -0
- data/ui/dist/manifest.json +5 -5
- metadata +6 -4
- data/ui/dist/main-c3893a249308242d20f5.js.gz +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74c91b2c5dbc0b48fa75a4fa9f5ec2eb8a3848b2e65cf819b9ddc3317e379a19
|
4
|
+
data.tar.gz: bee5733d821cde96004674d36c9be0467e32044d921a4b52e863b4be4e3de55b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bb22f83f9c270696f2d32cc384b98d90a5dab99f7f377258682dbc3622bd574ea0c6bf43de5cd955bb551dd56d6d43b4e618a53803a7d91417a7ec88ae9571f
|
7
|
+
data.tar.gz: 6e1f295abe63ca50e7176789523747810384307c03bcf5c4c719cc41a85296573fb0f6c3e193f06e625ed5801c204a519675539719d966357398293fe3a10977
|
data/config/routes.rb
CHANGED
@@ -7,3 +7,4 @@ require_relative './active_record_utils/types'
|
|
7
7
|
require_relative './active_record_utils/fetch_methods'
|
8
8
|
require_relative './active_record_utils/defined_scopes_extension'
|
9
9
|
require_relative './active_record_utils/active_storage_links_extension'
|
10
|
+
require_relative './active_record_utils/active_storage_blob_patch'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Motor
|
4
|
+
module ActiveRecordUtils
|
5
|
+
module ActiveStorageBlobPatch
|
6
|
+
KEYWORD_ARGS = %i[io filename content_type metadata identify].freeze
|
7
|
+
|
8
|
+
def build_after_upload(hash)
|
9
|
+
super(**hash.with_indifferent_access.slice(*KEYWORD_ARGS).symbolize_keys)
|
10
|
+
end
|
11
|
+
|
12
|
+
def build_after_unfurling(hash)
|
13
|
+
super(**hash.with_indifferent_access.slice(*KEYWORD_ARGS).symbolize_keys)
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_after_unfurling!(hash)
|
17
|
+
super(**hash.with_indifferent_access.slice(*KEYWORD_ARGS).symbolize_keys)
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_and_upload!(hash)
|
21
|
+
super(**hash.with_indifferent_access.slice(*KEYWORD_ARGS).symbolize_keys)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/motor/admin.rb
CHANGED
@@ -3,9 +3,11 @@
|
|
3
3
|
module Motor
|
4
4
|
class Admin < ::Rails::Engine
|
5
5
|
initializer 'motor.startup_message' do
|
6
|
-
|
6
|
+
config.after_initialize do
|
7
7
|
next unless Motor.server?
|
8
8
|
|
9
|
+
Rails.application.reload_routes!
|
10
|
+
|
9
11
|
if Rails.application.routes.url_helpers.respond_to?(:motor_admin_path)
|
10
12
|
url =
|
11
13
|
begin
|
@@ -67,6 +69,10 @@ module Motor
|
|
67
69
|
ActiveSupport.on_load(:active_storage_attachment) do
|
68
70
|
ActiveStorage::Attachment.include(Motor::ActiveRecordUtils::ActiveStorageLinksExtension)
|
69
71
|
end
|
72
|
+
|
73
|
+
ActiveSupport.on_load(:active_storage_blob) do
|
74
|
+
ActiveStorage::Blob.singleton_class.prepend(Motor::ActiveRecordUtils::ActiveStorageBlobPatch)
|
75
|
+
end
|
70
76
|
end
|
71
77
|
end
|
72
78
|
end
|
data/lib/motor/build_schema.rb
CHANGED
@@ -68,6 +68,7 @@ module Motor
|
|
68
68
|
end
|
69
69
|
|
70
70
|
require_relative './build_schema/active_storage_attachment_schema'
|
71
|
+
require_relative './build_schema/adjust_devise_model_schema'
|
71
72
|
require_relative './build_schema/load_from_rails'
|
72
73
|
require_relative './build_schema/find_display_column'
|
73
74
|
require_relative './build_schema/persist_resource_configs'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Motor
|
4
|
+
module BuildSchema
|
5
|
+
module AdjustDeviseModelSchema
|
6
|
+
HIDDEN_COLUMNS = %w[
|
7
|
+
encrypted_password
|
8
|
+
reset_password_token
|
9
|
+
confirmation_token
|
10
|
+
].freeze
|
11
|
+
|
12
|
+
READ_ONLY_COLUMNS = %w[
|
13
|
+
reset_password_sent_at
|
14
|
+
remember_created_at
|
15
|
+
sign_in_count
|
16
|
+
current_sign_in_at
|
17
|
+
last_sign_in_at
|
18
|
+
current_sign_in_ip
|
19
|
+
last_sign_in_ip
|
20
|
+
confirmed_at
|
21
|
+
confirmation_sent_at
|
22
|
+
].freeze
|
23
|
+
|
24
|
+
module_function
|
25
|
+
|
26
|
+
def call(schema, devise_modules)
|
27
|
+
modify_column_access_types!(schema[:columns])
|
28
|
+
add_password_column!(schema[:columns]) if devise_modules.include?(:database_authenticatable)
|
29
|
+
|
30
|
+
schema
|
31
|
+
end
|
32
|
+
|
33
|
+
def modify_column_access_types!(columns)
|
34
|
+
columns.each do |column|
|
35
|
+
column[:access_type] =
|
36
|
+
case column[:name]
|
37
|
+
when *HIDDEN_COLUMNS
|
38
|
+
ColumnAccessTypes::HIDDEN
|
39
|
+
when *READ_ONLY_COLUMNS
|
40
|
+
ColumnAccessTypes::READ_ONLY
|
41
|
+
else
|
42
|
+
column[:access_type]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_password_column!(columns)
|
48
|
+
columns << {
|
49
|
+
name: 'password',
|
50
|
+
display_name: 'Password',
|
51
|
+
column_type: 'string',
|
52
|
+
access_type: 'write_only',
|
53
|
+
default_value: nil,
|
54
|
+
validators: [],
|
55
|
+
virtual: true
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -10,7 +10,15 @@ module Motor
|
|
10
10
|
|
11
11
|
def call
|
12
12
|
models.map do |model|
|
13
|
-
|
13
|
+
Object.const_get(model.name)
|
14
|
+
|
15
|
+
schema = build_model_schema(model)
|
16
|
+
|
17
|
+
if model.respond_to?(:devise_modules)
|
18
|
+
Motor::BuildSchema::AdjustDeviseModelSchema.call(schema, model.devise_modules)
|
19
|
+
end
|
20
|
+
|
21
|
+
schema
|
14
22
|
rescue StandardError, NotImplementedError => e
|
15
23
|
Rails.logger.error(e) if model.name != 'Audited::Audit'
|
16
24
|
|
@@ -108,13 +116,15 @@ module Motor
|
|
108
116
|
model.reflections.map do |name, ref|
|
109
117
|
next if !ref.has_one? && !ref.belongs_to?
|
110
118
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
119
|
+
unless ref.polymorphic?
|
120
|
+
begin
|
121
|
+
next if ref.klass.name == 'ActiveStorage::Blob'
|
122
|
+
rescue StandardError => e
|
123
|
+
Rails.logger.error(e)
|
116
124
|
|
117
|
-
|
125
|
+
next
|
126
|
+
end
|
127
|
+
end
|
118
128
|
|
119
129
|
build_reflection_column(name, model, ref, default_attrs)
|
120
130
|
end.compact
|
@@ -122,7 +132,7 @@ module Motor
|
|
122
132
|
|
123
133
|
def build_reflection_column(name, model, ref, default_attrs)
|
124
134
|
column_name = ref.belongs_to? ? ref.foreign_key.to_s : name
|
125
|
-
is_attachment = ref.klass.name == 'ActiveStorage::Attachment'
|
135
|
+
is_attachment = !ref.polymorphic? && ref.klass.name == 'ActiveStorage::Attachment'
|
126
136
|
access_type = ref.belongs_to? || is_attachment ? ColumnAccessTypes::READ_WRITE : ColumnAccessTypes::READ_ONLY
|
127
137
|
|
128
138
|
{
|
@@ -139,27 +149,20 @@ module Motor
|
|
139
149
|
end
|
140
150
|
|
141
151
|
def build_reference(name, reflection)
|
142
|
-
is_attachment = reflection.klass.name == 'ActiveStorage::Attachment'
|
143
|
-
|
144
152
|
{
|
145
153
|
name: name,
|
146
154
|
display_name: name.humanize,
|
147
|
-
model_name: reflection.klass.name.underscore,
|
155
|
+
model_name: reflection.polymorphic? ? nil : reflection.klass.name.underscore,
|
148
156
|
reference_type: reflection.belongs_to? ? 'belongs_to' : 'has_one',
|
149
157
|
foreign_key: reflection.foreign_key,
|
150
|
-
polymorphic: reflection.polymorphic?
|
158
|
+
polymorphic: reflection.polymorphic?
|
151
159
|
}
|
152
160
|
end
|
153
161
|
|
154
162
|
def fetch_associations(model)
|
155
163
|
model.reflections.map do |name, ref|
|
156
164
|
next if ref.has_one? || ref.belongs_to?
|
157
|
-
|
158
|
-
begin
|
159
|
-
ref.klass
|
160
|
-
rescue StandardError
|
161
|
-
next
|
162
|
-
end
|
165
|
+
next unless valid_reflection?(ref)
|
163
166
|
|
164
167
|
model_class = ref.klass
|
165
168
|
|
@@ -171,7 +174,7 @@ module Motor
|
|
171
174
|
slug: name.underscore,
|
172
175
|
model_name: model_class.name.underscore,
|
173
176
|
foreign_key: ref.foreign_key,
|
174
|
-
polymorphic: ref.
|
177
|
+
polymorphic: ref.options[:as].present?,
|
175
178
|
visible: true
|
176
179
|
}
|
177
180
|
end.compact
|
@@ -211,6 +214,17 @@ module Motor
|
|
211
214
|
end
|
212
215
|
end
|
213
216
|
|
217
|
+
def valid_reflection?(reflection)
|
218
|
+
reflection.klass
|
219
|
+
reflection.foreign_key
|
220
|
+
|
221
|
+
true
|
222
|
+
rescue StandardError => e
|
223
|
+
Rails.logger.error(e)
|
224
|
+
|
225
|
+
false
|
226
|
+
end
|
227
|
+
|
214
228
|
def eager_load_models!
|
215
229
|
MUTEX.synchronize do
|
216
230
|
if Rails::VERSION::MAJOR > 5 && defined?(Zeitwerk::Loader)
|
data/lib/motor/version.rb
CHANGED
Binary file
|
Binary file
|
data/ui/dist/manifest.json
CHANGED
@@ -5,9 +5,9 @@
|
|
5
5
|
"fonts/ionicons.ttf?v=3.0.0-alpha.3": "fonts/ionicons.ttf",
|
6
6
|
"fonts/ionicons.woff2?v=3.0.0-alpha.3": "fonts/ionicons.woff2",
|
7
7
|
"fonts/ionicons.woff?v=3.0.0-alpha.3": "fonts/ionicons.woff",
|
8
|
-
"main-
|
9
|
-
"main-
|
10
|
-
"main-
|
11
|
-
"main.css": "main-
|
12
|
-
"main.js": "main-
|
8
|
+
"main-e763d59007bb725ea622.css.gz": "main-e763d59007bb725ea622.css.gz",
|
9
|
+
"main-e763d59007bb725ea622.js.LICENSE.txt": "main-e763d59007bb725ea622.js.LICENSE.txt",
|
10
|
+
"main-e763d59007bb725ea622.js.gz": "main-e763d59007bb725ea622.js.gz",
|
11
|
+
"main.css": "main-e763d59007bb725ea622.css",
|
12
|
+
"main.js": "main-e763d59007bb725ea622.js"
|
13
13
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motor-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.44
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pete Matsyburka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord-filter
|
@@ -191,6 +191,7 @@ files:
|
|
191
191
|
- lib/motor-admin.rb
|
192
192
|
- lib/motor.rb
|
193
193
|
- lib/motor/active_record_utils.rb
|
194
|
+
- lib/motor/active_record_utils/active_storage_blob_patch.rb
|
194
195
|
- lib/motor/active_record_utils/active_storage_links_extension.rb
|
195
196
|
- lib/motor/active_record_utils/defined_scopes_extension.rb
|
196
197
|
- lib/motor/active_record_utils/fetch_methods.rb
|
@@ -211,6 +212,7 @@ files:
|
|
211
212
|
- lib/motor/assets.rb
|
212
213
|
- lib/motor/build_schema.rb
|
213
214
|
- lib/motor/build_schema/active_storage_attachment_schema.rb
|
215
|
+
- lib/motor/build_schema/adjust_devise_model_schema.rb
|
214
216
|
- lib/motor/build_schema/find_display_column.rb
|
215
217
|
- lib/motor/build_schema/load_from_rails.rb
|
216
218
|
- lib/motor/build_schema/merge_schema_configs.rb
|
@@ -242,8 +244,8 @@ files:
|
|
242
244
|
- lib/motor/tasks/motor.rake
|
243
245
|
- lib/motor/version.rb
|
244
246
|
- ui/dist/fonts/ionicons.woff2
|
245
|
-
- ui/dist/main-
|
246
|
-
- ui/dist/main-
|
247
|
+
- ui/dist/main-e763d59007bb725ea622.css.gz
|
248
|
+
- ui/dist/main-e763d59007bb725ea622.js.gz
|
247
249
|
- ui/dist/manifest.json
|
248
250
|
homepage:
|
249
251
|
licenses:
|
Binary file
|