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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d06115fe373a464d0e64a5f15b6c895d549e7cef2068e9a9e9d9712cc003046d
4
- data.tar.gz: d01b6707a80c0d30b8c43c40d9c86a7ee98475cf02ee6b8a296aac3ae25a9d27
3
+ metadata.gz: 74c91b2c5dbc0b48fa75a4fa9f5ec2eb8a3848b2e65cf819b9ddc3317e379a19
4
+ data.tar.gz: bee5733d821cde96004674d36c9be0467e32044d921a4b52e863b4be4e3de55b
5
5
  SHA512:
6
- metadata.gz: 4a9b94292f85849ececb737e5d8a962a7b18989d218c72db520eb6e771b9b703083be6c54bf1894f31e1d894af3fca02065653e97497966c3b1dadbfafb098ac
7
- data.tar.gz: c18e73dfd82fa82bf182cc445c22565a73a29006309ccd0ecb1ab92d1f610fe797ee9d4ff6cb84382e039d146ca99d16648a84717f169168e3dc834571c67b7d
6
+ metadata.gz: 9bb22f83f9c270696f2d32cc384b98d90a5dab99f7f377258682dbc3622bd574ea0c6bf43de5cd955bb551dd56d6d43b4e618a53803a7d91417a7ec88ae9571f
7
+ data.tar.gz: 6e1f295abe63ca50e7176789523747810384307c03bcf5c4c719cc41a85296573fb0f6c3e193f06e625ed5801c204a519675539719d966357398293fe3a10977
@@ -26,7 +26,7 @@ module Motor
26
26
  end
27
27
 
28
28
  def file_params
29
- params.require(:data).require(:file).permit(:io, :filename).to_h
29
+ params.require(:data).require(:file).permit(:io, :filename).to_h.symbolize_keys
30
30
  end
31
31
 
32
32
  def attachment_params
data/config/routes.rb CHANGED
@@ -47,5 +47,3 @@ Motor::Admin.routes.draw do
47
47
  end
48
48
  end
49
49
  end
50
-
51
- ActiveSupport::Notifications.instrument('motor.routes.loaded')
@@ -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
- ActiveSupport::Notifications.subscribe('motor.routes.loaded') do
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
@@ -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
- build_model_schema(model)
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
- begin
112
- ref.klass
113
- rescue StandardError
114
- next
115
- end
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
- next if ref.klass.name == 'ActiveStorage::Blob'
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? || is_attachment
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.polymorphic? || model_class.name == 'ActiveStorage::Attachment',
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Motor
4
- VERSION = '0.1.43'
4
+ VERSION = '0.1.44'
5
5
  end
@@ -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-c3893a249308242d20f5.css.gz": "main-c3893a249308242d20f5.css.gz",
9
- "main-c3893a249308242d20f5.js.LICENSE.txt": "main-c3893a249308242d20f5.js.LICENSE.txt",
10
- "main-c3893a249308242d20f5.js.gz": "main-c3893a249308242d20f5.js.gz",
11
- "main.css": "main-c3893a249308242d20f5.css",
12
- "main.js": "main-c3893a249308242d20f5.js"
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.43
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-18 00:00:00.000000000 Z
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-c3893a249308242d20f5.css.gz
246
- - ui/dist/main-c3893a249308242d20f5.js.gz
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: