brick 1.0.199 → 1.0.201

Sign up to get free protection for your applications and to get access to all the features.
@@ -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)