brick 1.0.173 → 1.0.174

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: 0a26fe42450ca6c08c82b70f7d60c51a256b3171e626f961806564336413c645
4
- data.tar.gz: d02880197677be70fef8b9f4897210202a31610660245953cd5f6acf03cfee49
3
+ metadata.gz: 0c4dedcd4841e168876c88839c56a60b23a8d3d8799a350dc9d2445cde293b5e
4
+ data.tar.gz: 46063c6afaf4d2025c1f1b3e74481391a737ab00a710b0e1ef0e51aac3994871
5
5
  SHA512:
6
- metadata.gz: 51bd9281080d4d77b61b309c9dfe1fc160ac7377591ec06cbe1127edadcd2a608ed09f96787979bdcb02c30a331232e413f0e5b9e2993ddb5000f026f3ce4249
7
- data.tar.gz: 4a28c71ca04c1d2036e07415c363ff7b6d72fa843c0233ec01f9ec1ab074f01cb1e48919c7cfe91ad9c9a1592c8c473ab09fa4b4cbf49a8e50fbce36e5e6417c
6
+ metadata.gz: 61b711584141e7625b996cf0406a4b50bc6fadb45379d6d321e94fed7b2b219a90d3007ac52514ed29316caacd5150d57bebff3ac7a92e059ed69b01c8f992c5
7
+ data.tar.gz: 88c00b72167ec0dddfa525937dcd9e6451fec52f85a64d91de46ad53d073a8d12c3f38e44e093b01f30a22fc56ef363a60d70f416dbca5329b5350965d5666d4
data/lib/brick/config.rb CHANGED
@@ -21,10 +21,11 @@ module Brick
21
21
  end
22
22
 
23
23
  def mode
24
+ rails_env = Object.const_defined?('Rails') && ::Rails.env
24
25
  @mutex.synchronize do
25
26
  case @brick_mode
26
27
  when nil, :development
27
- (::Rails.env == 'development' || ENV.key?('BRICK')) ? :on : nil
28
+ (rails_env == 'development' || ENV.key?('BRICK')) ? :on : nil
28
29
  when :diag_env
29
30
  ENV.key?('BRICK') ? :on : nil
30
31
  else
@@ -1288,6 +1288,7 @@ end
1288
1288
  end
1289
1289
  # puts "#{self.name} - #{args.first}"
1290
1290
  # Unless it's a Brick prefix looking for a TNP that should create a module ...
1291
+ relations = ::Brick.relations
1291
1292
  unless (is_tnp_module = (is_brick_prefix && !is_controller && ::Brick.config.table_name_prefixes.values.include?(requested)))
1292
1293
  # ... first look around for an existing module or class.
1293
1294
  desired_classname = (self == Object || !name) ? requested : "#{name}::#{requested}"
@@ -1309,12 +1310,16 @@ end
1309
1310
  (possible.instance_of?(Class) && possible == self)) && # Are we simply searching for ourselves?
1310
1311
  # Skip when what we found as `possible` is not related to the base class of an STI model
1311
1312
  (!sti_base || possible.is_a?(sti_base))
1313
+ # if possible.is_a?(ActiveRecord::Base) && !possible.abstract_class? && (pk = possible.primary_key) &&
1314
+ # !(relation = relations.fetch(possible.table_name, nil))&.fetch(:pks, nil)
1315
+ # binding.pry
1316
+ # x = 5
1317
+ # end
1312
1318
  return possible
1313
1319
  end
1314
1320
  end
1315
1321
  end
1316
1322
  class_name = ::Brick.namify(requested)
1317
- relations = ::Brick.relations
1318
1323
  # CONTROLLER
1319
1324
  result = if ::Brick.enable_controllers? &&
1320
1325
  is_controller && (plural_class_name = class_name[0..-11]).length.positive?
@@ -1908,6 +1913,8 @@ class Object
1908
1913
  end
1909
1914
  self.define_method :crosstab do
1910
1915
  @relations = ::Brick.relations.each_with_object({}) do |r, s|
1916
+ next if r.first.is_a?(Symbol)
1917
+
1911
1918
  cols = r.last[:cols].each_with_object([]) do |c, s2|
1912
1919
  s2 << [c.first] + c.last
1913
1920
  end
@@ -2030,8 +2037,10 @@ class Object
2030
2037
  }
2031
2038
  unless ::Brick.config.enable_api == false
2032
2039
  json['paths'] = relations.each_with_object({}) do |relation, s|
2033
- next if (api_vers = relation.last.fetch(:api, nil)) &&
2034
- !(api_ver_paths = api_vers[current_api_ver] || api_vers[nil])
2040
+ next if relation.first.is_a?(Symbol) || (
2041
+ (api_vers = relation.last.fetch(:api, nil)) &&
2042
+ !(api_ver_paths = api_vers[current_api_ver] || api_vers[nil])
2043
+ )
2035
2044
 
2036
2045
  schema_tag = {}
2037
2046
  if (schema_name = relation.last&.fetch(:schema, nil))
@@ -2595,14 +2604,14 @@ end.class_exec do
2595
2604
  # return if ActiveRecord::Base.connection.current_database == 'postgres'
2596
2605
 
2597
2606
  orig_schema = nil
2598
- if (relations = ::Brick.relations).empty?
2607
+ if (relations = ::Brick.relations).keys == [:db_name]
2599
2608
  ::Brick.remove_instance_variable(:@_additional_references_loaded) if ::Brick.instance_variable_defined?(:@_additional_references_loaded)
2600
2609
  # Very first thing, load inflections since we'll be using .pluralize and .singularize on table and model names
2601
- if File.exist?(inflections = ::Rails.root.join('config/initializers/inflections.rb'))
2610
+ if File.exist?(inflections = ::Rails.root&.join('config/initializers/inflections.rb') || '')
2602
2611
  load inflections
2603
2612
  end
2604
2613
  # Now the Brick initializer since there may be important schema things configured
2605
- if !::Brick.initializer_loaded && File.exist?(brick_initializer = ::Rails.root.join('config/initializers/brick.rb'))
2614
+ if !::Brick.initializer_loaded && File.exist?(brick_initializer = ::Rails.root&.join('config/initializers/brick.rb') || '')
2606
2615
  ::Brick.initializer_loaded = load brick_initializer
2607
2616
 
2608
2617
  # After loading the initializer, add compatibility for ActiveStorage and ActionText if those haven't already been
@@ -2749,7 +2758,14 @@ end.class_exec do
2749
2758
  relation[:ukeys][r['key'] || "#{relation_name}.#{col_name}"] ||= []
2750
2759
  # key = (relation[:ukeys] = Hash.new { |h, k| h[k] = [] }) if key.is_a?(Array)
2751
2760
  # key[r['key']]
2761
+ else
2762
+ if r['data_type'] == 'uuid'
2763
+ # && r['column_name'] == ::Brick.ar_base.primary_key
2764
+ # binding.pry
2765
+ relation[:pkey][r['key'] || relation_name] ||= []
2766
+ end
2752
2767
  end
2768
+ # binding.pry if key && r['data_type'] == 'uuid'
2753
2769
  key << col_name if key
2754
2770
  cols = relation[:cols] # relation.fetch(:cols) { relation[:cols] = [] }
2755
2771
  cols[col_name] = [r['data_type'], r['max_length'], measures&.include?(col_name), r['is_nullable'] == 'NO']
@@ -2916,6 +2932,8 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
2916
2932
  end
2917
2933
 
2918
2934
  relations.each do |k, v|
2935
+ next if k.is_a?(Symbol)
2936
+
2919
2937
  rel_name = k.split('.').map { |rel_part| ::Brick.namify(rel_part, :underscore) }
2920
2938
  schema_names = rel_name[0..-2]
2921
2939
  schema_names.shift if ::Brick.apartment_multitenant && schema_names.first == ::Brick.apartment_default_tenant
@@ -3152,6 +3170,10 @@ module Brick
3152
3170
  assoc_bt[:inverse] = assoc_hm
3153
3171
  end
3154
3172
 
3173
+ def ar_base
3174
+ @ar_base ||= Object.const_defined?(:ApplicationRecord) ? ApplicationRecord : Class.new(ActiveRecord::Base)
3175
+ end
3176
+
3155
3177
  # Identify built out routes, migrations, models,
3156
3178
  # (and also soon controllers and views!)
3157
3179
  # for each resource
@@ -3178,6 +3200,8 @@ module Brick
3178
3200
  abstract_activerecord_bases = ::Brick.eager_load_classes(true)
3179
3201
  rails_root = ::Rails.root.to_s
3180
3202
  models = ::Brick.relations.each_with_object({}) do |rel, s|
3203
+ next if rel.first.is_a?(Symbol)
3204
+
3181
3205
  begin
3182
3206
  if (model = rel.last[:class_name]&.constantize) &&
3183
3207
  (inh = ActiveRecord::Base._brick_inheriteds[model]&.join(':'))
@@ -3230,7 +3254,8 @@ module Brick
3230
3254
  is_default_schema = multi_schema&.==(::Brick.apartment_default_tenant)
3231
3255
  relations.each_with_object([]) do |v, s|
3232
3256
  frn_tbl = v.first
3233
- next if (relation = v.last).key?(:isView) || config.exclude_tables.include?(frn_tbl) ||
3257
+ next if frn_tbl.is_a?(Symbol) || # Skip internal metadata entries
3258
+ (relation = v.last).key?(:isView) || config.exclude_tables.include?(frn_tbl) ||
3234
3259
  !(for_pk = (relation[:pkey].values.first&.first))
3235
3260
 
3236
3261
  is_default_frn_schema = !is_default_schema && multi_schema &&
@@ -204,7 +204,7 @@ function linkSchemas() {
204
204
  <polygon style=\"fill:#894747;\" points=\"58,31.559 19,52 19,35 58,15.831\"/>
205
205
  </g>
206
206
  </svg>
207
- ".html_safe
207
+ "
208
208
 
209
209
  # paths['app/models'] << 'lib/brick/frameworks/active_record/models'
210
210
  config.brick = ActiveSupport::OrderedOptions.new
@@ -344,7 +344,7 @@ function linkSchemas() {
344
344
  s[r.name[0..-9]] = nil if r.name.end_with?('Resource')
345
345
  end
346
346
  ::Brick.relations.each do |k, v|
347
- unless existing.key?(class_name = v[:class_name]) || Brick.config.exclude_tables.include?(k) ||
347
+ unless k.is_a?(Symbol) || existing.key?(class_name = v[:class_name]) || Brick.config.exclude_tables.include?(k) ||
348
348
  class_name.blank? || class_name.include?('::')
349
349
  Object.const_get("#{class_name}Resource")
350
350
  end
@@ -399,7 +399,7 @@ window.addEventListener(\"popstate\", linkSchemas);
399
399
  end
400
400
  def to_s
401
401
  @_name.to_s.html_safe + @vc.instance_variable_get(:@__vc_helpers)&.link_to_brick(nil,
402
- BRICK_SVG,
402
+ BRICK_SVG.html_safe,
403
403
  { title: "#{@_name} in Brick" }
404
404
  )
405
405
  end
@@ -464,7 +464,7 @@ window.addEventListener(\"popstate\", linkSchemas);
464
464
  alias _brick_routes routes
465
465
  def routes(*args)
466
466
  ::Brick.relations.each do |k, v|
467
- next if k == 'active_admin_comments'
467
+ next if k.is_a?(Symbol) || k == 'active_admin_comments'
468
468
 
469
469
  begin
470
470
  if (class_name = Object.const_get(v.fetch(:class_name, nil)))
@@ -486,7 +486,7 @@ window.addEventListener(\"popstate\", linkSchemas);
486
486
  rescue
487
487
  end
488
488
  h2((@title + link_to_brick(nil,
489
- BRICK_SVG, # This would do well to be sized a bit smaller
489
+ BRICK_SVG.html_safe, # This would do well to be sized a bit smaller
490
490
  { title: "#{@_name} in Brick" }
491
491
  )).html_safe)
492
492
  else
@@ -518,7 +518,7 @@ window.addEventListener(\"popstate\", linkSchemas);
518
518
  def fetch_models
519
519
  # Auto-create Brick models
520
520
  ::Brick.relations.each do |k, v|
521
- next if k == 'active_admin_comments'
521
+ next if k.is_a?(Symbol) || k == 'active_admin_comments'
522
522
 
523
523
  begin
524
524
  v[:class_name].constantize
@@ -554,7 +554,7 @@ window.addEventListener(\"popstate\", linkSchemas);
554
554
  (::Brick.config.json_columns['motor_audits'] ||= []) << 'audited_changes' if mar_tables.include?('motor_audits')
555
555
  (::Brick.config.json_columns['motor_configs'] ||= []) << 'value' if mar_tables.include?('motor_configs')
556
556
  ::Brick.relations.each do |k, v|
557
- next if mar_tables.include?(k) || k == 'motor_audits'
557
+ next if k.is_a?(Symbol) || mar_tables.include?(k) || k == 'motor_audits'
558
558
 
559
559
  v[:class_name].constantize
560
560
  end
@@ -607,7 +607,7 @@ window.addEventListener(\"popstate\", linkSchemas);
607
607
  alias :_brick_lookup_context :lookup_context
608
608
  def lookup_context(*args)
609
609
  ret = _brick_lookup_context(*args)
610
- @_lookup_context.instance_variable_set(:@_brick_req_params, params)
610
+ @_lookup_context.instance_variable_set(:@_brick_req_params, params) if request
611
611
  ret
612
612
  end
613
613
  end
@@ -773,7 +773,7 @@ window.addEventListener(\"popstate\", linkSchemas);
773
773
  # environment or whatever, then get either the controllers or routes list instead
774
774
  prefix = "#{::Brick.config.path_prefix}/" if ::Brick.config.path_prefix
775
775
  table_options = ::Brick.relations.each_with_object({}) do |rel, s|
776
- next if ::Brick.config.exclude_tables.include?(rel.first)
776
+ next if rel.first.is_a?(Symbol) || ::Brick.config.exclude_tables.include?(rel.first)
777
777
 
778
778
  tbl_parts = rel.first.split('.')
779
779
  if (aps = rel.last.fetch(:auto_prefixed_schema, nil))
@@ -1531,7 +1531,7 @@ end %>#{"
1531
1531
  <table id=\"resourceName\"><td><h1><%= page_title %></h1></td>
1532
1532
  <% if Object.const_defined?('Avo') && ::Avo.respond_to?(:railtie_namespace) %>
1533
1533
  <td><%= link_to_brick(
1534
- ::Brick::Rails::AVO_SVG,
1534
+ ::Brick::Rails::AVO_SVG.html_safe,
1535
1535
  { show_proc: Proc.new do |obj, relation|
1536
1536
  path_helper = \"resources_#\{relation.fetch(:auto_prefixed_schema, nil)}#\{obj.class.base_class.model_name.singular_route_key}_path\".to_sym
1537
1537
  ::Avo.railtie_routes_url_helpers.send(path_helper, obj) if ::Avo.railtie_routes_url_helpers.respond_to?(path_helper)
@@ -1543,7 +1543,7 @@ end %>#{"
1543
1543
  if Object.const_defined?('ActiveAdmin')
1544
1544
  ActiveAdmin.application.namespaces.names.each do |ns| %>
1545
1545
  <td><%= link_to_brick(
1546
- ::Brick::Rails::AA_PNG,
1546
+ ::Brick::Rails::AA_PNG.html_safe,
1547
1547
  { show_proc: Proc.new do |aa_model, relation|
1548
1548
  path_helper = \"#\{ns}_#\{relation.fetch(:auto_prefixed_schema, nil)}#\{rk = aa_model.model_name.singular_route_key}_path\".to_sym
1549
1549
  send(path_helper, obj) if respond_to?(path_helper)
@@ -48,7 +48,7 @@ module Brick::Rails::FormTags
48
48
  if show_avo_button != false && Object.const_defined?('Avo') && ::Avo.respond_to?(:railtie_namespace) && klass.name.exclude?('::')
49
49
  out << "
50
50
  <td>#{link_to_brick(
51
- ::Brick::Rails::AVO_SVG,
51
+ ::Brick::Rails::AVO_SVG.html_safe,
52
52
  { index_proc: Proc.new do |_avo_model, relation|
53
53
  path_helper = "resources_#{relation.fetch(:auto_prefixed_schema, nil)}#{klass.model_name.route_key}_path".to_sym
54
54
  ::Avo.railtie_routes_url_helpers.send(path_helper) if ::Avo.railtie_routes_url_helpers.respond_to?(path_helper)
@@ -62,7 +62,7 @@ module Brick::Rails::FormTags
62
62
  ActiveAdmin.application.namespaces.names.each do |ns|
63
63
  out << "
64
64
  <td>#{link_to_brick(
65
- ::Brick::Rails::AA_PNG,
65
+ ::Brick::Rails::AA_PNG.html_safe,
66
66
  { index_proc: Proc.new do |aa_model, relation|
67
67
  path_helper = "#{ns}_#{relation.fetch(:auto_prefixed_schema, nil)}#{rk = aa_model.model_name.route_key}_path".to_sym
68
68
  send(path_helper) if respond_to?(path_helper)
@@ -11,8 +11,8 @@ module ::Brick::Rails
11
11
  <path d=\"M82.812 76.8753C82.6905 76.694 82.3715 76.2207 82.2449 76.0444C82.2044 75.9739 82.2044 75.8782 82.1588 75.8127C82.1132 75.7473 82.1335 75.7724 82.1183 75.7573C79.0714 71.3971 75.1056 67.7497 70.4969 65.0692C65.8882 62.3886 60.7474 60.7393 55.4325 60.2361C54.3236 60.1354 53.1943 60.08 52.055 60.08C45.2173 60.1051 38.5214 62.022 32.7166 65.6161C26.9118 69.2102 22.2271 74.3397 19.1864 80.4308L19.151 80.5013C18.7358 81.3323 18.3458 82.1784 17.9914 83.0194L16.9786 85.2655C16.9077 85.3662 16.8419 85.472 16.771 85.5828C16.6647 85.7389 16.5584 85.9 16.4621 86.0612C15.3778 87.6439 13.8123 88.8397 11.995 89.4732C10.1776 90.1068 8.20406 90.1448 6.36344 89.5817C4.52281 89.0186 2.9119 87.884 1.76676 86.3442C0.621625 84.8044 0.00246102 82.9403 0 81.0251C0.00604053 80.0402 0.177178 79.0632 0.506372 78.1344L1.22036 76.5681C1.25084 76.5034 1.28639 76.4411 1.32669 76.3818C1.40265 76.2559 1.47861 76.135 1.56469 76.0192C1.58531 75.9789 1.60901 75.9401 1.63558 75.9034C7.06401 67.6054 14.947 61.1866 24.1977 57.5317C33.4485 53.8768 43.6114 53.166 53.2855 55.4971L48.9155 45.9286L41.9276 30.6188L33.8256 12.8263L33.6433 12.4285C32.7439 10.3058 32.6986 7.92067 33.5167 5.76573L34.0231 4.69304C34.8148 3.24136 35.9941 2.03525 37.431 1.20762C38.868 0.379997 40.5068 -0.0370045 42.1668 0.0025773C43.8268 0.0421591 45.4436 0.536787 46.839 1.43195C48.2345 2.32711 49.3543 3.58804 50.0751 5.07578L50.2523 5.47363L51.8474 8.96365L74.0974 57.708L82.812 76.8753Z\" fill=\"currentColor\" fill-opacity=\"0.22\"></path>
12
12
  <path opacity=\"0.25\" d=\"M41.9129 30.649L35.3301 45.0422C35.2023 45.3204 35.0074 45.563 34.7627 45.7484C34.518 45.9337 34.2311 46.0562 33.9274 46.1048C27.3926 47.1897 21.1567 49.6166 15.617 53.2308C15.279 53.4505 14.8783 53.555 14.4753 53.5286C14.0723 53.5022 13.6889 53.3463 13.3827 53.0844C13.0765 52.8225 12.8642 52.4688 12.7777 52.0765C12.6911 51.6842 12.7351 51.2745 12.9029 50.9092L32.0285 8.99382L33.4869 5.7959C32.6687 7.95084 32.7141 10.336 33.6135 12.4586L33.7958 12.8565L41.9129 30.649Z\" fill=\"currentColor\" fill-opacity=\"0.22\"></path>
13
13
  </svg>
14
- ".html_safe
14
+ "
15
15
 
16
16
  AA_PNG = "<img src=\"data:image/png;base64,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\">
17
- ".html_safe
17
+ "
18
18
  end
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 173
8
+ TINY = 174
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
data/lib/brick.rb CHANGED
@@ -89,7 +89,7 @@ end
89
89
  # is first established), and then automatically creates models, controllers, views,
90
90
  # and routes based on those available relations.
91
91
  require 'brick/config'
92
- if Gem::Specification.all_names.any? { |g| g.start_with?('rails-') }
92
+ if Gem::Specification.all_names.any? { |g| g.start_with?('rails-') && g[6..-1] =~ /^([0-9]|\.)+$/ }
93
93
  require 'rails'
94
94
  require 'brick/frameworks/rails'
95
95
  end
@@ -149,7 +149,19 @@ module Brick
149
149
  ch.connection_pool_list.blank?
150
150
 
151
151
  # Key our list of relations for this connection off of the connection pool's object_id
152
- (@relations ||= {})[ActiveRecord::Base.connection_pool.object_id] ||= Hash.new { |h, k| h[k] = Hash.new { |h, k| h[k] = {} } }
152
+ cp_objid = ActiveRecord::Base.connection_pool.object_id
153
+ @relations ||= {}
154
+
155
+ # Have we already seen this database? (Perhaps we're connecting to a replica?)
156
+ @relations[cp_objid] ||= if (db_name = ActiveRecord::Base.connection&.instance_variable_get(:@config)&.fetch(:database, nil)) &&
157
+ !@relations.key?(cp_objid) &&
158
+ (existing = @relations.find { |_k, v| v.fetch(:db_name, nil) == db_name })
159
+ existing.last
160
+ else
161
+ Hash.new { |h, k| h[k] = Hash.new { |h, k| h[k] = {} } }.tap do |h|
162
+ h[:db_name] = db_name if db_name
163
+ end
164
+ end
153
165
  end
154
166
 
155
167
  def apartment_multitenant
@@ -624,7 +636,9 @@ In config/initializers/brick.rb appropriate entries would look something like:
624
636
  end
625
637
 
626
638
  # Find associative tables that can be set up for has_many :through
627
- ::Brick.relations.each do |_key, tbl|
639
+ ::Brick.relations.each do |key, tbl|
640
+ next if key.is_a?(Symbol)
641
+
628
642
  tbl_cols = tbl[:cols].keys
629
643
  fks = tbl[:fks].each_with_object({}) { |fk, s| s[fk.last[:fk]] = [fk.last[:assoc_name], fk.last[:inverse_table]] if fk.last[:is_bt]; s }
630
644
  # Aside from the primary key and the metadata columns created_at, updated_at, and deleted_at, if this table only has
@@ -719,6 +733,8 @@ In config/initializers/brick.rb appropriate entries would look something like:
719
733
 
720
734
  if res_names.empty?
721
735
  ::Brick.relations.each_with_object({}) do |v, s|
736
+ next if v.first.is_a?(Symbol)
737
+
722
738
  v_parts = v.first.split('.')
723
739
  v_parts.shift if v_parts.first == 'public'
724
740
  res_names[v_parts.join('.')] = v.first
@@ -880,6 +896,8 @@ In config/initializers/brick.rb appropriate entries would look something like:
880
896
  end
881
897
  versioned_views = {} # Track which views have already been done for each api_root
882
898
  ::Brick.relations.each do |k, v|
899
+ next if k.is_a?(Symbol)
900
+
883
901
  if (schema_name = v.fetch(:schema, nil))
884
902
  schema_prefix = "#{schema_name}."
885
903
  end
@@ -35,6 +35,8 @@ module Brick
35
35
  end
36
36
  end
37
37
  possible_additional_references = relations.each_with_object(Hash.new { |h, k| h[k] = [] }) do |relation, s|
38
+ next if relation.first.is_a?(Symbol)
39
+
38
40
  this_tnp = tnps&.keys&.find { |tnp| relation.first.start_with?(tnp) }
39
41
  model_filename = "app/models/#{ActiveSupport::Inflector.singularize(relation.first)}.rb"
40
42
  relation.last[:cols].each do |col, type|
@@ -105,7 +105,6 @@ module Brick
105
105
  built_schemas = {} # Track all built schemas so we can place an appropriate drop_schema command only in the first
106
106
  # migration in which that schema is referenced, thereby allowing rollbacks to function properly.
107
107
  versions_to_create = [] # Resulting versions to be used when updating the schema_migrations table
108
- ar_base = Object.const_defined?(:ApplicationRecord) ? ApplicationRecord : Class.new(ActiveRecord::Base)
109
108
  # Start by making migrations for fringe tables (those with no foreign keys).
110
109
  # Continue layer by layer, creating migrations for tables that reference ones already done, until
111
110
  # no more migrations can be created. (At that point hopefully all tables are accounted for.)
@@ -126,7 +125,7 @@ module Brick
126
125
  fringe.each do |tbl|
127
126
  next unless (relation = relations.fetch(tbl, nil))&.fetch(:cols, nil)&.present?
128
127
 
129
- pkey_cols = (rpk = relation[:pkey].values.flatten) & (arpk = [ar_base.primary_key].flatten.sort)
128
+ pkey_cols = (rpk = relation[:pkey].values.flatten) & (arpk = [::Brick.ar_base.primary_key].flatten.sort)
130
129
  # In case things aren't as standard
131
130
  if pkey_cols.empty?
132
131
  pkey_cols = if rpk.empty? && relation[:cols][arpk.first]&.first == key_type
@@ -239,9 +238,9 @@ module Brick
239
238
  begin
240
239
  primary_key = relations[fk[:inverse_table]][:class_name]&.constantize&.primary_key
241
240
  rescue NameError => e
242
- primary_key = ar_base.primary_key
241
+ primary_key = ::Brick.ar_base.primary_key
243
242
  end
244
- mig << " t.references :#{fk[:assoc_name]}#{suffix}, foreign_key: { to_table: #{to_table}#{", primary_key: :#{primary_key}" if primary_key != ar_base.primary_key} }\n"
243
+ mig << " t.references :#{fk[:assoc_name]}#{suffix}, foreign_key: { to_table: #{to_table}#{", primary_key: :#{primary_key}" if primary_key != ::Brick.ar_base.primary_key} }\n"
245
244
  end
246
245
  else
247
246
  next if !id_option&.end_with?('id: false') && pkey_cols&.include?(col)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.173
4
+ version: 1.0.174
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-03 00:00:00.000000000 Z
11
+ date: 2023-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord