brick 1.0.132 → 1.0.133
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/config.rb +3 -1
- data/lib/brick/extensions.rb +21 -25
- data/lib/brick/frameworks/rails/engine.rb +36 -14
- data/lib/brick/frameworks/rails/form_tags.rb +6 -3
- data/lib/brick/version_number.rb +1 -1
- data/lib/generators/brick/models_generator.rb +1 -1
- 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: 6804b443d939d24da85968d5b75c4c0603c8880dcc5ab4d07b20be0a52e5a349
|
4
|
+
data.tar.gz: 17ed154ec5f8ec1f351a83120673e9354f892217da76957fdc49a31e663e9eba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b4e53fe24d3de942a7388453d6ee732b0263097b08cbed104d7499842ffaa4eb7239b1bdb81b7300d08df9a628b2a99aad74f47de1fd3579b1eefbf0382b18a
|
7
|
+
data.tar.gz: 3eb38e2a8f1e5c12493ff6e3a524d42157dcae2781d6d39f339d098b04b12d936989f3974977df589419ca04663a4c27f6b7425e09b9695817d9103fb7fd543f
|
data/lib/brick/config.rb
CHANGED
@@ -258,7 +258,9 @@ module Brick
|
|
258
258
|
else
|
259
259
|
# Custom STI type columns for models built from specific tables
|
260
260
|
(v.last.is_a?(Array) ? v.last : [v.last]).each do |table|
|
261
|
-
::Brick.relations
|
261
|
+
if (relation = ::Brick.relations.fetch(table, nil))
|
262
|
+
relation[:sti_col] = v.first
|
263
|
+
end
|
262
264
|
end
|
263
265
|
end
|
264
266
|
end
|
data/lib/brick/extensions.rb
CHANGED
@@ -44,9 +44,20 @@
|
|
44
44
|
|
45
45
|
module ActiveRecord
|
46
46
|
class Base
|
47
|
+
@_brick_inheriteds = {}
|
47
48
|
class << self
|
48
49
|
attr_reader :_brick_relation
|
49
50
|
|
51
|
+
def _brick_inheriteds
|
52
|
+
@_brick_inheriteds ||= ::ActiveRecord::Base.instance_variable_get(:@_brick_inheriteds)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Track the file(s) in which each model is defined
|
56
|
+
def inherited(model)
|
57
|
+
(_brick_inheriteds[model] ||= []) << caller.first.split(':')[0..1] unless caller.first.include?('/lib/brick/extensions.rb:')
|
58
|
+
super
|
59
|
+
end
|
60
|
+
|
50
61
|
def is_brick?
|
51
62
|
instance_variables.include?(:@_brick_built) && instance_variable_get(:@_brick_built)
|
52
63
|
end
|
@@ -2743,31 +2754,15 @@ module Brick
|
|
2743
2754
|
end
|
2744
2755
|
end
|
2745
2756
|
abstract_activerecord_bases = ::Brick.eager_load_classes(true)
|
2746
|
-
|
2747
|
-
|
2748
|
-
|
2749
|
-
|
2750
|
-
|
2751
|
-
|
2752
|
-
|
2753
|
-
end
|
2754
|
-
# For all non-commented lines, look for any that start with "class " and also "< ApplicationRecord"
|
2755
|
-
if line.lstrip.start_with?('class ') && (idx = line.index('class')) &&
|
2756
|
-
(model_name = line[idx + 5..-1].match(/[\s:]+([\w:]+)/)&.captures&.first)
|
2757
|
-
# Prefix model class name with module names, if any
|
2758
|
-
model_name = modules.map{|m| "#{m}::"}.join + model_name
|
2759
|
-
unless abstract_activerecord_bases.include?(model_name)
|
2760
|
-
klass = begin
|
2761
|
-
model_name.constantize
|
2762
|
-
rescue
|
2763
|
-
end
|
2764
|
-
s[model_name.underscore.tr('/', '.').pluralize] = [
|
2765
|
-
path.start_with?(rails_root) ? path[rails_root.length + 1..-1] : path,
|
2766
|
-
klass
|
2767
|
-
]
|
2768
|
-
end
|
2769
|
-
end
|
2757
|
+
rails_root = ::Rails.root.to_s
|
2758
|
+
models = ::Brick.relations.each_with_object({}) do |rel, s|
|
2759
|
+
begin
|
2760
|
+
if (model = rel.last[:class_name]&.constantize) &&
|
2761
|
+
(inh = ActiveRecord::Base._brick_inheriteds[model]&.join(':'))
|
2762
|
+
inh = inh[rails_root.length + 1..-1] if inh.start_with?(rails_root)
|
2763
|
+
s[rel.first] = [inh, model]
|
2770
2764
|
end
|
2765
|
+
rescue
|
2771
2766
|
end
|
2772
2767
|
end
|
2773
2768
|
::Brick.relations.map do |k, v|
|
@@ -2781,7 +2776,8 @@ module Brick
|
|
2781
2776
|
v[:class_name].constantize.table_name
|
2782
2777
|
rescue
|
2783
2778
|
end
|
2784
|
-
|
2779
|
+
model = model.first if model.is_a?(Array)
|
2780
|
+
[k, table_name || k, migrations&.fetch(res, nil), model]
|
2785
2781
|
end
|
2786
2782
|
end
|
2787
2783
|
|
@@ -61,9 +61,11 @@ module Brick
|
|
61
61
|
::Brick::Rails.display_binary(val)
|
62
62
|
else
|
63
63
|
if col_type
|
64
|
-
if lat_lng
|
64
|
+
if lat_lng && !(lat_lng.first.zero? && lat_lng.last.zero?)
|
65
65
|
# Create a link to this style of Google maps URL: https://www.google.com/maps/place/38.7071296+-121.2810649/@38.7071296,-121.2810649,12z
|
66
66
|
"<a href=\"https://www.google.com/maps/place/#{lat_lng.first}+#{lat_lng.last}/@#{lat_lng.first},#{lat_lng.last},12z\" target=\"blank\">#{val}</a>"
|
67
|
+
elsif val.is_a?(Numeric)
|
68
|
+
::ActiveSupport::NumberHelper.number_to_delimited(val, delimiter: ',')
|
67
69
|
else
|
68
70
|
::Brick::Rails::FormBuilder.hide_bcrypt(val, col_type == :xml)
|
69
71
|
end
|
@@ -922,6 +924,9 @@ a.big-arrow {
|
|
922
924
|
background-color: #C0C0C0;
|
923
925
|
text-align: center;
|
924
926
|
}
|
927
|
+
.right {
|
928
|
+
text-align: right;
|
929
|
+
}
|
925
930
|
.orphan {
|
926
931
|
color: red;
|
927
932
|
white-space: nowrap;
|
@@ -1110,6 +1115,14 @@ if (headerTop) {
|
|
1110
1115
|
setHeaderSizes();
|
1111
1116
|
}, true);
|
1112
1117
|
}
|
1118
|
+
// Cause descriptive text to use the same font as the resource
|
1119
|
+
var brickFontFamily = document.getElementById(\"resourceName\").computedStyleMap().get(\"font-family\");
|
1120
|
+
if (window.brickFontFamily) {
|
1121
|
+
[...document.getElementsByClassName(\"__brick\")].forEach(function (x){
|
1122
|
+
if (!x.style.fontFamily)
|
1123
|
+
x.style.fontFamily = brickFontFamily.toString();
|
1124
|
+
});
|
1125
|
+
}
|
1113
1126
|
</script>"
|
1114
1127
|
|
1115
1128
|
erd_markup = if @_brick_model
|
@@ -1354,8 +1367,8 @@ end
|
|
1354
1367
|
%><%= if (page_num = @#{table_name}._brick_page_num)
|
1355
1368
|
\"<tr><td colspan=\\\"#\{td_count}\\\">Page #\{page_num}</td></tr>\".html_safe
|
1356
1369
|
end %></table>#{template_link}<%
|
1357
|
-
if description.present?
|
1358
|
-
description
|
1370
|
+
if description.present? %><span class=\"__brick\"><%=
|
1371
|
+
description %></span><br><%
|
1359
1372
|
end
|
1360
1373
|
# FILTER PARAMETERS
|
1361
1374
|
if @_brick_params&.present? %>
|
@@ -1366,12 +1379,12 @@ end
|
|
1366
1379
|
if (destination_fk = Brick.relations[origin.table_name][:fks].values.find { |fk| fk[:fk] == key_parts.last }) &&
|
1367
1380
|
(objs = (destination = origin.reflect_on_association(destination_fk[:assoc_name])&.klass)&.find(id))
|
1368
1381
|
objs = [objs] unless objs.is_a?(Array) %>
|
1369
|
-
<h3>for <% objs.each do |obj| %><%=
|
1382
|
+
<h3 class=\"__brick\">for <% objs.each do |obj| %><%=
|
1370
1383
|
link_to \"#{"#\{obj.brick_descrip\} (#\{destination.name\})\""}, send(\"#\{destination._brick_index(:singular)\}_path\".to_sym, id)
|
1371
1384
|
%><% end %></h3><%
|
1372
1385
|
end
|
1373
1386
|
end %>
|
1374
|
-
(<%= link_to \"See all #\{model.base_class.name.split('::').last.pluralize}\", #{@_brick_model._brick_index}_path %>)
|
1387
|
+
<span class=\"__brick\">(<%= link_to \"See all #\{model.base_class.name.split('::').last.pluralize}\", #{@_brick_model._brick_index}_path %>)</span>
|
1375
1388
|
<% end
|
1376
1389
|
# COLUMN EXCLUSIONS
|
1377
1390
|
if @_brick_excl&.present? %>
|
@@ -1422,7 +1435,7 @@ end
|
|
1422
1435
|
cols, poly_cols, bts, #{hms_keys.inspect}, {#{hms_columns.join(', ')}}) %>
|
1423
1436
|
|
1424
1437
|
#{"<hr><%= link_to(\"New #{new_path_name = "new_#{path_obj_name}_path"
|
1425
|
-
obj_name}\", #{new_path_name}) if respond_to?(:#{new_path_name}) %>" unless @_brick_model.is_view?}
|
1438
|
+
obj_name}\", #{new_path_name}, { class: '__brick' }) if respond_to?(:#{new_path_name}) %>" unless @_brick_model.is_view?}
|
1426
1439
|
#{script}
|
1427
1440
|
</body>
|
1428
1441
|
</html>
|
@@ -1534,7 +1547,7 @@ end
|
|
1534
1547
|
<p style=\"color: green\"><%= notice if request.respond_to?(:flash) %></p>#{"
|
1535
1548
|
#{schema_options}" if schema_options}
|
1536
1549
|
<select id=\"tbl\">#{table_options}</select>
|
1537
|
-
<table><td><h1><%= page_title %></h1></td>
|
1550
|
+
<table id=\"resourceName\"><td><h1><%= page_title %></h1></td>
|
1538
1551
|
<% if Object.const_defined?('Avo') && ::Avo.respond_to?(:railtie_namespace) %>
|
1539
1552
|
<td><%= link_to_brick(
|
1540
1553
|
avo_svg,
|
@@ -1560,10 +1573,10 @@ end
|
|
1560
1573
|
end %>
|
1561
1574
|
</table>
|
1562
1575
|
<%
|
1563
|
-
if (description = (relation = Brick.relations[#{model_name}.table_name])&.fetch(:description, nil))
|
1564
|
-
description
|
1576
|
+
if (description = (relation = Brick.relations[#{model_name}.table_name])&.fetch(:description, nil)) %>
|
1577
|
+
<span class=\"__brick\"><%= description %></span><br><%
|
1565
1578
|
end
|
1566
|
-
%><%= link_to \"(See all #\{model_name.pluralize})\", see_all_path %>
|
1579
|
+
%><%= link_to \"(See all #\{model_name.pluralize})\", see_all_path, { class: '__brick' } %>
|
1567
1580
|
#{erd_markup}
|
1568
1581
|
<% if obj
|
1569
1582
|
# path_options = [obj.#{pk}]
|
@@ -1647,7 +1660,8 @@ end
|
|
1647
1660
|
#{unless args.first == 'new'
|
1648
1661
|
# Was: confirm_are_you_sure = ActionView.version < ::Gem::Version.new('7.0') ? "data: { confirm: 'Delete #\{model_name} -- Are you sure?' }" : "form: { data: { turbo_confirm: 'Delete #\{model_name} -- Are you sure?' } }"
|
1649
1662
|
confirm_are_you_sure = "data: { confirm: 'Delete #\{model_name} -- Are you sure?' }"
|
1650
|
-
|
1663
|
+
ret = +"<%= button_to(\"Delete #\{@#{obj_name}.brick_descrip}\", send(\"#\{#{model_name}._brick_index(:singular)}_path\".to_sym, @#{obj_name}), { method: 'delete', class: 'danger', #{confirm_are_you_sure} }) %>"
|
1664
|
+
hms_headers.each_with_object(ret) do |hm, s|
|
1651
1665
|
# %%% Would be able to remove this when multiple foreign keys to same destination becomes bulletproof
|
1652
1666
|
next if hm.first.options[:through] && !hm.first.through_reflection
|
1653
1667
|
|
@@ -1707,8 +1721,7 @@ end
|
|
1707
1721
|
else
|
1708
1722
|
s
|
1709
1723
|
end
|
1710
|
-
end
|
1711
|
-
"<%= button_to(\"Delete #\{@#{obj_name}.brick_descrip}\", send(\"#\{#{model_name}._brick_index(:singular)}_path\".to_sym, @#{obj_name}), { method: 'delete', class: 'danger', #{confirm_are_you_sure} }) %>"
|
1724
|
+
end
|
1712
1725
|
end}
|
1713
1726
|
<% end %>
|
1714
1727
|
#{script}
|
@@ -1793,7 +1806,8 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
|
|
1793
1806
|
|
1794
1807
|
mermaidCode = document.createElement(\"SCRIPT\");
|
1795
1808
|
mermaidCode.setAttribute(\"src\", \"https://cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js\");
|
1796
|
-
mermaidCode.addEventListener(\"load\",
|
1809
|
+
mermaidCode.addEventListener(\"load\", mermaidLoaded);
|
1810
|
+
function mermaidLoaded() {
|
1797
1811
|
mermaid.initialize({
|
1798
1812
|
startOnLoad: true,
|
1799
1813
|
securityLevel: \"loose\",
|
@@ -1826,6 +1840,14 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
|
|
1826
1840
|
window.history.pushState({}, '', changeout(location.href, '_brick_erd', null));
|
1827
1841
|
});
|
1828
1842
|
mermaidErd.appendChild(span);
|
1843
|
+
}
|
1844
|
+
// If there's an error with the CDN during load, revert to our local copy
|
1845
|
+
mermaidCode.addEventListener(\"error\", function (e) {
|
1846
|
+
console.warn(\"As we're unable to load Mermaid from\\n \" + e.srcElement.src + \" ,\\nnow reverting to copy from /assets.\");
|
1847
|
+
var mermaidCode2 = document.createElement(\"SCRIPT\");
|
1848
|
+
mermaidCode2.setAttribute(\"src\", \"/assets/mermaid.min.js\");
|
1849
|
+
mermaidCode2.addEventListener(\"load\", mermaidLoaded);
|
1850
|
+
e.srcElement.replaceWith(mermaidCode2);
|
1829
1851
|
});
|
1830
1852
|
document.body.appendChild(mermaidCode);
|
1831
1853
|
}
|
@@ -76,11 +76,14 @@ module Brick::Rails::FormTags
|
|
76
76
|
pk.map { |pk_part| obj.send(pk_part.to_sym) }), { class: 'big-arrow' })}</td>\n" if pk.present?
|
77
77
|
sequence.each do |col_name|
|
78
78
|
val = obj.attributes[col_name]
|
79
|
+
bt = bts[col_name]
|
79
80
|
out << '<td'
|
80
|
-
|
81
|
-
|
81
|
+
(classes ||= []) << 'dimmed' unless cols.key?(col_name) || (cust_col = cust_cols[col_name]) ||
|
82
|
+
(col_name.is_a?(Symbol) && bts.key?(col_name)) # HOT
|
83
|
+
(classes ||= []) << 'right' if val.is_a?(Numeric) && !bt
|
84
|
+
out << " class=\"#{classes.join(' ')}\"" if classes&.present?
|
82
85
|
out << '>'
|
83
|
-
if (bt
|
86
|
+
if (bt || composite_bt_names[col_name])
|
84
87
|
if bt[2] # Polymorphic?
|
85
88
|
if (poly_id = obj.send("#{bt.first}_id"))
|
86
89
|
# Was: obj.send("#{bt.first}_type")
|
data/lib/brick/version_number.rb
CHANGED
@@ -62,7 +62,7 @@ module Brick
|
|
62
62
|
dir = +"#{::Rails.root}/app"
|
63
63
|
path[0..-2].each do |path_part|
|
64
64
|
dir << "/#{path_part}"
|
65
|
-
Dir.mkdir(dir) unless Dir.
|
65
|
+
Dir.mkdir(dir) unless Dir.exist?(dir)
|
66
66
|
end
|
67
67
|
File.open("#{dir}/#{path.last}.rb", 'w') { |f| f.write code } unless code.blank?
|
68
68
|
end
|
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.133
|
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-04-
|
11
|
+
date: 2023-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|