brick 1.0.116 → 1.0.118

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b515113ca31f4e0ad1a13e90df981c411e96c4a93507012876c9b2f10e76e68b
4
- data.tar.gz: e23d63fe9fbbaaacd20d9646c382e914dfa46cfa61a8a504aaee9f3f6352d849
3
+ metadata.gz: bc284b8783ca27862ff567079ba680a238690e3779a57d705ee67a54ed016ab2
4
+ data.tar.gz: 812044a88cff33dbf4fe7dbfa37a80e91b1b1a94980091590f4665a123529e80
5
5
  SHA512:
6
- metadata.gz: 78fcea6b98fae7cbb0496a55a824021f4accf8c75eaf3680696333000a90854dda52783cd14a67ee7dcb91f3a48cef871ba4e3ea037f3dbec42f31c1bb485a25
7
- data.tar.gz: a1191c8adfd3d6dbd8393e85c4bb7857a030db449891e744ac6bc3ea7f9f9cae5303987143f02892374fd088528463aacc1b06c9c4541560a0df0ded1dafe1e5
6
+ metadata.gz: 9a5f82a5956b40beeaa8aeca2861672561ea552b3b21cb85ebf9b426a31bdbd4025f4c047131ae962cdefb31378c8845c9bea947a50dfc34cf497cd9b68ae6b9
7
+ data.tar.gz: 83e1c1399045dc67d6c5dcd98347d2c84a7dec4ac474b5cc09da43b86ce21859d01204844be75d6764a5653c7ea1c220f3887835d07f703c789a82b6311bfad0
@@ -279,7 +279,7 @@ module ActiveRecord
279
279
  end
280
280
 
281
281
  def self.brick_import_template
282
- template = constants.include?(:IMPORT_TEMPLATE) ? self::IMPORT_TEMPLATE : suggest_template(false, false, 0)
282
+ template = constants.include?(:IMPORT_TEMPLATE) ? self::IMPORT_TEMPLATE : suggest_template(0, false, true)
283
283
  # Add the primary key to the template as being unique (unless it's already there)
284
284
  template[:uniques] = [pk = primary_key.to_sym]
285
285
  template[:all].unshift(pk) unless template[:all].include?(pk)
@@ -1034,18 +1034,19 @@ Module.class_exec do
1034
1034
 
1035
1035
  # AVO Resource
1036
1036
  elsif base_module == Object && Object.const_defined?('Avo') && requested.end_with?('Resource') &&
1037
- ['MotorResource'].exclude?(requested) # Expect that anything called MotorResource could be from that administrative gem
1038
- if (model = Object.const_get(requested[0..-9]))
1037
+ # Expect that anything called MotorResource or SpinaResource could be from those administrative gems
1038
+ requested.length > 8 && ['MotorResource', 'SpinaResource'].exclude?(requested)
1039
+ if (model = Object.const_get(requested[0..-9])) && model < ActiveRecord::Base
1039
1040
  require 'generators/avo/resource_generator'
1040
1041
  field_generator = Generators::Avo::ResourceGenerator.new([''])
1041
1042
  field_generator.instance_variable_set(:@model, model)
1042
- fields = field_generator.send(:generate_fields).split("\n")
1043
- .each_with_object([]) do |f, s|
1043
+ fields = field_generator.send(:generate_fields)&.split("\n")
1044
+ &.each_with_object([]) do |f, s|
1044
1045
  if (f = f.strip).start_with?('field ')
1045
1046
  f = f[6..-1].split(',')
1046
1047
  s << [f.first[1..-1].to_sym, [f[1][1..-1].split(': :').map(&:to_sym)].to_h]
1047
1048
  end
1048
- end
1049
+ end || []
1049
1050
  built_resource = Class.new(Avo::BaseResource) do |new_resource_class|
1050
1051
  self.model_class = model
1051
1052
  self.title = :brick_descrip
@@ -2385,11 +2386,11 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
2385
2386
  "NOT IN ('information_schema', 'pg_catalog', 'pg_toast', 'heroku_ext',
2386
2387
  'INFORMATION_SCHEMA', 'sys')"
2387
2388
  :
2388
- "= '#{ActiveRecord::Base.connection.current_database.tr("'", "''")}'"}#{"
2389
+ "= '#{ActiveRecord::Base.connection.current_database&.tr("'", "''")}'"}#{"
2389
2390
  AND t.table_schema = COALESCE(current_setting('SEARCH_PATH'), 'public')" if is_postgres && schema }
2390
2391
  -- AND t.table_type IN ('VIEW') -- 'BASE TABLE', 'FOREIGN TABLE'
2391
2392
  AND t.table_name NOT IN ('pg_stat_statements', ?, ?)
2392
- ORDER BY 1, t.table_type DESC, 2, kcu.ordinal_position"
2393
+ ORDER BY 1, t.table_type DESC, 2, c.ordinal_position"
2393
2394
  ActiveRecord::Base.execute_sql(sql, *ar_tables)
2394
2395
  end
2395
2396
 
@@ -76,6 +76,11 @@ function linkSchemas() {
76
76
  [... ev.target.getElementsByTagName(\"SELECT\")].forEach(function (select) {
77
77
  if (select.value === \"^^^brick_NULL^^^\") select.value = null;
78
78
  });
79
+ // Take outer <div> tag off the HTML being returned by any Trix editor
80
+ [... document.getElementsByTagName(\"TRIX-EDITOR\")].forEach(function (trix) {
81
+ var trixHidden = trix.inputElement;
82
+ if (trixHidden) trixHidden.value = trixHidden.value.slice(5, -6);
83
+ });
79
84
  return true;
80
85
  });
81
86
  });
@@ -215,16 +220,16 @@ function linkSchemas() {
215
220
  TurboFrameWrapperComponent.class_exec do
216
221
  alias _brick_content content
217
222
  def content
218
- # Avo's logo partial fails if there is not a URL helper called exactly "root_path"
219
- # (Finicky line over there is: avo/app/views/avo/partials/_logo.html.erb:1)
220
223
  if ::Brick.instance_variable_get(:@_brick_avo_js) == view_renderer.object_id
221
224
  _brick_content
222
225
  else
223
226
  ::Brick.instance_variable_set(:@_brick_avo_js, view_renderer.object_id)
227
+ # Avo's logo partial fails if there is not a URL helper called exactly "root_path"
228
+ # (Finicky line over there is: avo/app/views/avo/partials/_logo.html.erb:1)
224
229
  unless ::Rails.application.routes.named_routes.names.include?(:root) || ActionView::Base.respond_to?(:root_path)
225
230
  ActionView::Base.class_exec do
226
231
  def root_path
227
- Avo::App.root_path
232
+ Avo.configuration.root_path
228
233
  end
229
234
  end
230
235
  end
@@ -350,6 +355,21 @@ window.addEventListener(\"popstate\", linkSchemas);
350
355
  end
351
356
  end
352
357
  end
358
+ # Build out the main dashboard with default boilerplate if it's missing
359
+ if (namespace = ::ActiveAdmin.application.namespaces.names.first&.to_s) &&
360
+ !Object.const_defined?("#{namespace.camelize}::Dashboard")
361
+ ::ActiveAdmin.register_page "Dashboard" do
362
+ menu priority: 1, label: proc { I18n.t("active_admin.dashboard") }
363
+ content title: proc { I18n.t("active_admin.dashboard") } do
364
+ div class: "blank_slate_container", id: "dashboard_default_message" do
365
+ span class: "blank_slate" do
366
+ span I18n.t("active_admin.dashboard_welcome.welcome")
367
+ small I18n.t("active_admin.dashboard_welcome.call_to_action")
368
+ end
369
+ end
370
+ end
371
+ end
372
+ end
353
373
  end
354
374
 
355
375
  # Forest Admin compatibility
@@ -405,6 +425,32 @@ window.addEventListener(\"popstate\", linkSchemas);
405
425
  end
406
426
  end
407
427
 
428
+ # Unconfigured Mobility gem?
429
+ if Object.const_defined?('Mobility') && Mobility.respond_to?(:translations_class)
430
+ # Find the current defaults
431
+ defs = if Mobility.instance_variable_defined?(:@translations_class)
432
+ ::Mobility.translations_class.defaults
433
+ else
434
+ {}
435
+ end
436
+ # Fill in the blanks for any missing defaults
437
+ ::Mobility.configure do |config|
438
+ config.plugins do
439
+ # Default initializer would also set these:
440
+ # :backend_reader=>true
441
+ # :query=>:i18n
442
+ # :cache=>true
443
+ # :presence=>true
444
+ backend :key_value, type: :string unless defs.key?(:backend)
445
+ reader unless defs.key?(:reader)
446
+ writer unless defs.key?(:writer)
447
+ active_record unless ::Mobility::Plugins.instance_variable_get(:@plugins)&.key?(:active_record)
448
+ fallbacks false unless defs.key?(:fallbacks)
449
+ default nil unless defs.key?(:default)
450
+ end
451
+ end
452
+ end
453
+
408
454
  # ====================================
409
455
  # Dynamically create generic templates
410
456
  # ====================================
@@ -750,6 +796,7 @@ input+svg.revert {
750
796
 
751
797
  <% is_includes_dates = nil
752
798
  is_includes_json = nil
799
+ is_includes_text = nil
753
800
  def is_bcrypt?(val)
754
801
  val.is_a?(String) && val.length == 60 && val.start_with?('$2a$')
755
802
  end
@@ -1554,32 +1601,36 @@ end
1554
1601
  <td>
1555
1602
  <table><tr><td>
1556
1603
  <% dt_pickers = { datetime: 'datetimepicker', timestamp: 'datetimepicker', time: 'timepicker', date: 'datepicker' }
1557
- html_options = {}
1558
- html_options[:class] = 'dimmed' unless val
1559
- is_revert = true
1560
- if bt
1561
- html_options[:prompt] = \"Select #\{bt_name\}\" %>
1562
- <%= f.select k.to_sym, bt[3], { value: val || '^^^brick_NULL^^^' }, html_options %>
1563
- <%= if (bt_obj = bt_class&.find_by(bt_pair[1] => val))
1564
- link_to('⇛', send(\"#\{bt_class.base_class._brick_index(:singular)\}_path\".to_sym, bt_obj.send(bt_class.primary_key.to_sym)), { class: 'show-arrow' })
1565
- elsif val
1566
- \"<span class=\\\"orphan\\\">Orphaned ID: #\{val}</span>\".html_safe
1567
- end %>
1604
+ html_options = {}
1605
+ html_options[:class] = 'dimmed' unless val
1606
+ is_revert = true
1607
+ if bt
1608
+ html_options[:prompt] = \"Select #\{bt_name\}\" %>
1609
+ <%= f.select k.to_sym, bt[3], { value: val || '^^^brick_NULL^^^' }, html_options %>
1610
+ <%= if (bt_obj = bt_class&.find_by(bt_pair[1] => val))
1611
+ link_to('⇛', send(\"#\{bt_class.base_class._brick_index(:singular)\}_path\".to_sym, bt_obj.send(bt_class.primary_key.to_sym)), { class: 'show-arrow' })
1612
+ elsif val
1613
+ \"<span class=\\\"orphan\\\">Orphaned ID: #\{val}</span>\".html_safe
1614
+ end %>
1568
1615
  <% else
1569
- col_type = if ::Brick.config.json_columns[tbl_name]&.include?(k)
1570
- :json
1571
- elsif col&.sql_type == 'geography'
1572
- col.sql_type
1573
- else
1574
- col&.type
1575
- end
1576
- case (col_type ||= col&.sql_type)
1577
- when :string, :text %>
1578
- <% if is_bcrypt?(val) # || .readonly?
1616
+ col_type = if ::Brick.config.json_columns[tbl_name]&.include?(k)
1617
+ :json
1618
+ elsif col&.sql_type == 'geography'
1619
+ col.sql_type
1620
+ else
1621
+ col&.type
1622
+ end
1623
+ case (col_type ||= col&.sql_type)
1624
+ when :string, :text
1625
+ if is_bcrypt?(val) # || .readonly?
1579
1626
  is_revert = false %>
1580
1627
  <%= hide_bcrypt(val, nil, 1000) %>
1581
- <% else %>
1628
+ <% elsif col_type == :string %>
1582
1629
  <%= f.text_field(k.to_sym, html_options) %>
1630
+ <% else
1631
+ is_includes_text = true %>
1632
+ <%= f.hidden_field(k.to_sym, html_options) %>
1633
+ <trix-editor input=\"<%= f.field_id(k) %>\"></trix-editor>
1583
1634
  <% end %>
1584
1635
  <% when :boolean %>
1585
1636
  <%= f.check_box k.to_sym %>
@@ -1724,6 +1775,11 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
1724
1775
  <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdnjs.cloudflare.com/ajax/libs/slim-select/1.27.1/slimselect.min.css\">
1725
1776
  <% end %>
1726
1777
 
1778
+ <% if is_includes_text %>
1779
+ <script src=\"https://cdn.jsdelivr.net/npm/trix@2.0/dist/trix.umd.min.js\"></script>
1780
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.jsdelivr.net/npm/trix@2.0/dist/trix.min.css\">
1781
+ <% end %>
1782
+
1727
1783
  <% # Started with v0.14.4 of vanilla-jsoneditor
1728
1784
  if is_includes_json %>
1729
1785
  <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.jsdelivr.net/npm/vanilla-jsoneditor/themes/jse-theme-default.min.css\">
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 116
8
+ TINY = 118
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
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.116
4
+ version: 1.0.118
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-25 00:00:00.000000000 Z
11
+ date: 2023-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord