brick 1.0.49 → 1.0.50
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/brick/extensions.rb +23 -12
- data/lib/brick/frameworks/rails/engine.rb +9 -7
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +3 -3
- 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: d5f5d009df0d4a7ce06a5dec8986d2664671e8b151f7493e5ce3f8f690ec7028
|
4
|
+
data.tar.gz: 974e86906775728e0ff0c7022cfbd87578b7c3013a8f9a5fe0db2243dcad9bf1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f652cf44f9d18eca35304d1660ed3967d39c60dff42bcc05043607fada17d427308b7052a4b474c71d8a65462f86970838771471b6f1dd7a89accabc31ddd27
|
7
|
+
data.tar.gz: 386030a8bd3c603264ed9f534e1188eb5710fe67777ffc9634a9c318e8bac4153d2716bffbf9c34a7ff63999c3af39b2fa6db3b324abc5093467a33b144b41b8
|
data/lib/brick/extensions.rb
CHANGED
@@ -221,13 +221,19 @@ module ActiveRecord
|
|
221
221
|
template
|
222
222
|
end
|
223
223
|
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
224
|
+
class << self
|
225
|
+
# belongs_to DSL descriptions
|
226
|
+
def _br_bt_descrip
|
227
|
+
@_br_bt_descrip ||= {}
|
228
|
+
end
|
229
|
+
# has_many count definitions
|
230
|
+
def _br_hm_counts
|
231
|
+
@_br_hm_counts ||= {}
|
232
|
+
end
|
233
|
+
# has_many :through associative tables
|
234
|
+
def _br_associatives
|
235
|
+
@_br_associatives ||= {}
|
236
|
+
end
|
231
237
|
end
|
232
238
|
|
233
239
|
# Search for BT, HM, and HMT DSL stuff
|
@@ -374,7 +380,7 @@ module ActiveRecord
|
|
374
380
|
|
375
381
|
case (ks = k.split('.')).length
|
376
382
|
when 1
|
377
|
-
next unless klass._brick_get_fks.include?(k)
|
383
|
+
next unless klass.column_names.any?(k) || klass._brick_get_fks.include?(k)
|
378
384
|
when 2
|
379
385
|
assoc_name = ks.first.to_sym
|
380
386
|
# Make sure it's a good association name and that the model has that column name
|
@@ -408,6 +414,7 @@ module ActiveRecord
|
|
408
414
|
chains = rel_dupe._brick_chains
|
409
415
|
id_for_tables = Hash.new { |h, k| h[k] = [] }
|
410
416
|
field_tbl_names = Hash.new { |h, k| h[k] = {} }
|
417
|
+
used_col_aliases = {} # Used to make sure there is not a name clash
|
411
418
|
bt_columns = klass._br_bt_descrip.each_with_object([]) do |v, s|
|
412
419
|
v.last.each do |k1, v1| # k1 is class, v1 is array of columns to snag
|
413
420
|
next if chains[k1].nil?
|
@@ -419,7 +426,12 @@ module ActiveRecord
|
|
419
426
|
|
420
427
|
# Postgres can not use DISTINCT with any columns that are XML, so for any of those just convert to text
|
421
428
|
is_xml = is_distinct && Brick.relations[sel_col.first.table_name]&.[](:cols)&.[](sel_col.last)&.first&.start_with?('xml')
|
422
|
-
|
429
|
+
# If it's not unique then also include the belongs_to association name before the column name
|
430
|
+
if used_col_aliases.key?(col_alias = "_brfk_#{v.first}__#{sel_col.last}")
|
431
|
+
col_alias = "_brfk_#{v.first}__#{v1[idx][-2..-1].map(&:to_s).join('__')}"
|
432
|
+
end
|
433
|
+
selects << "\"#{field_tbl_name}\".\"#{sel_col.last}\"#{'::text' if is_xml} AS \"#{col_alias}\""
|
434
|
+
used_col_aliases[col_alias] = nil
|
423
435
|
v1[idx] << col_alias
|
424
436
|
end
|
425
437
|
|
@@ -447,8 +459,7 @@ module ActiveRecord
|
|
447
459
|
klass._br_hm_counts.each do |k, hm|
|
448
460
|
associative = nil
|
449
461
|
count_column = if hm.options[:through]
|
450
|
-
fk_col = (associative =
|
451
|
-
hm.foreign_key if fk_col
|
462
|
+
hm.foreign_key if (fk_col = (associative = klass._br_associatives&.[](hm.name))&.foreign_key)
|
452
463
|
else
|
453
464
|
fk_col = hm.foreign_key
|
454
465
|
poly_type = hm.inverse_of.foreign_type if hm.options.key?(:as)
|
@@ -502,7 +513,7 @@ JOIN (SELECT #{selects.join(', ')}, COUNT(#{'DISTINCT ' if hm.options[:through]}
|
|
502
513
|
end
|
503
514
|
|
504
515
|
private
|
505
|
-
|
516
|
+
|
506
517
|
def shift_or_first(ary)
|
507
518
|
ary.length > 1 ? ary.shift : ary.first
|
508
519
|
end
|
@@ -104,7 +104,7 @@ module Brick
|
|
104
104
|
path_obj_name = model_name.underscore.tr('/', '_')
|
105
105
|
table_name = obj_name.pluralize
|
106
106
|
template_link = nil
|
107
|
-
bts, hms
|
107
|
+
bts, hms = ::Brick.get_bts_and_hms(@_brick_model) # This gets BT and HM and also has_many :through (HMT)
|
108
108
|
hms_columns = [] # Used for 'index'
|
109
109
|
skip_klass_hms = ::Brick.config.skip_index_hms[model_name] || {}
|
110
110
|
hms_headers = hms.each_with_object([]) do |hm, s|
|
@@ -112,7 +112,7 @@ module Brick
|
|
112
112
|
"H#{hm_assoc.macro == :has_one ? 'O' : 'M'}#{'T' if hm_assoc.options[:through]}",
|
113
113
|
(assoc_name = hm.first)]
|
114
114
|
hm_fk_name = if hm_assoc.options[:through]
|
115
|
-
associative =
|
115
|
+
associative = @_brick_model._br_associatives[hm.first]
|
116
116
|
tbl_nm = if hm_assoc.options[:source]
|
117
117
|
associative.klass.reflect_on_association(hm_assoc.options[:source]).inverse_of&.name
|
118
118
|
else
|
@@ -166,12 +166,12 @@ module Brick
|
|
166
166
|
# %%% If we are not auto-creating controllers (or routes) then omit by default, and if enabled anyway, such as in a development
|
167
167
|
# environment or whatever, then get either the controllers or routes list instead
|
168
168
|
apartment_default_schema = ::Brick.apartment_multitenant && Apartment.default_schema
|
169
|
-
table_options = (::Brick.relations.keys - ::Brick.config.exclude_tables).
|
169
|
+
table_options = (::Brick.relations.keys - ::Brick.config.exclude_tables).each_with_object({}) do |tbl, s|
|
170
170
|
if (tbl_parts = tbl.split('.')).first == apartment_default_schema
|
171
171
|
tbl = tbl_parts.last
|
172
172
|
end
|
173
|
-
tbl
|
174
|
-
end.sort.each_with_object(+'') do |v, s|
|
173
|
+
s[tbl] = nil
|
174
|
+
end.keys.sort.each_with_object(+'') do |v, s|
|
175
175
|
s << "<option value=\"#{v.underscore.gsub('.', '/').pluralize}\">#{v}</option>"
|
176
176
|
end.html_safe
|
177
177
|
table_options << '<option value="brick_orphans">(Orphans)</option>'.html_safe if is_orphans
|
@@ -562,7 +562,7 @@ if (headerTop) {
|
|
562
562
|
col_order << col_name
|
563
563
|
%><th<%= \" title=\\\"#\{col.comment}\\\"\".html_safe if col.respond_to?(:comment) && !col.comment.blank? %><%
|
564
564
|
if (bt = bts[col_name]) %>
|
565
|
-
<%= \" x-order=\\\"#\{bt.first}\\\"\".html_safe
|
565
|
+
<%= \" x-order=\\\"#\{bt.first}\\\"\".html_safe unless bt[2] # Allow sorting any BT except polymorphics
|
566
566
|
%>>BT <%
|
567
567
|
bt[1].each do |bt_pair| %><%=
|
568
568
|
bt_pair.first.bt_link(bt.first) %> <%
|
@@ -807,7 +807,9 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
|
|
807
807
|
# %%% Create a smart javascript routine which can do this client-side %>
|
808
808
|
[... document.getElementsByTagName(\"TH\")].forEach(function (th) {
|
809
809
|
th.addEventListener(\"click\", function (e) {
|
810
|
-
|
810
|
+
var xOrder;
|
811
|
+
if (xOrder = this.getAttribute(\"x-order\"))
|
812
|
+
location.href = changeout(location.href, \"_brick_order\", xOrder);
|
811
813
|
});
|
812
814
|
});
|
813
815
|
document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -172,14 +172,14 @@ module Brick
|
|
172
172
|
# Mark has_manys that go to an associative ("join") table so that they are skipped in the UI,
|
173
173
|
# as well as any possible polymorphic associations
|
174
174
|
skip_hms = {}
|
175
|
-
|
175
|
+
hms.each do |hmt|
|
176
176
|
if (through = hmt.last.options[:through])
|
177
177
|
skip_hms[through] = nil # if hms[through]
|
178
178
|
# binding.pry if !hms[through]
|
179
179
|
# End up with a hash of HMT names pointing to join-table associations
|
180
180
|
# Last part was: hmt.last.name
|
181
181
|
# Changed up because looking for: hms[:issue_issue_duplicates]
|
182
|
-
|
182
|
+
model._br_associatives[hmt.first] = hms[through] # || hms["#{(opt = hmt.last.options)[:through].to_s.singularize}_#{opt[:source].to_s.pluralize}".to_sym]
|
183
183
|
elsif hmt.last.inverse_of.nil?
|
184
184
|
puts "SKIPPING #{hmt.last.name.inspect}"
|
185
185
|
# %%% If we don't do this then below associative.name will find that associative is nil
|
@@ -187,7 +187,7 @@ module Brick
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
skip_hms.each { |k, _v| hms.delete(k) }
|
190
|
-
[bts, hms
|
190
|
+
[bts, hms]
|
191
191
|
end
|
192
192
|
|
193
193
|
# Switches Brick auto-models on or off, for all threads
|
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.50
|
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-07-
|
11
|
+
date: 2022-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|