brick 1.0.122 → 1.0.123
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 +4 -4
- data/lib/brick/extensions.rb +27 -7
- data/lib/brick/frameworks/rails/engine.rb +35 -12
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +23 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: baad039242ee5623097ad6170fec07e5feb0eb2fed6d41a9079f0775cccaceea
|
4
|
+
data.tar.gz: 603377f6b2c4437c448630bce6581d3650b8dfc13187e82afbaab1d425d171e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f4e48c1a437684929a81ace3e75ab15bb627c006680dba5a7454825fba358142560712f016bf944575aefeb27655716c3212d72a2b9b5a083a09cd2dfa8537c
|
7
|
+
data.tar.gz: ea9c376866230e4c2bab7b6c34dfc435a8cf81b568bc22af3a0e69497accca1620152ae311eab6c96649b79ecedf978b880afa88888dc6d1c4d3700bc3ef3060
|
data/lib/brick/extensions.rb
CHANGED
@@ -1859,18 +1859,27 @@ class Object
|
|
1859
1859
|
instance_variable_set("@#{singular_table_name}".to_sym, (obj = find_obj))
|
1860
1860
|
upd_params = send(params_name_sym)
|
1861
1861
|
json_overrides = ::Brick.config.json_columns&.fetch(table_name, nil)
|
1862
|
-
if
|
1862
|
+
if model.respond_to?(:devise_modules)
|
1863
1863
|
upd_hash = upd_params.to_h
|
1864
|
+
upd_hash['reset_password_token'] = nil if upd_hash['reset_password_token'].blank?
|
1865
|
+
upd_hash['reset_password_sent_at'] = nil if upd_hash['reset_password_sent_at'].blank?
|
1866
|
+
if model.devise_modules.include?(:invitable)
|
1867
|
+
upd_hash['invitation_token'] = nil if upd_hash['invitation_token'].blank?
|
1868
|
+
upd_hash['invitation_created_at'] = nil if upd_hash['invitation_created_at'].blank?
|
1869
|
+
upd_hash['invitation_sent_at'] = nil if upd_hash['invitation_sent_at'].blank?
|
1870
|
+
upd_hash['invitation_accepted_at'] = nil if upd_hash['invitation_accepted_at'].blank?
|
1871
|
+
end
|
1872
|
+
end
|
1873
|
+
if (json_cols = model.columns.select { |c| c.type == :json || json_overrides&.include?(c.name) }.map(&:name)).present?
|
1874
|
+
upd_hash ||= upd_params.to_h
|
1864
1875
|
json_cols.each do |c|
|
1865
1876
|
begin
|
1866
1877
|
upd_hash[c] = JSON.parse(upd_hash[c].tr('`', '"').gsub('^^br_btick__', '`'))
|
1867
1878
|
rescue
|
1868
1879
|
end
|
1869
1880
|
end
|
1870
|
-
obj.send(:update, upd_hash)
|
1871
|
-
else
|
1872
|
-
obj.send(:update, upd_params)
|
1873
1881
|
end
|
1882
|
+
obj.send(:update, upd_hash || upd_params)
|
1874
1883
|
end
|
1875
1884
|
|
1876
1885
|
code << " def destroy\n"
|
@@ -1906,10 +1915,11 @@ class Object
|
|
1906
1915
|
end
|
1907
1916
|
end
|
1908
1917
|
# Support friendly_id gem
|
1918
|
+
id_simplified = id.is_a?(Array) && id.length == 1 ? id.first : id
|
1909
1919
|
if Object.const_defined?('FriendlyId') && model.instance_variable_get(:@friendly_id_config)
|
1910
|
-
model.friendly.find(
|
1920
|
+
model.friendly.find(id_simplified)
|
1911
1921
|
else
|
1912
|
-
model.find(
|
1922
|
+
model.find(id_simplified)
|
1913
1923
|
end
|
1914
1924
|
end
|
1915
1925
|
end
|
@@ -2044,8 +2054,18 @@ end.class_exec do
|
|
2044
2054
|
load inflections
|
2045
2055
|
end
|
2046
2056
|
# Now the Brick initializer since there may be important schema things configured
|
2047
|
-
if File.exist?(brick_initializer = ::Rails.root.join('config/initializers/brick.rb'))
|
2057
|
+
if !::Brick.initializer_loaded && File.exist?(brick_initializer = ::Rails.root.join('config/initializers/brick.rb'))
|
2048
2058
|
::Brick.initializer_loaded = load brick_initializer
|
2059
|
+
|
2060
|
+
# After loading the initializer, add compatibility for ActiveStorage and ActionText if those haven't already been
|
2061
|
+
# defined. (Further JSON configuration for ActiveStorage metadata happens later in the after_initialize hook.)
|
2062
|
+
['ActiveStorage', 'ActionText'].each do |ar_extension|
|
2063
|
+
if Object.const_defined?(ar_extension) &&
|
2064
|
+
(extension = Object.const_get(ar_extension)).respond_to?(:table_name_prefix) &&
|
2065
|
+
!::Brick.config.table_name_prefixes.key?(as_tnp = extension.table_name_prefix)
|
2066
|
+
::Brick.config.table_name_prefixes[as_tnp] = ar_extension
|
2067
|
+
end
|
2068
|
+
end
|
2049
2069
|
end
|
2050
2070
|
# Load the initializer for the Apartment gem a little early so that if .excluded_models and
|
2051
2071
|
# .default_schema are specified then we can work with non-tenanted models more appropriately
|
@@ -188,6 +188,17 @@ function linkSchemas() {
|
|
188
188
|
(app.config.assets.paths ||= []) << assets_path
|
189
189
|
end
|
190
190
|
|
191
|
+
# Treat ActiveStorage::Blob metadata as JSON
|
192
|
+
if ::Brick.config.table_name_prefixes.fetch('active_storage_', nil) == 'ActiveStorage' &&
|
193
|
+
ActiveStorage.const_defined?('Blob')
|
194
|
+
unless (md = (::Brick.config.model_descrips ||= {})).key?('ActiveStorage::Blob')
|
195
|
+
md['ActiveStorage::Blob'] = '[filename]'
|
196
|
+
end
|
197
|
+
unless (asbm = (::Brick.config.json_columns['active_storage_blobs'] ||= [])).include?('metadata')
|
198
|
+
asbm << 'metadata'
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
191
202
|
# Smarten up Avo so it recognises Brick's querystring option for Apartment multi-tenancy
|
192
203
|
if Object.const_defined?('Avo') && ::Avo.respond_to?(:railtie_namespace)
|
193
204
|
module ::Avo
|
@@ -586,7 +597,11 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
586
597
|
return possible_template
|
587
598
|
end
|
588
599
|
rescue StandardError => e
|
589
|
-
|
600
|
+
# Search through the routes to confirm that something might match (Devise stuff for instance, which has its own view templates),
|
601
|
+
# and bubble the same exception (probably an ActionView::MissingTemplate) if a legitimate option is found.
|
602
|
+
raise if ::Rails.application.routes.set.find { |x| args[1].include?(x.defaults[:controller]) && args[0] == x.defaults[:action] }
|
603
|
+
|
604
|
+
find_template_err = e
|
590
605
|
end
|
591
606
|
# Used to also have: ActionView.version < ::Gem::Version.new('5.0') &&
|
592
607
|
model_name = set_brick_model(args, @_brick_req_params)&.name
|
@@ -646,7 +661,7 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
646
661
|
(hm_fk_name.is_a?(String) && hm_fk_name.include?('.')) # HMT? (Could do a better check for this)
|
647
662
|
predicates = path_keys(hm_assoc, hm_fk_name, pk).map do |k, v|
|
648
663
|
if v == '[sti_type]'
|
649
|
-
"'#{k}': @#{obj_name}.#{hm_assoc.active_record.inheritance_column}"
|
664
|
+
"'#{k}': (@#{obj_name}.#{hm_assoc.active_record.inheritance_column}).constantize.base_class.name"
|
650
665
|
else
|
651
666
|
v.is_a?(String) ? "'#{k}': '#{v}'" : "'#{k}': @#{obj_name}.#{v}"
|
652
667
|
end
|
@@ -1551,8 +1566,12 @@ end
|
|
1551
1566
|
<head>
|
1552
1567
|
#{css}
|
1553
1568
|
<title><%=
|
1554
|
-
model = (obj = @#{obj_name})&.class
|
1555
|
-
|
1569
|
+
base_model = (model = (obj = @#{obj_name})&.class).base_class
|
1570
|
+
see_all_path = send(\"#\{base_model._brick_index}_path\")
|
1571
|
+
if obj.respond_to?(:#{inh_col = @_brick_model.inheritance_column}) &&
|
1572
|
+
(model_name = @#{obj_name}.#{inh_col}) != base_model.name
|
1573
|
+
see_all_path << \"?#{inh_col}=#\{model_name}\"
|
1574
|
+
end
|
1556
1575
|
page_title = (\"#\{model_name ||= model.name}: #\{obj&.brick_descrip || controller_name}\")
|
1557
1576
|
%></title>
|
1558
1577
|
</head>
|
@@ -1596,7 +1615,7 @@ end
|
|
1596
1615
|
if (description = (relation = Brick.relations[tbl_name = #{model_name}.table_name])&.fetch(:description, nil)) %><%=
|
1597
1616
|
description %><br><%
|
1598
1617
|
end
|
1599
|
-
%><%= link_to
|
1618
|
+
%><%= link_to \"(See all #\{model_name.pluralize})\", see_all_path %>
|
1600
1619
|
#{erd_markup}
|
1601
1620
|
<% if obj
|
1602
1621
|
# path_options = [obj.#{pk}]
|
@@ -1612,11 +1631,11 @@ end
|
|
1612
1631
|
<%= form_for(obj.becomes(#{model_name}), options) do |f| %>
|
1613
1632
|
<table class=\"shadow\">
|
1614
1633
|
<% has_fields = false
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
<% next if (#{(pk || []).inspect}.include?(k) && !bts.key?(k)) ||
|
1634
|
+
@#{obj_name}.attributes.each do |k, val|
|
1635
|
+
next if !(col = #{model_name}.columns_hash[k]) ||
|
1636
|
+
(#{(pk || []).inspect}.include?(k) && !bts.key?(k)) ||
|
1619
1637
|
::Brick.config.metadata_columns.include?(k) %>
|
1638
|
+
<tr>
|
1620
1639
|
<th class=\"show-field\"<%= \" title=\\\"#\{col.comment}\\\"\".html_safe if col.respond_to?(:comment) && !col.comment.blank? %>>
|
1621
1640
|
<% has_fields = true
|
1622
1641
|
if (bt = bts[k])
|
@@ -1680,9 +1699,13 @@ end
|
|
1680
1699
|
if is_bcrypt?(val) # || .readonly?
|
1681
1700
|
is_revert = false %>
|
1682
1701
|
<%= hide_bcrypt(val, nil, 1000) %>
|
1683
|
-
<% elsif col_type == :string
|
1684
|
-
|
1685
|
-
|
1702
|
+
<% elsif col_type == :string
|
1703
|
+
if model.respond_to?(:enumerized_attributes) && (opts = model.enumerized_attributes[k]&.options).present? %>
|
1704
|
+
<%= f.select(k.to_sym, [[\"(No #\{k} chosen)\", '^^^brick_NULL^^^']] + opts, { value: val || '^^^brick_NULL^^^' }, html_options) %><%
|
1705
|
+
else %>
|
1706
|
+
<%= f.text_field(k.to_sym, html_options) %><%
|
1707
|
+
end
|
1708
|
+
else
|
1686
1709
|
is_includes_text = true %>
|
1687
1710
|
<%= f.hidden_field(k.to_sym, html_options) %>
|
1688
1711
|
<trix-editor input=\"<%= f.field_id(k) %>\"></trix-editor>
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -1694,6 +1694,29 @@ if Gem::Specification.all_names.any? { |g| g.start_with?('ransack-') }
|
|
1694
1694
|
end
|
1695
1695
|
end
|
1696
1696
|
|
1697
|
+
# Patch Enumerize so that #becomes works when an STI subclass is becoming a base class
|
1698
|
+
# which does not include Enumerize.
|
1699
|
+
# (See https://github.com/brainspec/enumerize/issues/426)
|
1700
|
+
if Object.const_defined?('Enumerize') && Enumerize.const_defined?('ActiveRecordSupport')
|
1701
|
+
Enumerize::ActiveRecordSupport::InstanceMethods.class_exec do
|
1702
|
+
def becomes(klass)
|
1703
|
+
became = super
|
1704
|
+
klass = self.class unless klass.respond_to?(:enumerized_attributes)
|
1705
|
+
klass.enumerized_attributes.each do |attr|
|
1706
|
+
begin
|
1707
|
+
if became.respond_to?(setter = "#{attr.name}=")
|
1708
|
+
became.send(setter, send(attr.name))
|
1709
|
+
end
|
1710
|
+
rescue ActiveModel::MissingAttributeError
|
1711
|
+
rescue ActiveRecord::SerializationTypeMismatch
|
1712
|
+
became.send(setter, send(attr.name).to_ary)
|
1713
|
+
end
|
1714
|
+
end
|
1715
|
+
became
|
1716
|
+
end
|
1717
|
+
end
|
1718
|
+
end
|
1719
|
+
|
1697
1720
|
# Keyword arguments updates for Rails <= 5.2.x and Ruby >= 3.0
|
1698
1721
|
if ActiveRecord.version < ::Gem::Version.new('6.0') && ruby_version >= ::Gem::Version.new('3.0')
|
1699
1722
|
admsm = ActionDispatch::MiddlewareStack::Middleware
|
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.
|
4
|
+
version: 1.0.123
|
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-03-
|
11
|
+
date: 2023-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|