brick 1.0.199 → 1.0.201

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.
@@ -296,13 +296,13 @@ function linkSchemas() {
296
296
  end
297
297
 
298
298
  module UrlHelpers
299
- alias _brick_resource_path resource_path
299
+ alias _brick_resources_path resources_path
300
300
  # Accommodate STI resources
301
- def resource_path(model:, resource:, **args)
302
- resource ||= if (klass = model&.class)
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
- _brick_resource_path(model: model, resource: resource, **args)
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
- (self::App.respond_to?(:eager_load) ? App : DynamicRouter).class_exec do
333
- class << self
334
- alias _brick_eager_load eager_load
335
- def eager_load(entity)
336
- _brick_eager_load(entity)
337
- if entity == :resources
338
- possible_schema, _x1, _x2 = ::Brick.get_possible_schemas
339
- if possible_schema
340
- orig_tenant = Apartment::Tenant.current
341
- Apartment::Tenant.switch!(possible_schema)
342
- end
343
- existing = Avo::BaseResource.descendants.each_with_object({}) do |r, s|
344
- s[r.name[0..-9]] = nil if r.name.end_with?('Resource')
345
- end
346
- ::Brick.relations.each do |k, v|
347
- unless k.is_a?(Symbol) || existing.key?(class_name = v[:class_name]) || Brick.config.exclude_tables.include?(k) ||
348
- class_name.blank? || class_name.include?('::') ||
349
- ['ActiveAdminComment', 'MotorAlert', 'MotorAlertLock', 'MotorApiConfig', 'MotorAudit', 'MotorConfig', 'MotorDashboard', 'MotorForm', 'MotorNote', 'MotorNoteTag', 'MotorNoteTagTag', 'MotorNotification', 'MotorQuery', 'MotorReminder', 'MotorResource', 'MotorTag', 'MotorTaggableTag'].include?(class_name)
350
- Object.const_get("#{class_name}Resource")
351
- end
352
- end
353
- Apartment::Tenant.switch!(orig_tenant) if orig_tenant
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
- return if @resource.model&.class&.is_view?
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
- class_methods do
420
- alias _brick_field field
421
- def field(name, *args, **kwargs, &block)
422
- kwargs.merge!(args.pop) if args.last.is_a?(Hash)
423
- _brick_field(name, **kwargs, &block)
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)