motor-admin 0.1.43 → 0.1.44
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/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
|