motor-admin 0.2.26 → 0.2.30

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04b8a3962312d6df6ee3d75c0ad988f5b3e2011fcc4eacaedc2263739c4b8478
4
- data.tar.gz: c034290e1752bff06ea29a2ca2be696576dd46bcbb6f97a22917173e9911c5c0
3
+ metadata.gz: b96359678dfc2ccb50d6cebf20b99ed6efaeec885d30d383df90d2e4aa160bba
4
+ data.tar.gz: e0e73cb8c5d252d4398711faa4004ff33ce3d79a1508444ecebd63f440eb0c9f
5
5
  SHA512:
6
- metadata.gz: 56e2836e3a8723e313a0af989ccb5aa7d8577f6c5982cdc05825ed1ec4061db90a35776e329c4bdcdf4c736405ffeb4d2268131b857bbbd1cab19bdcff34a88f
7
- data.tar.gz: a05ce55494fc28825dba93861888aca1c563df270670af2e048828f35db51a0296a263d2211f772d12e5905da7da60458756ef554a1cd1fe83084f938bc6d9c7
6
+ metadata.gz: f2ad88a6c453842f627de489ce48f6ac8b68336e1cd19f149b76ec2e3fc0698666cc79273f6e43722b73bc3550f1e7594278234530dc474c031e5aebebee8ec6
7
+ data.tar.gz: 7ca8d4e20c4302f132c351514f94acfa593d97b6673106542f993d78dfc4e80c14d5c7e9e51a31e656319b521ecc19d5201e2692a9e5d701369532fc7d8fc152
@@ -9,8 +9,8 @@ module Motor
9
9
  load_and_authorize_resource :attachment, class: 'ActiveStorage::Attachment', parent: false
10
10
 
11
11
  def create
12
- if attachable?(@attachment.record)
13
- @attachment.record.public_send(@attachment.name).attach(file_params)
12
+ if attachable?(record)
13
+ record.public_send(@attachment.name).attach(file_params)
14
14
 
15
15
  head :ok
16
16
  else
@@ -20,6 +20,15 @@ module Motor
20
20
 
21
21
  private
22
22
 
23
+ def record
24
+ record_pk = @attachment.record.class.primary_key
25
+
26
+ Motor::Resources::FetchConfiguredModel.call(
27
+ @attachment.record.class,
28
+ cache_key: Motor::Resource.maximum(:updated_at)
29
+ ).find_by(record_pk => @attachment.record[record_pk])
30
+ end
31
+
23
32
  def attachable?(record)
24
33
  record.respond_to?("#{@attachment.name}_attachment=") ||
25
34
  record.respond_to?("#{@attachment.name}_attachments=")
@@ -23,7 +23,8 @@ module Motor
23
23
  'citext' => 'string',
24
24
  'jsonb' => 'json',
25
25
  'bool' => 'boolean',
26
- 'timestamp' => 'datetime'
26
+ 'timestamp' => 'datetime',
27
+ 'timestamptz' => 'datetime'
27
28
  }.freeze
28
29
 
29
30
  module_function
@@ -115,7 +115,7 @@ module Motor
115
115
  scopes: [],
116
116
  actions: Motor::BuildSchema::Defaults.actions.reject { |e| e[:name] == 'edit' },
117
117
  tabs: Motor::BuildSchema::Defaults.tabs,
118
- visible: true
118
+ visible: false
119
119
  }.with_indifferent_access
120
120
  end
121
121
  # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
@@ -116,13 +116,20 @@ module Motor
116
116
  end
117
117
 
118
118
  def build_table_column(column, model, default_attrs)
119
+ access_type =
120
+ if model.primary_key == column.name
121
+ ColumnAccessTypes::READ_ONLY
122
+ else
123
+ COLUMN_NAME_ACCESS_TYPES.fetch(column.name, ColumnAccessTypes::READ_WRITE)
124
+ end
125
+
119
126
  {
120
127
  name: column.name,
121
128
  display_name: Utils.humanize_column_name(model.human_attribute_name(column.name)),
122
129
  column_type: fetch_column_type(column, model),
123
130
  column_source: ColumnSources::TABLE,
124
131
  is_array: column.array?,
125
- access_type: COLUMN_NAME_ACCESS_TYPES.fetch(column.name, ColumnAccessTypes::READ_WRITE),
132
+ access_type: access_type,
126
133
  default_value: default_attrs[column.name],
127
134
  validators: fetch_validators(model, column.name),
128
135
  reference: nil,
@@ -5,11 +5,14 @@ module Motor
5
5
  module FetchConfiguredModel
6
6
  CACHE_HASH = HashWithIndifferentAccess.new
7
7
 
8
+ HAS_AND_BELONGS_TO_MANY_JOIN_MODEL_PREFIX = 'HABTM_'
9
+
8
10
  module_function
9
11
 
10
12
  def call(model, cache_key:)
11
13
  configs = Motor::Configs::LoadFromCache.load_resources(cache_key: cache_key)
12
14
 
15
+ return model if model.name == 'ActiveStorage::Attachment'
13
16
  return model if configs.blank? || sti_model?(model)
14
17
 
15
18
  maybe_fetch_from_cache(
@@ -126,17 +129,16 @@ module Motor
126
129
 
127
130
  options = options.merge(config[:options] || {})
128
131
 
129
- klass.has_one(config[:name].to_sym, **options.symbolize_keys)
132
+ if config[:model_name] == 'active_storage/attachment'
133
+ klass.has_one_attached config[:name].delete_suffix('_attachment').to_sym
134
+ else
135
+ klass.has_one(config[:name].to_sym, **options.symbolize_keys)
136
+ end
130
137
  end
131
138
 
132
139
  def configure_reflection_classes(klass, cache_key)
133
- klass.reflections.each do |key, ref|
134
- begin
135
- next unless ref.klass
136
- next if ref.klass.anonymous?
137
- rescue StandardError
138
- next
139
- end
140
+ klass._reflections.each do |key, ref|
141
+ next unless configure_reflection_class?(ref)
140
142
 
141
143
  ref_dup = ref.dup
142
144
 
@@ -162,11 +164,17 @@ module Motor
162
164
 
163
165
  filters = options.delete(:filters)
164
166
 
165
- if filters.present?
166
- klass.has_many(association[:name].to_sym, -> { filter(filters).tap(&:arel) }, **options.symbolize_keys)
167
- else
168
- klass.has_many(association[:name].to_sym, **options.symbolize_keys)
169
- end
167
+ define_association(klass, association[:name], options, filters)
168
+ end
169
+ end
170
+
171
+ def define_association(klass, name, options, filters)
172
+ if options[:class_name] == 'ActiveStorage::Attachment'
173
+ klass.has_many_attached name.delete_suffix('_attachments').to_sym
174
+ elsif filters.present?
175
+ klass.has_many(name.to_sym, -> { filter(filters).tap(&:arel) }, **options.symbolize_keys)
176
+ else
177
+ klass.has_many(name.to_sym, **options.symbolize_keys)
170
178
  end
171
179
  end
172
180
 
@@ -203,6 +211,19 @@ module Motor
203
211
  end
204
212
  end
205
213
 
214
+ def configure_reflection_class?(ref)
215
+ begin
216
+ return false unless ref.klass
217
+ rescue StandardError
218
+ return false
219
+ end
220
+
221
+ return false if ref.klass.anonymous?
222
+ return false if ref.klass.name.demodulize.starts_with?(HAS_AND_BELONGS_TO_MANY_JOIN_MODEL_PREFIX)
223
+
224
+ true
225
+ end
226
+
206
227
  def sti_model?(model)
207
228
  !model.superclass.abstract_class && model.columns_hash[model.inheritance_column.to_s]
208
229
  end
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.2.26'
4
+ VERSION = '0.2.30'
5
5
  end
@@ -2601,9 +2601,9 @@
2601
2601
  "icons/zoom-out.svg.gz": "icons/zoom-out.svg.gz",
2602
2602
  "icons/zoom-question.svg": "icons/zoom-question.svg",
2603
2603
  "icons/zoom-question.svg.gz": "icons/zoom-question.svg.gz",
2604
- "main-9f6b19ff999e209e9d33.css.gz": "main-9f6b19ff999e209e9d33.css.gz",
2605
- "main-9f6b19ff999e209e9d33.js.LICENSE.txt": "main-9f6b19ff999e209e9d33.js.LICENSE.txt",
2606
- "main-9f6b19ff999e209e9d33.js.gz": "main-9f6b19ff999e209e9d33.js.gz",
2607
- "main.css": "main-9f6b19ff999e209e9d33.css",
2608
- "main.js": "main-9f6b19ff999e209e9d33.js"
2604
+ "main-67a3a033614f741d7e27.css.gz": "main-67a3a033614f741d7e27.css.gz",
2605
+ "main-67a3a033614f741d7e27.js.LICENSE.txt": "main-67a3a033614f741d7e27.js.LICENSE.txt",
2606
+ "main-67a3a033614f741d7e27.js.gz": "main-67a3a033614f741d7e27.js.gz",
2607
+ "main.css": "main-67a3a033614f741d7e27.css",
2608
+ "main.js": "main-67a3a033614f741d7e27.js"
2609
2609
  }
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.2.26
4
+ version: 0.2.30
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-11-16 00:00:00.000000000 Z
11
+ date: 2021-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord-filter
@@ -1525,8 +1525,8 @@ files:
1525
1525
  - ui/dist/icons/zoom-money.svg.gz
1526
1526
  - ui/dist/icons/zoom-out.svg.gz
1527
1527
  - ui/dist/icons/zoom-question.svg.gz
1528
- - ui/dist/main-9f6b19ff999e209e9d33.css.gz
1529
- - ui/dist/main-9f6b19ff999e209e9d33.js.gz
1528
+ - ui/dist/main-67a3a033614f741d7e27.css.gz
1529
+ - ui/dist/main-67a3a033614f741d7e27.js.gz
1530
1530
  - ui/dist/manifest.json
1531
1531
  homepage:
1532
1532
  licenses: