brick 1.0.114 → 1.0.116

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: 5006a6dabf5c9e86965e57a40ae344f9d67c2fc5e76caec8a00e978117089062
4
- data.tar.gz: 5bd0fef75e305514b4ef22e4930660cdbf9385c22b07ee92d6eb77a626a13943
3
+ metadata.gz: b515113ca31f4e0ad1a13e90df981c411e96c4a93507012876c9b2f10e76e68b
4
+ data.tar.gz: e23d63fe9fbbaaacd20d9646c382e914dfa46cfa61a8a504aaee9f3f6352d849
5
5
  SHA512:
6
- metadata.gz: b0621761d15baec575a9cd16fdb1b22e9a1d4784308c071d9878121ac841f6cf7419cb6fbcc210afad2ce98a69814c27279dc951a5d84750e7573e203d2f806a
7
- data.tar.gz: ed4b5c992076b4f28c85ab8af48bab847ab80105f2999371475529219cc6b0053444dc722a700d686fc7ed7ea39d3d939cb448c43d798bde18a0b5cfd80be23e
6
+ metadata.gz: 78fcea6b98fae7cbb0496a55a824021f4accf8c75eaf3680696333000a90854dda52783cd14a67ee7dcb91f3a48cef871ba4e3ea037f3dbec42f31c1bb485a25
7
+ data.tar.gz: a1191c8adfd3d6dbd8393e85c4bb7857a030db449891e744ac6bc3ea7f9f9cae5303987143f02892374fd088528463aacc1b06c9c4541560a0df0ded1dafe1e5
@@ -972,7 +972,10 @@ Module.class_exec do
972
972
  end
973
973
  # puts "#{self.name} - #{args.first}"
974
974
  desired_classname = (self == Object || !name) ? requested : "#{name}::#{requested}"
975
- if ((is_defined = self.const_defined?(args.first)) && (possible = self.const_get(args.first)) && possible.name == desired_classname) ||
975
+ if ((is_defined = self.const_defined?(args.first)) && (possible = self.const_get(args.first)) &&
976
+ # Reset `possible` if it's a controller request that's not a perfect match
977
+ # Was: (possible = nil) but changed to #local_variable_set in order to suppress the "= should be ==" warning
978
+ (possible.name == desired_classname || (is_controller && binding.local_variable_set(:possible, nil)))) ||
976
979
  # Try to require the respective Ruby file
977
980
  ((filename = ActiveSupport::Dependencies.search_for_file(desired_classname.underscore) ||
978
981
  (self != Object && ActiveSupport::Dependencies.search_for_file((desired_classname = requested).underscore))
@@ -983,7 +986,7 @@ Module.class_exec do
983
986
  # then return what we've found.
984
987
  (is_defined && !::Brick.is_eager_loading) # Used to also have: && possible != self
985
988
  if (!brick_root && (filename || possible.instance_of?(Class))) ||
986
- (possible.instance_of?(Module) && possible.module_parent == self) ||
989
+ (possible.instance_of?(Module) && possible&.module_parent == self) ||
987
990
  (possible.instance_of?(Class) && possible == self) # Are we simply searching for ourselves?
988
991
  return possible
989
992
  end
@@ -82,6 +82,15 @@ function linkSchemas() {
82
82
  }
83
83
  };
84
84
  "
85
+ BRICK_SVG = "<svg version=\"1.1\" style=\"display: inline; padding-left: 0.5em;\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"
86
+ viewBox=\"0 0 58 58\" height=\"1.4em\" xml:space=\"preserve\">
87
+ <g>
88
+ <polygon style=\"fill:#C2615F;\" points=\"58,15.831 19.106,35.492 0,26.644 40,6\"/>
89
+ <polygon style=\"fill:#6D4646;\" points=\"19,52 0,43.356 0,26.644 19,35\"/>
90
+ <polygon style=\"fill:#894747;\" points=\"58,31.559 19,52 19,35 58,15.831\"/>
91
+ </g>
92
+ </svg>
93
+ ".html_safe
85
94
 
86
95
  # paths['app/models'] << 'lib/brick/frameworks/active_record/models'
87
96
  config.brick = ActiveSupport::OrderedOptions.new
@@ -246,15 +255,7 @@ window.addEventListener(\"popstate\", linkSchemas);
246
255
  end
247
256
  def to_s
248
257
  @_name.to_s.html_safe + @vc.instance_variable_get(:@__vc_helpers)&.link_to_brick(nil,
249
- "<svg version=\"1.1\" style=\"display: inline; padding-left: 0.5em;\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"
250
- viewBox=\"0 0 58 58\" height=\"1.4em\" xml:space=\"preserve\">
251
- <g>
252
- <polygon style=\"fill:#C2615F;\" points=\"58,15.831 19.106,35.492 0,26.644 40,6\"/>
253
- <polygon style=\"fill:#6D4646;\" points=\"19,52 0,43.356 0,26.644 19,35\"/>
254
- <polygon style=\"fill:#894747;\" points=\"58,31.559 19,52 19,35 58,15.831\"/>
255
- </g>
256
- </svg>
257
- ".html_safe,
258
+ BRICK_SVG,
258
259
  { title: "#{@_name} in Brick" }
259
260
  )
260
261
  end
@@ -298,7 +299,14 @@ window.addEventListener(\"popstate\", linkSchemas);
298
299
  )
299
300
  nil
300
301
  else # This is either a non-Avo request or a proper Avo request, so carry on
301
- _brick_url_for(options, *args)
302
+ begin
303
+ _brick_url_for(options, *args)
304
+ rescue
305
+ # Last-ditch effort in case we were in yet a different RouteSet
306
+ unless (rar = ::Rails.application.routes) == self
307
+ rar.url_for(options, *args)
308
+ end
309
+ end
302
310
  end
303
311
  end
304
312
  end
@@ -314,14 +322,87 @@ window.addEventListener(\"popstate\", linkSchemas);
314
322
  ::Brick.relations.each do |k, v|
315
323
  next if k == 'active_admin_comments'
316
324
 
317
- if (class_name = Object.const_get(v.fetch(:class_name, nil)))
318
- ::ActiveAdmin.register(class_name) { config.clear_batch_actions! }
325
+ begin
326
+ if (class_name = Object.const_get(v.fetch(:class_name, nil)))
327
+ ::ActiveAdmin.register(class_name) { config.clear_batch_actions! }
328
+ end
329
+ rescue
319
330
  end
320
331
  end
321
332
  _brick_routes(*args)
322
333
  end
323
334
  end
324
335
  end
336
+ ::ActiveAdmin::Views::TitleBar.class_exec do
337
+ alias _brick_build_title_tag build_title_tag
338
+ def build_title_tag
339
+ if klass = begin
340
+ aa_id = helpers.instance_variable_get(:@current_tab)&.id
341
+ ::Brick.relations.fetch(aa_id, nil)&.fetch(:class_name, nil)&.constantize
342
+ rescue
343
+ end
344
+ h2((@title + link_to_brick(nil,
345
+ BRICK_SVG, # This would do well to be sized a bit smaller
346
+ { title: "#{@_name} in Brick" }
347
+ )).html_safe)
348
+ else
349
+ _brick_build_title_tag # Revert to the original
350
+ end
351
+ end
352
+ end
353
+ end
354
+
355
+ # Forest Admin compatibility
356
+ if Object.const_defined?('ForestLiana')
357
+ ForestLiana::Bootstrapper.class_exec do
358
+ alias _brick_fetch_models fetch_models
359
+ def fetch_models
360
+ # Auto-create Brick models
361
+ ::Brick.relations.each do |k, v|
362
+ next if k == 'active_admin_comments'
363
+
364
+ begin
365
+ v[:class_name].constantize
366
+ rescue
367
+ end
368
+ end
369
+ _brick_fetch_models
370
+ end
371
+ end
372
+ end
373
+
374
+ # MotorAdmin compatibility
375
+ if Object.const_defined?('Motor') && ::Motor.const_defined?('BuildSchema')
376
+ ::Motor::BuildSchema::LoadFromRails.class_exec do
377
+ class << self
378
+ alias _brick_models models
379
+ def models
380
+ # If RailsAdmin is also present and had already cached its list of models, this builds out the MotorAdmin
381
+ # models differently, so invalidate RailsAdmin's cached list.
382
+ if Object.const_defined?('RailsAdmin') && ::RailsAdmin::Config.class_variable_defined?(:@@system_models)
383
+ ::RailsAdmin::Config.remove_class_variable(:@@system_models)
384
+ ::RailsAdmin::AbstractModel.reset
385
+ end
386
+
387
+ eager_load_models!
388
+ # Auto-create Brick models (except for those related to Motor::ApplicationRecord)
389
+ mar_tables = Motor::ApplicationRecord.descendants.map(&:table_name)
390
+ # Add JSON fields
391
+ if mar_tables.include?('motor_api_configs')
392
+ mac = (::Brick.config.json_columns['motor_api_configs'] ||= [])
393
+ mac += ['preferences', 'credentials']
394
+ end
395
+ (::Brick.config.json_columns['motor_audits'] ||= []) << 'audited_changes' if mar_tables.include?('motor_audits')
396
+ (::Brick.config.json_columns['motor_configs'] ||= []) << 'value' if mar_tables.include?('motor_configs')
397
+ ::Brick.relations.each do |k, v|
398
+ next if mar_tables.include?(k) || k == 'motor_audits'
399
+
400
+ v[:class_name].constantize
401
+ end
402
+ _brick_models.reject { |m| mar_tables.include?(m.table_name) || m.table_name == 'motor_audits' }
403
+ end
404
+ end
405
+ end
325
406
  end
326
407
 
327
408
  # ====================================
@@ -846,7 +927,9 @@ callbacks = {} %>
846
927
  <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>
847
928
  </svg>
848
929
  ".gsub('"', '\"')
849
- }\".html_safe %>"
930
+ }\".html_safe
931
+ aa_png = \"<img src=\\\"data:image/png;base64,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\\\">\".html_safe
932
+ %>"
850
933
 
851
934
  if ['index', 'show', 'new', 'update'].include?(args.first)
852
935
  poly_cols = []
@@ -1194,6 +1277,19 @@ erDiagram
1194
1277
  title: \"#\{model.name} in Avo\" }
1195
1278
  ) %></td>
1196
1279
  <% end %>
1280
+ <% if Object.const_defined?('ActiveAdmin')
1281
+ ActiveAdmin.application.namespaces.names.each do |ns|
1282
+ td_count += 1 %>
1283
+ <td><%= link_to_brick(
1284
+ aa_png,
1285
+ { index_proc: Proc.new do |aa_model, relation|
1286
+ path_helper = \"#\{ns}_#\{relation.fetch(:auto_prefixed_schema, nil)}#\{rk = aa_model.model_name.route_key}_path\".to_sym
1287
+ send(path_helper) if respond_to?(path_helper)
1288
+ end,
1289
+ title: \"#\{model.name} in ActiveAdmin\" }
1290
+ ) %></td>
1291
+ <% end
1292
+ end %>
1197
1293
  </tr><%= if (page_num = @#{table_name}._brick_page_num)
1198
1294
  \"<tr><td colspan=\\\"#\{td_count}\\\">Page #\{page_num}</td></tr>\".html_safe
1199
1295
  end %></table>#{template_link}<%
@@ -1382,7 +1478,20 @@ erDiagram
1382
1478
  end,
1383
1479
  title: \"#\{page_title} in Avo\" }
1384
1480
  ) %></td>
1385
- <% end %>
1481
+ <% end
1482
+
1483
+ if Object.const_defined?('ActiveAdmin')
1484
+ ActiveAdmin.application.namespaces.names.each do |ns| %>
1485
+ <td><%= link_to_brick(
1486
+ aa_png,
1487
+ { show_proc: Proc.new do |aa_model, relation|
1488
+ path_helper = \"#\{ns}_#\{relation.fetch(:auto_prefixed_schema, nil)}#\{rk = aa_model.model_name.singular_route_key}_path\".to_sym
1489
+ send(path_helper, obj) if respond_to?(path_helper)
1490
+ end,
1491
+ title: \"#\{page_title} in ActiveAdmin\" }
1492
+ ) %></td>
1493
+ <% end
1494
+ end %>
1386
1495
  </table>
1387
1496
  <%
1388
1497
  if (description = (relation = Brick.relations[tbl_name = #{model_name}.table_name])&.fetch(:description, nil)) %><%=
@@ -1821,9 +1930,24 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
1821
1930
 
1822
1931
  alias _brick_viable_models viable_models
1823
1932
  def viable_models
1824
- return _brick_viable_models if class_variables.include?(:@@system_models)
1933
+ return _brick_viable_models if ::RailsAdmin::Config.class_variables.include?(:@@system_models)
1934
+
1935
+ brick_models = ::Brick.relations.map { |_k, v| v[:class_name] }
1825
1936
 
1826
- @@system_models = (vm = _brick_viable_models) + (::Brick.auto_models - vm)
1937
+ # The original from RailsAdmin (now aliased as _brick_viable_models) loads all classes
1938
+ # in the whole project. This Brick approach is a little more tame.
1939
+ ::Brick.eager_load_classes
1940
+ # All tables used by non-Brick models
1941
+ ar_tables = (arbd = ActiveRecord::Base.descendants).each_with_object([]) do |ar, s|
1942
+ s << ar.table_name unless brick_models.include?(ar.name)
1943
+ end
1944
+ viable = arbd.each_with_object([]) do |ar, s|
1945
+ # Include all the app's models, plus any Brick models which describe tables not covered by the app's models
1946
+ unless ar.abstract_class? || (brick_models.include?(ar.name) && ar_tables.include?(ar.table_name))
1947
+ s << ar.name
1948
+ end
1949
+ end
1950
+ RailsAdmin::Config.class_variable_set(:@@system_models, viable)
1827
1951
  end
1828
1952
  end
1829
1953
  end
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 114
8
+ TINY = 116
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
@@ -137,6 +137,7 @@ module Brick
137
137
 
138
138
  attr_accessor :default_schema, :db_schemas, :test_schema,
139
139
  :routes_done, :is_oracle, :is_eager_loading, :auto_models, :initializer_loaded
140
+ ::Brick.auto_models = []
140
141
 
141
142
  def set_db_schema(params = nil)
142
143
  # If Apartment::Tenant.current is not still the default (usually 'public') then an elevator has brought us into
@@ -610,7 +611,7 @@ In config/initializers/brick.rb appropriate entries would look something like:
610
611
 
611
612
  def display_classes(prefix, rels, max_length)
612
613
  rels.sort.each do |rel|
613
- (::Brick.auto_models ||= []) << rel.first
614
+ ::Brick.auto_models << rel.first
614
615
  puts "#{rel.first}#{' ' * (max_length - rel.first.length)} /#{prefix}#{"#{rel[1]}/" if rel[1]}#{rel.last}"
615
616
  end
616
617
  puts "\n"
@@ -660,7 +661,7 @@ In config/initializers/brick.rb appropriate entries would look something like:
660
661
  module RouteSet
661
662
  def finalize!
662
663
  routeset_to_use = ::Rails.application.routes
663
- return super unless self == routeset_to_use
664
+ return super if self != routeset_to_use || ::Brick.routes_done
664
665
 
665
666
  path_prefix = ::Brick.config.path_prefix
666
667
  existing_controllers = routes.each_with_object({}) do |r, s|
@@ -867,9 +868,12 @@ In config/initializers/brick.rb appropriate entries would look something like:
867
868
 
868
869
  # Trestle compatibility
869
870
  if Object.const_defined?('Trestle') && ::Trestle.config.options&.key?(:site_title) &&
870
- !Object.const_defined?("#{resource_name.camelize}Admin")
871
- ::Trestle.resource(res_sym = k.to_sym) do
872
- menu { item res_sym, icon: "fa fa-star" }
871
+ !Object.const_defined?("#{(res_name = resource_name.tr('/', '_')).camelize}Admin")
872
+ begin
873
+ ::Trestle.resource(res_sym = res_name.to_sym, model: class_name&.constantize) do
874
+ menu { item res_sym, icon: "fa fa-star" }
875
+ end
876
+ rescue
873
877
  end
874
878
  end
875
879
  end
@@ -887,54 +891,56 @@ In config/initializers/brick.rb appropriate entries would look something like:
887
891
  get("/#{controller_prefix}brick_crosstab/data", to: 'brick_gem#crosstab_data')
888
892
  end
889
893
 
890
- unless ::Brick.routes_done
891
- if Object.const_defined?('Rswag::Ui')
892
- rswag_path = routeset_to_use.routes.find { |r| r.app.app == Rswag::Ui::Engine }&.instance_variable_get(:@path_formatter)&.instance_variable_get(:@parts)&.join
893
- first_endpoint_parts = nil
894
- (doc_endpoints = Rswag::Ui.config.config_object[:urls])&.each do |doc_endpoint|
895
- puts "Mounting OpenApi 3.0 documentation endpoint for \"#{doc_endpoint[:name]}\" on #{doc_endpoint[:url]}"
896
- send(:get, doc_endpoint[:url], { to: 'brick_openapi#index' })
897
- endpoint_parts = doc_endpoint[:url]&.split('/')
898
- first_endpoint_parts ||= endpoint_parts
899
- end
900
- if doc_endpoints.present?
901
- if rswag_path && first_endpoint_parts
902
- puts "API documentation now available when navigating to: /#{first_endpoint_parts&.find(&:present?)}/index.html"
903
- else
904
- puts "In order to make documentation available you can put this into your routes.rb:"
905
- puts " mount Rswag::Ui::Engine => '/#{first_endpoint_parts&.find(&:present?) || 'api-docs'}'"
906
- end
894
+ if Object.const_defined?('Rswag::Ui')
895
+ rswag_path = routeset_to_use.routes.find { |r| r.app.app == Rswag::Ui::Engine }&.instance_variable_get(:@path_formatter)&.instance_variable_get(:@parts)&.join
896
+ first_endpoint_parts = nil
897
+ (doc_endpoints = Rswag::Ui.config.config_object[:urls])&.each do |doc_endpoint|
898
+ puts "Mounting OpenApi 3.0 documentation endpoint for \"#{doc_endpoint[:name]}\" on #{doc_endpoint[:url]}" unless ::Brick.routes_done
899
+ send(:get, doc_endpoint[:url], { to: 'brick_openapi#index' })
900
+ endpoint_parts = doc_endpoint[:url]&.split('/')
901
+ first_endpoint_parts ||= endpoint_parts
902
+ end
903
+ end
904
+ next if ::Brick.routes_done
905
+
906
+ if Object.const_defined?('Rswag::Ui')
907
+ if doc_endpoints.present?
908
+ if rswag_path && first_endpoint_parts
909
+ puts "API documentation now available when navigating to: /#{first_endpoint_parts&.find(&:present?)}/index.html"
907
910
  else
908
- sample_path = rswag_path || '/api-docs'
911
+ puts "In order to make documentation available you can put this into your routes.rb:"
912
+ puts " mount Rswag::Ui::Engine => '/#{first_endpoint_parts&.find(&:present?) || 'api-docs'}'"
913
+ end
914
+ else
915
+ sample_path = rswag_path || '/api-docs'
916
+ puts
917
+ puts "Brick: rswag-ui gem detected -- to make OpenAPI 3.0 documentation available from a path such as '#{sample_path}/v1/swagger.json',"
918
+ puts ' put code such as this in an initializer:'
919
+ puts ' Rswag::Ui.configure do |config|'
920
+ puts " config.swagger_endpoint '#{sample_path}/v1/swagger.json', 'API V1 Docs'"
921
+ puts ' end'
922
+ unless rswag_path
909
923
  puts
910
- puts "Brick: rswag-ui gem detected -- to make OpenAPI 3.0 documentation available from a path such as '#{sample_path}/v1/swagger.json',"
911
- puts ' put code such as this in an initializer:'
912
- puts ' Rswag::Ui.configure do |config|'
913
- puts " config.swagger_endpoint '#{sample_path}/v1/swagger.json', 'API V1 Docs'"
914
- puts ' end'
915
- unless rswag_path
916
- puts
917
- puts ' and put this into your routes.rb:'
918
- puts " mount Rswag::Ui::Engine => '/api-docs'"
919
- end
924
+ puts ' and put this into your routes.rb:'
925
+ puts " mount Rswag::Ui::Engine => '/api-docs'"
920
926
  end
921
927
  end
928
+ end
922
929
 
923
- ::Brick.routes_done = true
924
- puts "\n" if tables.present? || views.present?
925
- if tables.present?
926
- puts "Classes that can be built from tables:#{' ' * (table_class_length - 38)} Path:"
927
- puts "======================================#{' ' * (table_class_length - 38)} ====="
928
- ::Brick.display_classes(controller_prefix, tables, table_class_length)
929
- end
930
- if views.present?
931
- puts "Classes that can be built from views:#{' ' * (view_class_length - 37)} Path:"
932
- puts "=====================================#{' ' * (view_class_length - 37)} ====="
933
- ::Brick.display_classes(controller_prefix, views, view_class_length)
934
- end
930
+ puts "\n" if tables.present? || views.present?
931
+ if tables.present?
932
+ puts "Classes that can be built from tables:#{' ' * (table_class_length - 38)} Path:"
933
+ puts "======================================#{' ' * (table_class_length - 38)} ====="
934
+ ::Brick.display_classes(controller_prefix, tables, table_class_length)
935
+ end
936
+ if views.present?
937
+ puts "Classes that can be built from views:#{' ' * (view_class_length - 37)} Path:"
938
+ puts "=====================================#{' ' * (view_class_length - 37)} ====="
939
+ ::Brick.display_classes(controller_prefix, views, view_class_length)
935
940
  end
936
941
  end
937
942
  super
943
+ ::Brick.routes_done = true
938
944
  end
939
945
  end
940
946
 
@@ -976,6 +982,21 @@ module ::Rails
976
982
  end
977
983
  end
978
984
 
985
+ # # Support for when a table or view is named just 's'
986
+ # ActiveSupport::Inflector.class_eval do
987
+ # class << self
988
+ # alias _brick_singularize singularize
989
+ # def singularize(word, locale = :en)
990
+ # if word.present? && ((ret = _brick_singularize(word, locale)).empty? || ret[-1] == '/')
991
+ # # puts word
992
+ # # binding.pry if ret.empty? || ret[-1] == '/'
993
+ # ret << 's'
994
+ # end
995
+ # ret
996
+ # end
997
+ # end
998
+ # end
999
+
979
1000
  # Major compatibility fixes for ActiveRecord < 4.2
980
1001
  # ================================================
981
1002
  ActiveSupport.on_load(:active_record) do
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.114
4
+ version: 1.0.116
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-02-19 00:00:00.000000000 Z
11
+ date: 2023-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord