brick 1.0.51 → 1.0.52
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 +56 -27
- data/lib/brick/frameworks/rails/engine.rb +63 -53
- data/lib/brick/version_number.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: e3d0b398d1d3926fa3e59281c976fe2f7a54bfc16de4f99683928ce71d7ace97
|
4
|
+
data.tar.gz: 344c0de3e8691583e9a940ee451ad29015d46b0cbc55756d3b36e10d9ce27edb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0cff4e30c30d33dd13bd5a6a4a888d52e0552fc692369c42a53846da00e9ce677ab48ba840ef1396728d339984e5f7ff35d9ce33ea60f8421b9fa19edc14575
|
7
|
+
data.tar.gz: 5971fcc802dd1732f71d3bcd015e4b616f7775028a10205c7e4b9b1fa41d13c0318f581c966c223e9a0661b8b9fa52e1197ae78c007144e93ec96de61b084663
|
data/lib/brick/extensions.rb
CHANGED
@@ -1124,9 +1124,7 @@ class Object
|
|
1124
1124
|
is_pk_string = nil
|
1125
1125
|
if (pk_col = model&.primary_key)
|
1126
1126
|
code << " def show\n"
|
1127
|
-
code <<
|
1128
|
-
id = id.first if id.is_a?(Array) && id.length == 1
|
1129
|
-
@#{singular_table_name} = #{model.name}.find(id)\n")
|
1127
|
+
code << " #{find_by_name = "find_#{singular_table_name}"}\n"
|
1130
1128
|
code << " end\n"
|
1131
1129
|
self.define_method :show do
|
1132
1130
|
::Brick.set_db_schema(params)
|
@@ -1137,35 +1135,47 @@ class Object
|
|
1137
1135
|
params[:id]&.split(/[\/,_]/)
|
1138
1136
|
end
|
1139
1137
|
id = id.first if id.is_a?(Array) && id.length == 1
|
1140
|
-
instance_variable_set("@#{singular_table_name}".to_sym,
|
1138
|
+
instance_variable_set("@#{singular_table_name}".to_sym, find_obj)
|
1141
1139
|
end
|
1142
1140
|
end
|
1143
1141
|
|
1144
1142
|
# By default, views get marked as read-only
|
1145
|
-
unless
|
1146
|
-
code << "
|
1143
|
+
# unless model.readonly # (relation = relations[model.table_name]).key?(:isView)
|
1144
|
+
code << " def new\n"
|
1145
|
+
code << " @#{singular_table_name} = #{model.name}.new\n"
|
1146
|
+
code << " end\n"
|
1147
|
+
self.define_method :new do
|
1148
|
+
::Brick.set_db_schema(params)
|
1149
|
+
instance_variable_set("@#{singular_table_name}".to_sym, model.new)
|
1150
|
+
end
|
1151
|
+
|
1152
|
+
params_name_sym = (params_name = "#{singular_table_name}_params").to_sym
|
1153
|
+
|
1154
|
+
code << " def create\n"
|
1155
|
+
code << " @#{singular_table_name} = #{model.name}.create(#{params_name})\n"
|
1156
|
+
code << " end\n"
|
1157
|
+
self.define_method :create do
|
1158
|
+
::Brick.set_db_schema(params)
|
1159
|
+
instance_variable_set("@#{singular_table_name}".to_sym,
|
1160
|
+
model.send(:create, send(params_name_sym)))
|
1161
|
+
end
|
1147
1162
|
|
1148
|
-
if
|
1163
|
+
if pk_col
|
1149
1164
|
# if (schema = ::Brick.config.schema_behavior[:multitenant]&.fetch(:schema_to_analyse, nil)) && ::Brick.db_schemas&.include?(schema)
|
1150
1165
|
# ActiveRecord::Base.execute_sql("SET SEARCH_PATH = ?;", schema)
|
1151
1166
|
# end
|
1152
1167
|
|
1153
1168
|
is_need_params = true
|
1154
|
-
# code << " # (Define :destroy)\n"
|
1155
1169
|
code << " def edit\n"
|
1156
|
-
code <<
|
1170
|
+
code << " #{find_by_name}\n"
|
1157
1171
|
code << " end\n"
|
1158
1172
|
self.define_method :edit do
|
1159
1173
|
::Brick.set_db_schema(params)
|
1160
|
-
|
1161
|
-
id = id.first if id.is_a?(Array) && id.length == 1
|
1162
|
-
instance_variable_set("@#{singular_table_name}".to_sym, model.find(id))
|
1174
|
+
instance_variable_set("@#{singular_table_name}".to_sym, find_obj)
|
1163
1175
|
end
|
1164
1176
|
|
1165
1177
|
code << " def update\n"
|
1166
|
-
code <<
|
1167
|
-
params_name = "#{singular_table_name}_params"
|
1168
|
-
code << " @#{singular_table_name}.update(#{params_name})\n"
|
1178
|
+
code << " #{find_by_name}.update(#{params_name})\n"
|
1169
1179
|
code << " end\n"
|
1170
1180
|
self.define_method :update do
|
1171
1181
|
::Brick.set_db_schema(params)
|
@@ -1184,31 +1194,50 @@ class Object
|
|
1184
1194
|
# return
|
1185
1195
|
end
|
1186
1196
|
|
1197
|
+
instance_variable_set("@#{singular_table_name}".to_sym, (obj = find_obj))
|
1198
|
+
obj.send(:update, send(params_name_sym))
|
1199
|
+
end
|
1200
|
+
|
1201
|
+
code << " def destroy\n"
|
1202
|
+
code << " #{find_by_name}.destroy\n"
|
1203
|
+
code << " end\n"
|
1204
|
+
self.define_method :destroy do
|
1205
|
+
::Brick.set_db_schema(params)
|
1206
|
+
instance_variable_set("@#{singular_table_name}".to_sym, find_obj.send(:destroy))
|
1207
|
+
end
|
1208
|
+
end
|
1209
|
+
|
1210
|
+
code << "private\n" if pk_col || is_need_params
|
1211
|
+
|
1212
|
+
if pk_col
|
1213
|
+
code << " def find_#{singular_table_name}
|
1214
|
+
id = params[:id]&.split(/[\\/,_]/)
|
1215
|
+
@#{singular_table_name} = #{model.name}.find(id.is_a?(Array) && id.length == 1 ? id.first : id)
|
1216
|
+
end\n"
|
1217
|
+
self.define_method :find_obj do
|
1187
1218
|
id = is_pk_string ? params[:id] : params[:id]&.split(/[\/,_]/)
|
1188
|
-
|
1189
|
-
instance_variable_set("@#{singular_table_name}".to_sym, (obj = model.find(id)))
|
1190
|
-
obj = obj.first if obj.is_a?(Array)
|
1191
|
-
obj.send(:update, send(params_name = params_name.to_sym))
|
1219
|
+
model.find(id.is_a?(Array) && id.length == 1 ? id.first : id)
|
1192
1220
|
end
|
1193
1221
|
end
|
1194
1222
|
|
1195
1223
|
if is_need_params
|
1196
|
-
code << "private\n"
|
1197
1224
|
code << " def #{params_name}\n"
|
1198
|
-
permits = model.columns_hash.keys.map
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1225
|
+
permits = model.columns_hash.keys.map(&:to_sym)
|
1226
|
+
permits_txt = permits.map(&:inspect) +
|
1227
|
+
model.reflect_on_all_associations.select { |assoc| assoc.macro == :has_many && assoc.options[:through] }.map do |assoc|
|
1228
|
+
permits << { "#{assoc.name.to_s.singularize}_ids".to_sym => [] }
|
1229
|
+
"#{assoc.name.to_s.singularize}_ids: []"
|
1230
|
+
end
|
1202
1231
|
code << " params.require(:#{require_name = model.name.underscore.tr('/', '_')
|
1203
|
-
}).permit(#{
|
1232
|
+
}).permit(#{permits_txt.join(', ')})\n"
|
1204
1233
|
code << " end\n"
|
1205
1234
|
self.define_method(params_name) do
|
1206
|
-
params.require(require_name.to_sym).permit(
|
1235
|
+
params.require(require_name.to_sym).permit(permits)
|
1207
1236
|
end
|
1208
1237
|
private params_name
|
1209
1238
|
# Get column names for params from relations[model.table_name][:cols].keys
|
1210
1239
|
end
|
1211
|
-
end
|
1240
|
+
# end
|
1212
1241
|
code << "end # #{namespace_name}#{class_name}\n\n"
|
1213
1242
|
end # class definition
|
1214
1243
|
[built_controller, code]
|
@@ -133,25 +133,21 @@ module Brick
|
|
133
133
|
case args.first
|
134
134
|
when 'index'
|
135
135
|
hms_columns << if hm_assoc.macro == :has_many
|
136
|
-
set_ct = if skip_klass_hms.key?(assoc_name.to_sym)
|
137
|
-
'nil'
|
138
|
-
else
|
139
|
-
# Postgres column names are limited to 63 characters
|
140
|
-
attrib_name = "_br_#{assoc_name}_ct"[0..62]
|
141
|
-
"#{obj_name}.#{attrib_name} || 0"
|
142
|
-
end
|
143
136
|
if hm_fk_name
|
144
|
-
|
145
|
-
|
137
|
+
set_ct = if skip_klass_hms.key?(assoc_name.to_sym)
|
138
|
+
'nil'
|
139
|
+
else
|
140
|
+
# Postgres column names are limited to 63 characters
|
141
|
+
attrib_name = "_br_#{assoc_name}_ct"[0..62]
|
142
|
+
"#{obj_name}.#{attrib_name} || 0"
|
143
|
+
end
|
144
|
+
"#{hm_assoc.name}: [#{assoc_name.inspect}, #{set_ct}, #{path_keys(hm_assoc, hm_fk_name, obj_name, pk)}]"
|
146
145
|
else # %%% Would be able to remove this when multiple foreign keys to same destination becomes bulletproof
|
147
|
-
"#{assoc_name}
|
146
|
+
"#{hm_assoc.name}: [#{assoc_name.inspect}]"
|
148
147
|
end
|
149
148
|
else # has_one
|
150
149
|
# 0..62 because Postgres column names are limited to 63 characters
|
151
|
-
"
|
152
|
-
ho_txt = ho_class.brick_descrip(#{obj_name}, descrips[0..-2].map { |id| #{obj_name}.send(id.last[0..62]) }, (ho_id_col = descrips.last))
|
153
|
-
ho_id = ho_id_col.map { |id_col| #{obj_name}.send(id_col.to_sym) }
|
154
|
-
ho_id&.first ? link_to(ho_txt, send(\"#\{ho_class.base_class.name.underscore.tr('/', '_')\}_path\".to_sym, ho_id)) : ho_txt %>\n"
|
150
|
+
"#{hm_assoc.name}: [#{assoc_name.inspect}, nil, #{path_keys(hm_assoc, hm_fk_name, obj_name, pk)}]"
|
155
151
|
end
|
156
152
|
when 'show', 'update'
|
157
153
|
hm_stuff << if hm_fk_name
|
@@ -285,8 +281,8 @@ input+svg.revert {
|
|
285
281
|
color: #FFF;
|
286
282
|
}
|
287
283
|
</style>
|
288
|
-
<% is_includes_dates = nil
|
289
284
|
|
285
|
+
<% is_includes_dates = nil
|
290
286
|
def is_bcrypt?(val)
|
291
287
|
val.is_a?(String) && val.length == 60 && val.start_with?('$2a$')
|
292
288
|
end
|
@@ -555,46 +551,46 @@ if (headerTop) {
|
|
555
551
|
<br>
|
556
552
|
<table id=\"headerTop\">
|
557
553
|
<table id=\"#{table_name}\">
|
558
|
-
<thead><tr>#{"<th x-order=\"#{pk.join(',')}\"></th>" if pk.present?}
|
554
|
+
<thead><tr>#{"<th x-order=\"#{pk.join(',')}\"></th>" if pk.present?}<%=
|
559
555
|
col_order = []
|
560
|
-
@#{table_name}.columns.each do |col|
|
561
|
-
next if (#{(pk || []).inspect}.include?(col_name = col.name) && col.type == :integer && !bts.key?(col_name)) ||
|
562
|
-
::Brick.config.metadata_columns.include?(col_name) || poly_cols.include?(col_name)
|
563
|
-
|
564
|
-
col_order << col_name
|
565
|
-
%><th<%= \" title=\\\"#\{col.comment}\\\"\".html_safe if col.respond_to?(:comment) && !col.comment.blank? %><%
|
566
|
-
if (bt = bts[col_name]) %>
|
567
|
-
<%= \" x-order=\\\"#\{bt.first}\\\"\".html_safe unless bt[2] # Allow sorting any BT except polymorphics
|
568
|
-
%>>BT <%
|
569
|
-
bt[1].each do |bt_pair| %><%=
|
570
|
-
bt_pair.first.bt_link(bt.first) %> <%
|
571
|
-
end %><%
|
572
|
-
else %><%= \" x-order=\\\"#\{col_name}\\\"\".html_safe if true # Currently we always allow click to sort
|
573
|
-
%>><%= col_name %><%
|
574
|
-
end
|
575
|
-
%></th><%
|
576
|
-
end
|
577
556
|
# Consider getting the name from the association -- h.first.name -- if a more \"friendly\" alias should be used for a screwy table name
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
557
|
+
hms_hdrs = {#{hms_headers.map do |hm|
|
558
|
+
"#{hm.first.name}: [#{hm.first.name.inspect}, #{(hm.first.options[:through] && !hm.first.through_reflection).inspect}, #{hm.first.klass.name}, #{hm[1].inspect}, #{hm[2].inspect}]"
|
559
|
+
end.join(', ')}}
|
560
|
+
(@#{table_name}.columns + hms_hdrs.values).each_with_object(+'') do |col, s|
|
561
|
+
if col.is_a?(ActiveRecord::ConnectionAdapters::Column)
|
562
|
+
next if (#{(pk || []).inspect}.include?(col_name = col.name) && col.type == :integer && !bts.key?(col_name)) ||
|
563
|
+
::Brick.config.metadata_columns.include?(col_name) || poly_cols.include?(col_name)
|
564
|
+
|
565
|
+
col_order << col_name
|
566
|
+
s << if (bt = bts[col_name])
|
567
|
+
\"<th#\{' x-order=\"' + bt.first.to_s + '\"' unless bt[2]}>BT \" + # Allow sorting any BT except polymorphics
|
568
|
+
bt[1].map { |bt_pair| bt_pair.first.bt_link(bt.first) }.join(' ')
|
569
|
+
else
|
570
|
+
# Currently we always allow click to sort on non-BT columns
|
571
|
+
\"<th#\{' x-order=\"' + col_name + '\"' if true}>#\{col_name}\"
|
572
|
+
end + '</th>'
|
573
|
+
else # Currently we always allow click to sort on all HM columns (col is the hm array)
|
574
|
+
col_order << col.first # hm.name
|
575
|
+
s << \"<th#\{' x-order=\"' + col.first.to_s + '\"' if true}>\"
|
576
|
+
s << if col[1]
|
577
|
+
\"#\{col[3]} #\{col[4]}\" # %%% Would be able to remove this when multiple foreign keys to same destination becomes bulletproof
|
578
|
+
else
|
579
|
+
\"#\{col[3]} #\{link_to(col[4], send(\"#\{col[2].name.underscore.tr('/', '_').pluralize}_path\"))}\"
|
580
|
+
end + '</th>'
|
581
|
+
end
|
582
|
+
end.html_safe
|
583
|
+
%></tr></thead>
|
589
584
|
<tbody>
|
590
|
-
<% @#{table_name}.each do |#{obj_name}|
|
585
|
+
<% @#{table_name}.each do |#{obj_name}|
|
586
|
+
hms_cols = {#{hms_columns.join(', ')}} %>
|
591
587
|
<tr>#{"
|
592
588
|
<td><%= link_to '⇛', #{path_obj_name}_path(#{obj_pk}), { class: 'big-arrow' } %></td>" if obj_pk}
|
593
589
|
<% col_order.each do |col_name|
|
594
590
|
val = #{obj_name}.attributes[col_name] %>
|
595
|
-
<td
|
596
|
-
|
597
|
-
|
591
|
+
<td><%
|
592
|
+
if (bt = bts[col_name])
|
593
|
+
if bt[2] # Polymorphic?
|
598
594
|
bt_class = #{obj_name}.send(\"#\{bt.first\}_type\")
|
599
595
|
base_class = (::Brick.existing_stis[bt_class] || bt_class).constantize.base_class.name.underscore
|
600
596
|
poly_id = #{obj_name}.send(\"#\{bt.first\}_id\")
|
@@ -610,12 +606,26 @@ if (headerTop) {
|
|
610
606
|
<%= bt_id&.first ? link_to(bt_txt, send(\"#\{bt_class.base_class.name.underscore.tr('/', '_')\}_path\".to_sym, bt_id)) : bt_txt %>
|
611
607
|
<%#= Previously was: bt_obj = bt[1].first.first.find_by(bt[2] => val); link_to(bt_obj.brick_descrip, send(\"#\{bt[1].first.first.name.underscore\}_path\".to_sym, bt_obj.send(bt[1].first.first.primary_key.to_sym))) if bt_obj %>
|
612
608
|
<% end %>
|
613
|
-
<%
|
614
|
-
|
615
|
-
|
616
|
-
|
609
|
+
<% elsif (hms_col = hms_cols[col_name])
|
610
|
+
if hms_col.length == 1 %>
|
611
|
+
<%= hms_col.first %>
|
612
|
+
<% else
|
613
|
+
klass = (col = hms_hdrs[col_name])[2]
|
614
|
+
txt = if col[3] == 'HO'
|
615
|
+
descrips = @_brick_bt_descrip[col_name][klass]
|
616
|
+
ho_txt = klass.brick_descrip(#{obj_name}, descrips[0..-2].map { |id| #{obj_name}.send(id.last[0..62]) }, (ho_id_col = descrips.last))
|
617
|
+
ho_id = ho_id_col.map { |id_col| #{obj_name}.send(id_col.to_sym) }
|
618
|
+
ho_id&.first ? link_to(ho_txt, send(\"#\{klass.base_class.name.underscore.tr('/', '_')\}_path\".to_sym, ho_id)) : ho_txt
|
619
|
+
else
|
620
|
+
\"#\{hms_col[1] || 'View'\} #\{hms_col.first}\"
|
621
|
+
end %>
|
622
|
+
<%= link_to txt, send(\"#\{klass.name.underscore.tr('/', '_').pluralize}_path\".to_sym, hms_col[2]) unless hms_col[1]&.zero? %>
|
623
|
+
<% end %>
|
624
|
+
<% else
|
625
|
+
%><%= hide_bcrypt(val) %><%
|
626
|
+
end
|
627
|
+
%></td>
|
617
628
|
<% end %>
|
618
|
-
#{hms_columns.each_with_object(+'') { |hm_col, s| s << "<td>#{hm_col}</td>" }}
|
619
629
|
</tr>
|
620
630
|
<% end %>
|
621
631
|
</tbody>
|
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.52
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lorin Thwaits
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|