brick 1.0.110 → 1.0.111

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: 3d11240139b576ead983fbe9811f4476b8819878068c46db852b515fbc0849c6
4
- data.tar.gz: 2db932779fcd8517f7e5be524ce387061d4e8cab193715be76893dc1e675d1c9
3
+ metadata.gz: cb97e4a946526ed99a24e67b1e65d5f6490a40c97dc170dd0680166b087d1ccb
4
+ data.tar.gz: 48d9c4f2afcd737d9a857f8c771448639c1b0d2d568dc966bbe4b85a97cb4610
5
5
  SHA512:
6
- metadata.gz: dd22a1ab8d2b13f2d289fe02262ae8aecb3be921094bbb5dd0392fe5cd46ecadda259e72a18c3ecb7daea0fd5f5a50d697383a4bb949b068976e3b6007769d04
7
- data.tar.gz: 39d26f6c99511d3651003c660fed495223ebd4fb34865b1eaa3b8554e294ed0fb3672b17e7dc43ca43fecbd1b7dda2ec6b9a4371025880e12c83694f45557173
6
+ metadata.gz: 383d9996affbbd4fa049ab125490879143299a5477e98f921d450ea6b5b466d66a4cd210aac8db9c105a6eaf5f10eae8ac181d84d78fb6fc0b4c4151ac9dcee3
7
+ data.tar.gz: b9902fc959b0de870ef5c402fe75e76d939d0c7c5abc7b8d3c16451b87f56929eb6e329153c6b5697936f10228752ba3b2f5f2a7de6aa5c9c77c105c34dd2cfa
@@ -2019,6 +2019,21 @@ end.class_exec do
2019
2019
  # .default_schema are specified then we can work with non-tenanted models more appropriately
2020
2020
  if (apartment = Object.const_defined?('Apartment')) &&
2021
2021
  File.exist?(apartment_initializer = ::Rails.root.join('config/initializers/apartment.rb'))
2022
+ require 'apartment/adapters/abstract_adapter'
2023
+ Apartment::Adapters::AbstractAdapter.class_exec do
2024
+ if instance_methods.include?(:process_excluded_models)
2025
+ def process_excluded_models
2026
+ # All other models will share a connection (at Apartment.connection_class) and we can modify at will
2027
+ Apartment.excluded_models.each do |excluded_model|
2028
+ begin
2029
+ process_excluded_model(excluded_model)
2030
+ rescue NameError => e
2031
+ (@bad_models ||= []) << excluded_model
2032
+ end
2033
+ end
2034
+ end
2035
+ end
2036
+ end
2022
2037
  unless @_apartment_loaded
2023
2038
  load apartment_initializer
2024
2039
  @_apartment_loaded = true
@@ -2057,13 +2072,27 @@ end.class_exec do
2057
2072
  schema = possible_schema
2058
2073
  orig_schema = ActiveRecord::Base.execute_sql('SELECT current_schemas(true)').first['current_schemas'][1..-2].split(',')
2059
2074
  ActiveRecord::Base.execute_sql("SET SEARCH_PATH = ?", schema)
2060
- elsif Rails.env == 'test' # When testing, just find the most recently-created schema
2061
- ::Brick.default_schema = schema = ::Brick.db_schemas.to_a.sort { |a, b| b.last[:dt] <=> a.last[:dt] }.first.first
2062
- puts "While running tests, had noticed in the brick.rb initializer that the line \"::Brick.schema_behavior = ...\" refers to a schema called \"#{possible_schema}\" which does not exist. Reading table structure from the most recently-created schema, #{schema}."
2075
+ # When testing, just find the most recently-created schema
2076
+ elsif begin
2077
+ Rails.env == 'test' ||
2078
+ ActiveRecord::Base.execute_sql("SELECT value FROM ar_internal_metadata WHERE key='environment';").first&.fetch('value', nil) == 'test'
2079
+ rescue
2080
+ end
2081
+ ::Brick.default_schema = ::Brick.apartment_default_tenant
2082
+ ::Brick.test_schema = schema = ::Brick.db_schemas.to_a.sort { |a, b| b.last[:dt] <=> a.last[:dt] }.first.first
2083
+ if possible_schema.blank?
2084
+ puts "While running tests, using the most recently-created schema, #{schema}."
2085
+ else
2086
+ puts "While running tests, had noticed in the brick.rb initializer that the line \"::Brick.schema_behavior = ...\" refers to a schema called \"#{possible_schema}\" which does not exist. Reading table structure from the most recently-created schema, #{schema}."
2087
+ end
2063
2088
  orig_schema = ActiveRecord::Base.execute_sql('SELECT current_schemas(true)').first['current_schemas'][1..-2].split(',')
2089
+ ::Brick.config.schema_behavior = { multitenant: {} } # schema_to_analyse: [schema]
2064
2090
  ActiveRecord::Base.execute_sql("SET SEARCH_PATH = ?", schema)
2065
2091
  else
2066
2092
  puts "*** In the brick.rb initializer the line \"::Brick.schema_behavior = ...\" refers to schema(s) called #{possible_schemas.map { |s| "\"#{s}\"" }.join(', ')}. No mentioned schema exists. ***"
2093
+ if ::Brick.db_schemas.key?(::Brick.apartment_default_tenant)
2094
+ ::Brick.default_schema = schema = ::Brick.apartment_default_tenant
2095
+ end
2067
2096
  end
2068
2097
  end
2069
2098
  when 'Mysql2', 'Trilogy'
@@ -36,11 +36,12 @@ module Brick
36
36
  // This PageTransitionEvent fires when the page first loads, as well as after any other history
37
37
  // transition such as when using the browser's Back and Forward buttons.
38
38
  window.addEventListener(\"pageshow\", linkSchemas);
39
- var brickSchema;
39
+ var brickSchema,
40
+ brickTestSchema;
40
41
  function linkSchemas() {
41
42
  var schemaSelect = document.getElementById(\"schema\");
42
43
  var tblSelect = document.getElementById(\"tbl\");
43
- if (tblSelect) { // Always present
44
+ if (tblSelect) { // Always present for Brick pages
44
45
  // Used to be: var i = # {::Brick.config.path_prefix ? '0' : 'schemaSelect ? 1 : 0'},
45
46
  var changeoutList = changeout(location.href);
46
47
  for (var i = 0; i < changeoutList.length; ++i) {
@@ -53,32 +54,32 @@ function linkSchemas() {
53
54
  if (brickSchema) lhr = changeout(lhr, \"_brick_schema\", schemaSelect.value);
54
55
  location.href = lhr;
55
56
  });
56
- }
57
57
 
58
- if (schemaSelect) { // First drop-down is only present if multitenant
59
- if (brickSchema = changeout(location.href, \"_brick_schema\")) {
60
- [... document.getElementsByTagName(\"A\")].forEach(function (a) { a.href = changeout(a.href, \"_brick_schema\", brickSchema); });
61
- }
62
- if (schemaSelect.options.length > 1) {
63
- schemaSelect.value = brickSchema || \"public\";
64
- schemaSelect.addEventListener(\"change\", function () {
65
- // If there's an ID then remove it (trim after selected table)
66
- location.href = changeout(location.href, \"_brick_schema\", this.value, tblSelect.value);
67
- });
58
+ if (schemaSelect) { // First drop-down is only present if multitenant
59
+ if (brickSchema = changeout(location.href, \"_brick_schema\")) {
60
+ [... document.getElementsByTagName(\"A\")].forEach(function (a) { a.href = changeout(a.href, \"_brick_schema\", brickSchema); });
61
+ }
62
+ if (schemaSelect.options.length > 1) {
63
+ schemaSelect.value = brickSchema || brickTestSchema || \"public\";
64
+ schemaSelect.addEventListener(\"change\", function () {
65
+ // If there's an ID then remove it (trim after selected table)
66
+ location.href = changeout(location.href, \"_brick_schema\", this.value, tblSelect.value);
67
+ });
68
+ }
68
69
  }
69
- }
70
- tblSelect.focus();
71
-
72
- [... document.getElementsByTagName(\"FORM\")].forEach(function (form) {
73
- if (brickSchema)
74
- form.action = changeout(form.action, \"_brick_schema\", brickSchema);
75
- form.addEventListener('submit', function (ev) {
76
- [... ev.target.getElementsByTagName(\"SELECT\")].forEach(function (select) {
77
- if (select.value === \"^^^brick_NULL^^^\") select.value = null;
70
+ tblSelect.focus();
71
+
72
+ [... document.getElementsByTagName(\"FORM\")].forEach(function (form) {
73
+ if (brickSchema)
74
+ form.action = changeout(form.action, \"_brick_schema\", brickSchema);
75
+ form.addEventListener('submit', function (ev) {
76
+ [... ev.target.getElementsByTagName(\"SELECT\")].forEach(function (select) {
77
+ if (select.value === \"^^^brick_NULL^^^\") select.value = null;
78
+ });
79
+ return true;
78
80
  });
79
- return true;
80
81
  });
81
- });
82
+ }
82
83
  };
83
84
  "
84
85
 
@@ -359,15 +360,11 @@ window.addEventListener(\"popstate\", linkSchemas);
359
360
  (is_status = ::Brick.config.add_status && args[0..1] == ['status', ['brick_gem']]) ||
360
361
  (is_orphans = ::Brick.config.add_orphans && args[0..1] == ['orphans', ['brick_gem']]) ||
361
362
  (is_crosstab = args[0..1] == ['crosstab', ['brick_gem']])
362
- if ActionView.version < ::Gem::Version.new('5.0') # %%% Not sure if this should be perhaps 4.2 instead
363
- begin
364
- if (possible_template = _brick_find_template(*args, **options))
365
- return possible_template
366
- end
367
- rescue
363
+ begin
364
+ if (possible_template = _brick_find_template(*args, **options))
365
+ return possible_template
368
366
  end
369
- elsif (possible_template = _brick_find_template(*args, **options))
370
- return possible_template
367
+ rescue
371
368
  end
372
369
  # Used to also have: ActionView.version < ::Gem::Version.new('5.0') &&
373
370
  model_name = (args[1].is_a?(Array) ? set_brick_model(args) : nil)&.name
@@ -851,8 +848,9 @@ document.querySelectorAll(\"input[type=submit][data-confirm]\").forEach(function
851
848
  });
852
849
  });
853
850
 
854
- #{JS_CHANGEOUT}
855
-
851
+ #{JS_CHANGEOUT}#{
852
+ "\nbrickTestSchema = \"#{::Brick.test_schema}\";" if ::Brick.test_schema
853
+ }
856
854
  // Snag first TR for sticky header
857
855
  var grid = document.getElementById(\"#{table_name}\");
858
856
  #{table_name}HtColumns = grid && [grid.getElementsByTagName(\"TR\")[0]];
@@ -201,6 +201,7 @@ module Brick::Rails::FormTags
201
201
  end
202
202
  filter = "?#{filter_parts.join('&')}" if filter_parts.present?
203
203
  app_routes = Rails.application.routes # In case we're operating in another engine, reference the application since Brick routes are placed there.
204
+ relation = ::Brick.relations.fetch(rel_name || args.first.table_name, nil)
204
205
  if (klass_or_obj&.is_a?(Class) && klass_or_obj < ActiveRecord::Base) ||
205
206
  (klass_or_obj&.is_a?(ActiveRecord::Base) && klass_or_obj.new_record? && (klass_or_obj = klass_or_obj.class))
206
207
  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}"
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 110
8
+ TINY = 111
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
@@ -135,7 +135,8 @@ module Brick
135
135
  @existing_stis ||= Brick.config.sti_namespace_prefixes.each_with_object({}) { |snp, s| s[snp.first[2..-1]] = snp.last unless snp.first.end_with?('::') }
136
136
  end
137
137
 
138
- attr_accessor :default_schema, :db_schemas, :routes_done, :is_oracle, :is_eager_loading, :auto_models, :initializer_loaded
138
+ attr_accessor :default_schema, :db_schemas, :test_schema,
139
+ :routes_done, :is_oracle, :is_eager_loading, :auto_models, :initializer_loaded
139
140
 
140
141
  def set_db_schema(params = nil)
141
142
  # If Apartment::Tenant.current is not still the default (usually 'public') then an elevator has brought us into
@@ -148,6 +149,10 @@ module Brick
148
149
  ::Brick.db_schemas&.key?(schema)
149
150
  Apartment::Tenant.switch!(schema)
150
151
  schema
152
+ elsif ::Brick.test_schema
153
+ is_show_schema_list = true
154
+ Apartment::Tenant.switch!(::Brick.test_schema)
155
+ ::Brick.test_schema
151
156
  else
152
157
  current_schema # Just return the current schema
153
158
  end
@@ -1497,12 +1502,12 @@ module ActiveRecord
1497
1502
  # entry in your .select().
1498
1503
  # More information: https://discuss.rubyonrails.org/t/includes-and-select-for-joined-data/81640
1499
1504
  def apply_column_aliases(relation)
1500
- if (sel_vals = relation.select_values.map(&:to_s)).first == '_brick_eager_load'
1505
+ if !(@join_root_alias = relation.select_values.empty?) &&
1506
+ relation.select_values.first.to_s == '_brick_eager_load'
1507
+ relation.select_values.shift
1501
1508
  used_cols = {}
1502
1509
  # Find and expand out all column names being used in select(...)
1503
- new_select_values = sel_vals.each_with_object([]) do |col, s|
1504
- next if col == '_brick_eager_load'
1505
-
1510
+ new_select_values = relation.select_values.map(&:to_s).each_with_object([]) do |col, s|
1506
1511
  if col.include?(' ') # Some expression? (No chance for a simple column reference)
1507
1512
  s << col # Just pass it through
1508
1513
  else
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.110
4
+ version: 1.0.111
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-01-30 00:00:00.000000000 Z
11
+ date: 2023-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord