brick 1.0.199 → 1.0.201
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/brick/extensions.rb +196 -648
- data/lib/brick/frameworks/rails/engine.rb +55 -61
- data/lib/brick/frameworks/rails/form_tags.rb +3 -3
- data/lib/brick/reflect_tables.rb +582 -0
- data/lib/brick/route_mapper.rb +20 -4
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +1 -0
- metadata +4 -3
@@ -296,13 +296,13 @@ function linkSchemas() {
|
|
296
296
|
end
|
297
297
|
|
298
298
|
module UrlHelpers
|
299
|
-
alias
|
299
|
+
alias _brick_resources_path resources_path
|
300
300
|
# Accommodate STI resources
|
301
|
-
def
|
302
|
-
resource ||= if (klass =
|
301
|
+
def resources_path(resource:, **kwargs)
|
302
|
+
resource ||= if (klass = resource.model_class)
|
303
303
|
Avo::App.resources.find { |r| r.model_class > klass }
|
304
304
|
end
|
305
|
-
|
305
|
+
_brick_resources_path(resource: resource, **kwargs)
|
306
306
|
end
|
307
307
|
end
|
308
308
|
|
@@ -329,31 +329,50 @@ function linkSchemas() {
|
|
329
329
|
# end
|
330
330
|
# end
|
331
331
|
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
332
|
+
if self.const_defined?('Resources') &&
|
333
|
+
self::Resources.const_defined?('ResourceManager') # Avo 3.x?
|
334
|
+
self::Resources::ResourceManager.class_exec do
|
335
|
+
class << self
|
336
|
+
alias _brick_fetch_resources fetch_resources
|
337
|
+
def fetch_resources
|
338
|
+
Avo._brick_avo_resources
|
339
|
+
_brick_fetch_resources
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
else # Avo 2.x
|
344
|
+
(self::App.respond_to?(:eager_load) ? App : DynamicRouter).class_exec do
|
345
|
+
class << self
|
346
|
+
alias _brick_eager_load eager_load
|
347
|
+
def eager_load(entity)
|
348
|
+
Avo._brick_avo_resources(true) if entity == :resources
|
349
|
+
_brick_eager_load(entity)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
def self._brick_avo_resources(is_2x = nil)
|
356
|
+
possible_schema, _x1, _x2 = ::Brick.get_possible_schemas
|
357
|
+
if possible_schema
|
358
|
+
orig_tenant = Apartment::Tenant.current
|
359
|
+
Apartment::Tenant.switch!(possible_schema)
|
360
|
+
end
|
361
|
+
existing = Avo::BaseResource.descendants.each_with_object({}) do |r, s|
|
362
|
+
s[r.name[0..-9]] = nil if r.name.end_with?('Resource')
|
363
|
+
end
|
364
|
+
::Brick.relations.each do |k, v|
|
365
|
+
unless k.is_a?(Symbol) || existing.key?(class_name = v[:class_name]) || Brick.config.exclude_tables.include?(k) ||
|
366
|
+
class_name.blank? || class_name.include?('::') ||
|
367
|
+
['ActiveAdminComment', 'MotorAlert', 'MotorAlertLock', 'MotorApiConfig', 'MotorAudit', 'MotorConfig', 'MotorDashboard', 'MotorForm', 'MotorNote', 'MotorNoteTag', 'MotorNoteTagTag', 'MotorNotification', 'MotorQuery', 'MotorReminder', 'MotorResource', 'MotorTag', 'MotorTaggableTag'].include?(class_name)
|
368
|
+
if is_2x # Avo 2.x?
|
369
|
+
"::#{class_name}Resource".constantize
|
370
|
+
else # Avo 3.x
|
371
|
+
::Brick.avo_3x_resource(Object.const_get(class_name), class_name) unless ::Avo::BaseResource.constants.include?(class_name.to_sym)
|
354
372
|
end
|
355
373
|
end
|
356
374
|
end
|
375
|
+
Apartment::Tenant.switch!(orig_tenant) if orig_tenant
|
357
376
|
end
|
358
377
|
|
359
378
|
# Add our schema link Javascript code when the TurboFrameWrapper is rendered so it ends up on all index / show / etc
|
@@ -409,18 +428,21 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
409
428
|
class Fields::IndexComponent
|
410
429
|
alias _brick_resource_view_path resource_view_path
|
411
430
|
def resource_view_path
|
412
|
-
|
431
|
+
mdl_class = @resource.respond_to?(:model_class) ? @resource.model_class : @resource.model&.class
|
432
|
+
return if mdl_class&.is_view?
|
413
433
|
|
414
434
|
_brick_resource_view_path
|
415
435
|
end
|
416
436
|
end
|
417
437
|
|
418
438
|
module Concerns::HasFields
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
439
|
+
class << self
|
440
|
+
if respond_to?(:field)
|
441
|
+
alias _brick_field field
|
442
|
+
def field(name, *args, **kwargs, &block)
|
443
|
+
kwargs.merge!(args.pop) if args.last.is_a?(Hash)
|
444
|
+
_brick_field(name, **kwargs, &block)
|
445
|
+
end
|
424
446
|
end
|
425
447
|
end
|
426
448
|
end
|
@@ -794,7 +816,7 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
794
816
|
if (rowcount = rel.last.fetch(:rowcount, nil))
|
795
817
|
rowcount = rowcount > 0 ? " (#{rowcount})" : nil
|
796
818
|
end
|
797
|
-
s << "<option value=\"#{::Brick._brick_index(rel.first, nil, '/')}\">#{rel.first}#{rowcount}</option>"
|
819
|
+
s << "<option value=\"#{::Brick._brick_index(rel.first, nil, '/', nil, true)}\">#{rel.first}#{rowcount}</option>"
|
798
820
|
end.html_safe
|
799
821
|
prefix = "#{::Brick.config.path_prefix}/" if ::Brick.config.path_prefix
|
800
822
|
table_options << "<option value=\"#{prefix}brick_status\">(Status)</option>".html_safe if ::Brick.config.add_status
|
@@ -1955,34 +1977,6 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1955
1977
|
end # TemplateRenderer
|
1956
1978
|
end
|
1957
1979
|
|
1958
|
-
if ::Brick.enable_routes?
|
1959
|
-
require 'brick/route_mapper'
|
1960
|
-
ActionDispatch::Routing::RouteSet.class_exec do
|
1961
|
-
# In order to defer auto-creation of any routes that already exist, calculate Brick routes only after having loaded all others
|
1962
|
-
prepend ::Brick::RouteSet
|
1963
|
-
end
|
1964
|
-
ActionDispatch::Routing::Mapper.class_exec do
|
1965
|
-
include ::Brick::RouteMapper
|
1966
|
-
end
|
1967
|
-
|
1968
|
-
# Do the root route before the Rails Welcome one would otherwise take precedence
|
1969
|
-
if (route = ::Brick.config.default_route_fallback).present?
|
1970
|
-
action = "#{route}#{'#index' unless route.index('#')}"
|
1971
|
-
if ::Brick.config.path_prefix
|
1972
|
-
::Rails.application.routes.append do
|
1973
|
-
send(:namespace, ::Brick.config.path_prefix) do
|
1974
|
-
send(:root, action)
|
1975
|
-
end
|
1976
|
-
end
|
1977
|
-
elsif ::Rails.application.routes.named_routes.send(:routes)[:root].nil?
|
1978
|
-
::Rails.application.routes.append do
|
1979
|
-
send(:root, action)
|
1980
|
-
end
|
1981
|
-
end
|
1982
|
-
::Brick.established_drf = "/#{::Brick.config.path_prefix}#{action[action.index('#')..-1]}"
|
1983
|
-
end
|
1984
|
-
end
|
1985
|
-
|
1986
1980
|
# Just in case it hadn't been done previously when we tried to load the brick initialiser,
|
1987
1981
|
# go make sure we've loaded additional references (virtual foreign keys and polymorphic associations).
|
1988
1982
|
# (This should only happen if for whatever reason the initializer file was not exactly config/initializers/brick.rb.)
|
@@ -222,7 +222,7 @@ module Brick::Rails::FormTags
|
|
222
222
|
out << link_to(ho_txt, send("#{hm_klass.base_class._brick_index(:singular)}_path".to_sym, ho_id))
|
223
223
|
end
|
224
224
|
elsif obj.respond_to?(ct_col = hms_col[1].to_sym) && (ct = obj.send(ct_col)&.to_i)&.positive?
|
225
|
-
predicates = hms_col[2].each_with_object({}) { |v, s| s["__#{v.first}"] = v.last.is_a?(String) ? v.last : obj.send(v.last) }
|
225
|
+
predicates = hms_col[2].each_with_object({}) { |v, s| s["__#{v.first}"] = v.last.is_a?(String) ? v.last : obj.send(v.last) if v.last }
|
226
226
|
predicates.each { |k, v| predicates[k] = klass.name if v == '[sti_type]' }
|
227
227
|
out << "#{link_to("#{ct || 'View'} #{hms_col.first}",
|
228
228
|
send("#{hm_klass._brick_index}_path".to_sym, predicates))}\n"
|
@@ -592,11 +592,11 @@ function onImagesLoaded(event) {
|
|
592
592
|
relation = ::Brick.relations.fetch(rel_name || klass.table_name, nil)
|
593
593
|
if (klass_or_obj&.is_a?(Class) && klass_or_obj < ActiveRecord::Base) ||
|
594
594
|
(klass_or_obj&.is_a?(ActiveRecord::Base) && klass_or_obj.new_record? && (klass_or_obj = klass_or_obj.class))
|
595
|
-
path = (proc = kwargs[:index_proc]) ? proc.call(klass_or_obj, relation) : "#{app_routes.path_for(controller: klass_or_obj.base_class._brick_index(nil, '/', relation), action: :index)}#{filter}"
|
595
|
+
path = (proc = kwargs[:index_proc]) ? proc.call(klass_or_obj, relation) : "#{app_routes.path_for(controller: klass_or_obj.base_class._brick_index(nil, '/', relation, true), action: :index)}#{filter}"
|
596
596
|
lt_args = [text || "Index for #{klass_or_obj.name.pluralize}", path]
|
597
597
|
else
|
598
598
|
# If there are multiple incoming parameters then last one is probably the actual ID, and first few might be some nested tree of stuff leading up to it
|
599
|
-
path = (proc = kwargs[:show_proc]) ? proc.call(klass_or_obj, relation) : "#{app_routes.path_for(controller: klass_or_obj.class.base_class._brick_index(nil, '/', relation), action: :show, id: klass_or_obj)}#{filter}"
|
599
|
+
path = (proc = kwargs[:show_proc]) ? proc.call(klass_or_obj, relation) : "#{app_routes.path_for(controller: klass_or_obj.class.base_class._brick_index(nil, '/', relation, true), action: :show, id: klass_or_obj)}#{filter}"
|
600
600
|
lt_args = [text || "Show this #{klass_or_obj.class.name}", path]
|
601
601
|
end
|
602
602
|
kwargs.delete(:visited)
|