brick 1.0.194 → 1.0.196
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f5cff29063c150d35653274752bcda0ed44ce462563824f8b8a974dfacc8a81
|
4
|
+
data.tar.gz: 2d26e1e8a62b3a9e69c6a28a37e640fa5c5e0ced28a6527db4b68d2abdfc47f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 150e669bb088db49139311839cbca472317b371d24ab85bc096bea94221331c1f7122b8ed521a9c87691d9ded450d723954c2bd7d833b56fd07f248be5624339
|
7
|
+
data.tar.gz: cf000d92773ce9ec8db6a412e7f4fe642e6e9bc07db9412459931a69ebc7dff7fb41de9d1824d068b9c8568827cdbd1881073f3404b85eab1fc1c5670cd625ff
|
data/lib/brick/extensions.rb
CHANGED
@@ -436,13 +436,9 @@ module ActiveRecord
|
|
436
436
|
order_by = ordering&.each_with_object([]) do |ord_part, s| # %%% If a term is also used as an eqi-condition in the WHERE clause, it can be omitted from ORDER BY
|
437
437
|
case ord_part
|
438
438
|
when String
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
else
|
443
|
-
s << Arel.sql(_br_quoted_name(ord_part))
|
444
|
-
end
|
445
|
-
order_by_txt&.<<("Arel.sql(#{ord_expr.inspect})")
|
439
|
+
ord_expr = _br_quoted_name(ord_part.gsub('^^^', table_name))
|
440
|
+
s << Arel.sql(ord_expr)
|
441
|
+
order_by_txt&.<<(ord_expr.index('.') ? "Arel.sql(#{ord_expr.inspect})" : ord_expr)
|
446
442
|
else # Expecting only Symbol
|
447
443
|
ord_part = ord_part.to_s
|
448
444
|
if ord_part[0] == '-' # First char '-' means descending order
|
@@ -1860,14 +1856,14 @@ class Object
|
|
1860
1856
|
end
|
1861
1857
|
end
|
1862
1858
|
|
1863
|
-
def default_ordering(table_name, pk)
|
1859
|
+
def default_ordering(table_name, pk, omit_table_name = nil)
|
1864
1860
|
case (order_tbl = ::Brick.config.order[table_name]) && (order_default = order_tbl[:_brick_default])
|
1865
1861
|
when Array
|
1866
1862
|
order_default.map { |od_part| order_tbl[od_part] || od_part }
|
1867
1863
|
when Symbol
|
1868
1864
|
order_tbl[order_default] || order_default
|
1869
1865
|
else
|
1870
|
-
pk.map { |part| "#{table_name}
|
1866
|
+
pk.map { |part| "#{"#{table_name}." unless omit_table_name}#{part}"} # If it's not a custom ORDER BY, just use the key
|
1871
1867
|
end
|
1872
1868
|
end
|
1873
1869
|
|
@@ -1917,7 +1913,7 @@ class Object
|
|
1917
1913
|
cspd.select! { |val| val == "'self'" }
|
1918
1914
|
cspd << style_value
|
1919
1915
|
else
|
1920
|
-
cspd << "'sha256-
|
1916
|
+
cspd << "'sha256-0Vb7j3kDGE3oNfwMpRLClTSCUo/q74bvbt3p6kG/gkM='"
|
1921
1917
|
end
|
1922
1918
|
cspd << 'https://cdn.jsdelivr.net'
|
1923
1919
|
end
|
@@ -2035,6 +2031,7 @@ class Object
|
|
2035
2031
|
end
|
2036
2032
|
|
2037
2033
|
self.protect_from_forgery unless: -> { self.request.format.js? }
|
2034
|
+
plural_table_name = table_name.split('.').last.pluralize
|
2038
2035
|
unless is_avo
|
2039
2036
|
self.define_method :index do
|
2040
2037
|
request_ver = request.path.split('/')[-2]
|
@@ -2220,7 +2217,7 @@ class Object
|
|
2220
2217
|
end
|
2221
2218
|
end
|
2222
2219
|
ar_select = ar_relation.respond_to?(:_select!) ? ar_relation.dup._select!(*selects, *counts) : ar_relation.select(selects + counts)
|
2223
|
-
instance_variable_set("@#{
|
2220
|
+
instance_variable_set("@#{plural_table_name}".to_sym, ar_select)
|
2224
2221
|
table_name_no_schema = singular_table_name.pluralize
|
2225
2222
|
if namespace && (idx = lookup_context.prefixes.index(table_name_no_schema))
|
2226
2223
|
lookup_context.prefixes[idx] = "#{namespace.name.underscore}/#{lookup_context.prefixes[idx]}"
|
@@ -2259,10 +2256,10 @@ class Object
|
|
2259
2256
|
end
|
2260
2257
|
end
|
2261
2258
|
|
2262
|
-
_, order_by_txt = model._brick_calculate_ordering(default_ordering(table_name, pk)) if pk
|
2259
|
+
_, order_by_txt = model._brick_calculate_ordering(default_ordering(table_name, pk, true)) if pk
|
2263
2260
|
code << " def index\n"
|
2264
|
-
code << " @#{
|
2265
|
-
code << " @#{
|
2261
|
+
code << " @#{plural_table_name} = #{model.name}#{pk&.present? ? ".order(#{order_by_txt.join(', ')})" : '.all'}\n"
|
2262
|
+
code << " @#{plural_table_name}.brick_select(params)\n"
|
2266
2263
|
code << " end\n"
|
2267
2264
|
|
2268
2265
|
is_pk_string = nil
|
@@ -2562,12 +2559,8 @@ class Object
|
|
2562
2559
|
assoc_name = assoc_parts.join('.')
|
2563
2560
|
else
|
2564
2561
|
class_name_parts = ::Brick.namify(hm_assoc[:inverse_table], :underscore).split('.')
|
2565
|
-
|
2566
|
-
class_name_parts[last_idx] = class_name_parts[last_idx].singularize
|
2567
|
-
real_name = class_name_parts.map(&:camelize).join('::')
|
2568
|
-
needs_class = (real_name != hm_assoc[:inverse_table].camelize)
|
2562
|
+
needs_class = assoc_name.singularize.camelize != class_name_parts.last.singularize.camelize
|
2569
2563
|
end
|
2570
|
-
# hm_assoc[:assoc_name] = assoc_name
|
2571
2564
|
[assoc_name, needs_class]
|
2572
2565
|
end
|
2573
2566
|
# Already have the HM class around?
|
@@ -2616,7 +2609,7 @@ end.class_exec do
|
|
2616
2609
|
# https://discuss.rubyonrails.org/t/failed-write-transaction-upgrades-in-sqlite3/81480/2
|
2617
2610
|
if ActiveRecord::Base.connection.adapter_name == 'SQLite'
|
2618
2611
|
arca = ::ActiveRecord::ConnectionAdapters
|
2619
|
-
db_statements = arca::SQLite3::DatabaseStatements
|
2612
|
+
db_statements = arca::SQLite3.const_defined?('DatabaseStatements') ? arca::SQLite3::DatabaseStatements : arca::SQLite3::SchemaStatements
|
2620
2613
|
# Rails 7.1 and later
|
2621
2614
|
if arca::AbstractAdapter.private_instance_methods.include?(:with_raw_connection)
|
2622
2615
|
db_statements.define_method(:begin_db_transaction) do
|
@@ -3084,7 +3077,7 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
3084
3077
|
INNER JOIN pg_class child ON pg_inherits.inhrelid = child.oid
|
3085
3078
|
INNER JOIN pg_catalog.pg_namespace n ON n.oid = parent.relnamespace#{
|
3086
3079
|
if schema
|
3087
|
-
params
|
3080
|
+
params << schema
|
3088
3081
|
"
|
3089
3082
|
WHERE n.nspname = COALESCE(?, 'public')"
|
3090
3083
|
end}
|
@@ -3099,7 +3092,7 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
3099
3092
|
FROM pg_class
|
3100
3093
|
INNER JOIN pg_catalog.pg_namespace n ON n.oid = pg_class.relnamespace#{
|
3101
3094
|
if schema
|
3102
|
-
params
|
3095
|
+
params << schema
|
3103
3096
|
"
|
3104
3097
|
WHERE n.nspname = COALESCE(?, 'public')"
|
3105
3098
|
end}
|
@@ -940,7 +940,11 @@ tr th a {
|
|
940
940
|
.add-hm-related {
|
941
941
|
float: right;
|
942
942
|
}
|
943
|
-
|
943
|
+
#tblAddCol {
|
944
|
+
position: relative;
|
945
|
+
z-index: 2;
|
946
|
+
border: 2px solid blue;
|
947
|
+
}
|
944
948
|
tr th, tr td {
|
945
949
|
padding: 0.2em 0.5em;
|
946
950
|
}
|
@@ -998,10 +1002,20 @@ a.big-arrow {
|
|
998
1002
|
.right {
|
999
1003
|
text-align: right;
|
1000
1004
|
}
|
1005
|
+
.paddingBottomZero {
|
1006
|
+
padding-bottom: 0px;
|
1007
|
+
}
|
1008
|
+
.paddingTopZero {
|
1009
|
+
padding-top: 0px;
|
1010
|
+
}
|
1001
1011
|
.orphan {
|
1002
1012
|
color: red;
|
1003
1013
|
white-space: nowrap;
|
1004
1014
|
}
|
1015
|
+
.thumbImg {
|
1016
|
+
max-width: 96px;
|
1017
|
+
max-height: 96px;
|
1018
|
+
}
|
1005
1019
|
.danger {
|
1006
1020
|
background-color: red;
|
1007
1021
|
color: white;
|
@@ -1189,18 +1203,18 @@ erDiagram
|
|
1189
1203
|
# Make into a server control with a javascript snippet
|
1190
1204
|
# Have post back go to a common "brick_schema" endpoint, this one for add_column
|
1191
1205
|
"
|
1192
|
-
<table
|
1206
|
+
<table id=\"tblAddCol\"><tr>
|
1193
1207
|
<td rowspan=\"2\">Add<br>Column</td>
|
1194
|
-
<td
|
1208
|
+
<td class=\"paddingBottomZero\">Type</td><td class=\"paddingBottomZero\">Name</td>
|
1195
1209
|
<td rowspan=\"2\"><input type=\"button\" id=\"btnAddCol\" value=\"+\"></td>
|
1196
|
-
</tr><tr><td
|
1210
|
+
</tr><tr><td class=\"paddingTopZero\">
|
1197
1211
|
<select id=\"ddlColType\">
|
1198
1212
|
<option value=\"string\">String</option>
|
1199
1213
|
<option value=\"text\">Text</option>
|
1200
1214
|
<option value=\"integer\">Integer</option>
|
1201
1215
|
<option value=\"bool\">Boolean</option>
|
1202
1216
|
</select></td>
|
1203
|
-
<td
|
1217
|
+
<td class=\"paddingTopZero\"><input id=\"txtColName\"></td>
|
1204
1218
|
</tr></table>
|
1205
1219
|
<script>
|
1206
1220
|
var btnAddCol = document.getElementById(\"btnAddCol\");
|
@@ -1376,7 +1390,7 @@ end %>#{"
|
|
1376
1390
|
end
|
1377
1391
|
\"<tr><td colspan=\\\"#\{td_count}\\\">Children: #\{child_links.join(' ')}</tr>\".html_safe
|
1378
1392
|
end
|
1379
|
-
%><%= if (page_num = @#{table_name}._brick_page_num)
|
1393
|
+
%><%= if (page_num = @#{res_name = table_name.pluralize}._brick_page_num)
|
1380
1394
|
\"<tr><td colspan=\\\"#\{td_count}\\\">Page #\{page_num}</td></tr>\".html_safe
|
1381
1395
|
end %></table>#{template_link}<%
|
1382
1396
|
if description.present? %><span class=\"__brick\"><%=
|
@@ -1418,19 +1432,19 @@ end
|
|
1418
1432
|
|
1419
1433
|
<%= # Consider getting the name from the association -- hm.first.name -- if a more \"friendly\" alias should be used for a screwy table name
|
1420
1434
|
# If the resource is missing, has the user simply created an inappropriately pluralised name for a table?
|
1421
|
-
@#{
|
1435
|
+
@#{res_name} ||= if (dym_list = instance_variables.reject do |entry|
|
1422
1436
|
entry.to_s.start_with?('@_') ||
|
1423
1437
|
['@cache_hit', '@marked_for_same_origin_verification', '@view_renderer', '@view_flow', '@output_buffer', '@virtual_path'].include?(entry.to_s)
|
1424
1438
|
end).present?
|
1425
|
-
msg = +\"Can't find resource \\\"#{
|
1439
|
+
msg = +\"Can't find resource \\\"#{res_name}\\\".\"
|
1426
1440
|
# Can't be sure otherwise of what is up, so check DidYouMean and offer a suggestion.
|
1427
|
-
if (dym = DidYouMean::SpellChecker.new(dictionary: dym_list).correct('@#{
|
1441
|
+
if (dym = DidYouMean::SpellChecker.new(dictionary: dym_list).correct('@#{res_name}')).present?
|
1428
1442
|
msg << \"\nIf you meant \\\"#\{found_dym = dym.first[1..-1]}\\\" then to avoid this message add this entry into inflections.rb:\n\"
|
1429
1443
|
msg << \" inflect.irregular '#{obj_name}', '#\{found_dym}'\"
|
1430
1444
|
puts
|
1431
1445
|
puts \"WARNING: #\{msg}\"
|
1432
1446
|
puts
|
1433
|
-
@#{
|
1447
|
+
@#{res_name} = instance_variable_get(dym.first.to_sym)
|
1434
1448
|
else
|
1435
1449
|
raise ActiveRecord::RecordNotFound.new(msg)
|
1436
1450
|
end
|
@@ -1450,7 +1464,7 @@ end
|
|
1450
1464
|
# Rails.application.reloader.to_prepare do ... end
|
1451
1465
|
self.class.class_exec { include ::Brick::Rails::FormTags } unless respond_to?(:brick_grid)
|
1452
1466
|
# Write out the mega-grid
|
1453
|
-
brick_grid(@#{
|
1467
|
+
brick_grid(@#{res_name}, @_brick_sequence, @_brick_incl, @_brick_excl,
|
1454
1468
|
cols, bt_descrip: @_brick_bt_descrip, poly_cols: poly_cols, bts: bts, hms_keys: #{hms_keys.inspect}, hms_cols: {#{hms_columns.join(', ')}}) %>
|
1455
1469
|
|
1456
1470
|
#{"<hr><%= link_to(\"New #{new_path_name = "new_#{path_obj_name}_path"
|
@@ -1586,9 +1600,12 @@ end %>#{"
|
|
1586
1600
|
<table id=\"resourceName\"><td><h1><%= page_title %></h1></td>
|
1587
1601
|
<% rel = Brick.relations[#{model_name}.table_name]
|
1588
1602
|
if (in_app = rel.fetch(:existing, nil)&.fetch(:show, nil))
|
1589
|
-
|
1603
|
+
begin
|
1604
|
+
in_app = send(\"#\{in_app}_path\", #{pk.is_a?(String) ? "obj.#{pk}" : '[' + pk.map { |pk_part| "obj.#{pk_part}" }.join(', ') + ']' }) if in_app.is_a?(Symbol) %>
|
1590
1605
|
<td><%= link_to(::Brick::Rails::IN_APP.html_safe, in_app) %></td>
|
1591
|
-
<%
|
1606
|
+
<% rescue ActionController::UrlGenerationError
|
1607
|
+
end
|
1608
|
+
end
|
1592
1609
|
|
1593
1610
|
if Object.const_defined?('Avo') && ::Avo.respond_to?(:railtie_namespace) %>
|
1594
1611
|
<td><%= link_to_brick(
|
@@ -55,7 +55,10 @@ module Brick::Rails::FormBuilder
|
|
55
55
|
is_revert = false
|
56
56
|
out << ::Brick::Rails::FormBuilder.hide_bcrypt(val, nil, 1000)
|
57
57
|
elsif col_type == :string
|
58
|
-
if model.respond_to?(:
|
58
|
+
if model.respond_to?(:uploaders) && model.uploaders.key?(col.name&.to_sym) &&
|
59
|
+
(url = self.object.send(col.name)&.url) # Carrierwave image?
|
60
|
+
out << "<img src=\"#{url}\" title=\"#{val}\">"
|
61
|
+
elsif model.respond_to?(:enumerized_attributes) && (opts = (attr = model.enumerized_attributes[method])&.options).present?
|
59
62
|
enum_html_options = attr.kind_of?(Enumerize::Multiple) ? html_options.merge({ multiple: true, size: opts.length + 1 }) : html_options
|
60
63
|
out << self.select(method.to_sym, [["(No #{method} chosen)", '^^^brick_NULL^^^']] + opts, { value: val || '^^^brick_NULL^^^' }, enum_html_options)
|
61
64
|
else
|
@@ -149,9 +152,10 @@ module Brick::Rails::FormBuilder
|
|
149
152
|
else
|
150
153
|
if val.is_a?(String)
|
151
154
|
return ::Brick::Rails.display_binary(val) unless (val_utf8 = val.dup.force_encoding('UTF-8')).valid_encoding?
|
155
|
+
|
152
156
|
val = val_utf8.strip
|
153
157
|
return CGI.escapeHTML(val) if is_xml
|
154
|
-
|
158
|
+
|
155
159
|
if val.length > max_len
|
156
160
|
if val[0] == '<' # Seems to be HTML?
|
157
161
|
cur_len = 0
|
@@ -47,9 +47,12 @@ module Brick::Rails::FormTags
|
|
47
47
|
"
|
48
48
|
end
|
49
49
|
if rel && show_in_app_button != false && (in_app = rel.fetch(:existing, nil)&.fetch(:index, nil))
|
50
|
-
|
51
|
-
|
50
|
+
begin
|
51
|
+
in_app = send("#{in_app}_path") if in_app.is_a?(Symbol)
|
52
|
+
out << " <td title=\"Show in app\">#{link_to(::Brick::Rails::IN_APP.html_safe, in_app)}</td>
|
52
53
|
"
|
54
|
+
rescue ActionController::UrlGenerationError # Avoid snags like "No route matches {:action=>"index", :controller=>"categories/products"}, missing required keys: [:category_id]"
|
55
|
+
end
|
53
56
|
end
|
54
57
|
if show_avo_button != false && Object.const_defined?('Avo') && ::Avo.respond_to?(:railtie_namespace) && klass.name.exclude?('::')
|
55
58
|
out << "
|
@@ -229,6 +232,9 @@ module Brick::Rails::FormTags
|
|
229
232
|
# binding.pry if col.is_a?(Array)
|
230
233
|
out << if @_brick_monetized_attributes&.include?(col_name)
|
231
234
|
val ? Money.new(val.to_i).format : ''
|
235
|
+
elsif klass.respond_to?(:uploaders) && klass.uploaders.key?(col_name.to_sym) &&
|
236
|
+
(url = obj.send(col_name)&.url) # Carrierwave image?
|
237
|
+
"<img class=\"thumbImg\" src=\"#{url}\" title=\"#{val}\">"
|
232
238
|
else
|
233
239
|
lat_lng = if [:float, :decimal].include?(col.type) &&
|
234
240
|
(
|
data/lib/brick/version_number.rb
CHANGED
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.196
|
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-12-
|
11
|
+
date: 2023-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -284,7 +284,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
284
284
|
- !ruby/object:Gem::Version
|
285
285
|
version: 1.3.6
|
286
286
|
requirements: []
|
287
|
-
rubygems_version: 3.
|
287
|
+
rubygems_version: 3.1.6
|
288
288
|
signing_key:
|
289
289
|
specification_version: 4
|
290
290
|
summary: Create a Rails app from data alone
|