brick 1.0.212 → 1.0.213
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/brick/config.rb +13 -0
- data/lib/brick/extensions.rb +92 -30
- data/lib/brick/frameworks/rails.rb +0 -1
- data/lib/brick/join_array.rb +6 -0
- data/lib/brick/version_number.rb +1 -1
- data/lib/generators/brick/seeds_generator.rb +6 -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: 02a0436d0c71a40e1aa3858e4fdf20822f32b02864e621964bce288b8b21ad60
|
4
|
+
data.tar.gz: 8257218e3c1e9c26842753590e627802842c67dec93891aec7139fd2f31d67c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 222b736da74b699a1f352ffff9f087f39048fceaf995dc28733823b4d38271c0bc04ecba506fb6fd027a7f39883009baede3d9c70f81a46dc023f692d6c831e4
|
7
|
+
data.tar.gz: bdee88e65dad07aa66b6ce9458a44ba8d1ad069b937d5bceae65f020162107336b6d7619aee03ed4c56c25a3e38b4c17ce0352677883426802dfe28ac3c8567a
|
data/lib/brick/config.rb
CHANGED
@@ -429,6 +429,19 @@ module Brick
|
|
429
429
|
end
|
430
430
|
end
|
431
431
|
|
432
|
+
def acts_as_list_cols
|
433
|
+
@mutex.synchronize { @acts_as_list || {} }
|
434
|
+
end
|
435
|
+
|
436
|
+
# Get something like:
|
437
|
+
# { 'on_call_list' => { _brick_default: [:last_name, :first_name] } }
|
438
|
+
# { 'on_call_list' => { _brick_default: :sequence } }
|
439
|
+
def acts_as_list_cols=(position_cols)
|
440
|
+
@mutex.synchronize do
|
441
|
+
@acts_as_list ||= position_cols
|
442
|
+
end
|
443
|
+
end
|
444
|
+
|
432
445
|
def metadata_columns
|
433
446
|
@mutex.synchronize { @metadata_columns ||= ['created_at', 'updated_at', 'deleted_at'] }
|
434
447
|
end
|
data/lib/brick/extensions.rb
CHANGED
@@ -196,6 +196,33 @@ module ActiveRecord
|
|
196
196
|
def _brick_monetized_attributes
|
197
197
|
@_brick_monetized_attributes ||= respond_to?(:monetized_attributes) ? monetized_attributes.values : {}
|
198
198
|
end
|
199
|
+
|
200
|
+
# def acts_as_list(aal_cols = nil)
|
201
|
+
# if aal_cols
|
202
|
+
# aal_cols = [aal_cols] unless aal_cols.is_a?(Array)
|
203
|
+
# @acts_as_list_cols = aal_cols.each_with_object([]) do |aal_col, s|
|
204
|
+
# if column_names.include?(aal_col = aal_col.to_s) && !s.include?(aal_col)
|
205
|
+
# s << aal_col
|
206
|
+
# end
|
207
|
+
# end
|
208
|
+
# else
|
209
|
+
# if [:integer, :bigint].include?(columns_hash['position']&.type)
|
210
|
+
# @acts_as_list_cols = ['position']
|
211
|
+
# else
|
212
|
+
# return
|
213
|
+
# end
|
214
|
+
# end
|
215
|
+
# # Override save in order to update neighbours when necessary
|
216
|
+
# alias _brick_save save
|
217
|
+
# def save
|
218
|
+
# # @acts_as_list_cols
|
219
|
+
# # -1
|
220
|
+
# @acts_as_list_cols.each do |aal_col|
|
221
|
+
# binding.pry if (aal_change = changes[aal_col])
|
222
|
+
# end
|
223
|
+
# _brick_save
|
224
|
+
# end
|
225
|
+
# end
|
199
226
|
end
|
200
227
|
|
201
228
|
def self.brick_parse_dsl(join_array = nil, prefix = [], translations = {}, is_polymorphic = false, dsl = nil, emit_dsl = false)
|
@@ -230,11 +257,7 @@ module ActiveRecord
|
|
230
257
|
end
|
231
258
|
if first_parts
|
232
259
|
if (parts = prefix + first_parts + [parts[-1]]).length > 1 && klass
|
233
|
-
unless is_polymorphic
|
234
|
-
s = join_array
|
235
|
-
parts[0..-3].each { |v| s = s[v.to_sym] }
|
236
|
-
s[parts[-2]] = nil # unless parts[-2].empty? # Using []= will "hydrate" any missing part(s) in our whole series
|
237
|
-
end
|
260
|
+
join_array.add_parts(parts) unless is_polymorphic
|
238
261
|
translations[parts[0..-2].join('.')] = klass
|
239
262
|
end
|
240
263
|
if klass&.column_names.exclude?(parts.last) &&
|
@@ -538,7 +561,11 @@ module ActiveRecord
|
|
538
561
|
end
|
539
562
|
|
540
563
|
def self.brick_where(*args)
|
541
|
-
|
564
|
+
all.brick_where(*args)
|
565
|
+
end
|
566
|
+
|
567
|
+
def self.brick_group(*args, withhold_ids: true, **kwargs)
|
568
|
+
all.brick_group(*args, withhold_ids: withhold_ids, **kwargs)
|
542
569
|
end
|
543
570
|
|
544
571
|
private
|
@@ -612,27 +639,36 @@ module ActiveRecord
|
|
612
639
|
pluck(selects)
|
613
640
|
end
|
614
641
|
|
615
|
-
def
|
642
|
+
def brick_group(*args, **kwargs)
|
643
|
+
grouping = args[0].is_a?(Array) ? args[0] : args
|
644
|
+
_brick_querying(select_values.frozen? ? select_values.dup : select_values,
|
645
|
+
grouping: grouping, **kwargs)
|
646
|
+
self
|
647
|
+
end
|
648
|
+
|
649
|
+
def _brick_querying(*args, grouping: nil, withhold_ids: nil, params: {}, order_by: nil, translations: {},
|
616
650
|
join_array: ::Brick::JoinArray.new,
|
617
651
|
cust_col_override: nil,
|
618
652
|
brick_col_names: nil)
|
619
653
|
selects = args[0].is_a?(Array) ? args[0] : args
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
654
|
+
unless cust_col_override
|
655
|
+
if selects.present? # See if there's any fancy ones in the select list
|
656
|
+
idx = 0
|
657
|
+
while idx < selects.length
|
658
|
+
v = selects[idx]
|
659
|
+
if v.is_a?(String) && v.index('.')
|
660
|
+
# No prefixes and not polymorphic
|
661
|
+
pieces = self.brick_parse_dsl(join_array, [], translations, false, dsl = "[#{v}]")
|
662
|
+
(cust_col_override ||= {})[v.tr('.', '_').to_sym] = [pieces, dsl, true]
|
663
|
+
selects.delete_at(idx)
|
664
|
+
else
|
665
|
+
idx += 1
|
666
|
+
end
|
631
667
|
end
|
668
|
+
elsif selects.is_a?(Hash) && params.empty? # Make sense of things if they've passed in only params
|
669
|
+
params = selects
|
670
|
+
selects = []
|
632
671
|
end
|
633
|
-
elsif selects.is_a?(Hash) && params.empty? && cust_col_override.nil? # Make sense of things if they've passed in only params
|
634
|
-
params = selects
|
635
|
-
selects = []
|
636
672
|
end
|
637
673
|
is_add_bts = is_add_hms = !cust_col_override
|
638
674
|
|
@@ -710,6 +746,14 @@ module ActiveRecord
|
|
710
746
|
end
|
711
747
|
end
|
712
748
|
|
749
|
+
# Establish necessary JOINs for any custom GROUP BY columns
|
750
|
+
grouping&.each do |group_item|
|
751
|
+
# JOIN in all the same ways as the pathing describes
|
752
|
+
if group_item.is_a?(String) && (ref_parts = group_item.split('.')).length > 1
|
753
|
+
join_array.add_parts(ref_parts)
|
754
|
+
end
|
755
|
+
end
|
756
|
+
|
713
757
|
if join_array.present?
|
714
758
|
if ActiveRecord.version < Gem::Version.new('4.2')
|
715
759
|
self.joins_values += join_array # Same as: joins!(join_array)
|
@@ -725,7 +769,9 @@ module ActiveRecord
|
|
725
769
|
|
726
770
|
# CUSTOM COLUMNS
|
727
771
|
# ==============
|
728
|
-
|
772
|
+
cust_cols = cust_col_override
|
773
|
+
cust_cols ||= klass._br_cust_cols unless withhold_ids
|
774
|
+
cust_cols&.each do |k, cc|
|
729
775
|
brick_links # Intentionally create a relation duplicate
|
730
776
|
if @_brick_rel_dup.respond_to?(k) # Name already taken?
|
731
777
|
# %%% Use ensure_unique here in this kind of fashion:
|
@@ -753,7 +799,7 @@ module ActiveRecord
|
|
753
799
|
col_alias = "#{col_prefix}#{k}__#{table_name.tr('.', '_')}_#{cc_part.first}"
|
754
800
|
elsif brick_col_names ||
|
755
801
|
used_col_aliases.key?(col_alias = k.to_s) # This sets a simpler custom column name if possible
|
756
|
-
while cc_part_idx
|
802
|
+
while cc_part_idx >= 0 &&
|
757
803
|
(col_alias = "#{col_prefix}#{k}__#{cc_part[cc_part_idx..-1].map(&:to_s).join('__').tr('.', '_')}") &&
|
758
804
|
used_col_aliases.key?(col_alias)
|
759
805
|
cc_part_idx -= 1
|
@@ -988,6 +1034,20 @@ JOIN (SELECT #{hm_selects.map { |s| _br_quoted_name("#{'br_t0.' if from_clause}#
|
|
988
1034
|
klass._br_hm_counts.delete(n)
|
989
1035
|
end
|
990
1036
|
|
1037
|
+
# Rewrite the group values to reference table and correlation names built out by AREL
|
1038
|
+
if grouping
|
1039
|
+
group2 = (gvgu = (group_values + grouping).uniq).each_with_object([]) do |v, s|
|
1040
|
+
if v.is_a?(Symbol) || (v_parts = v.split('.')).length == 1
|
1041
|
+
s << v
|
1042
|
+
elsif (tbl_name = brick_links[v_parts[0..-2].join('.')]&.split('.')&.last)
|
1043
|
+
s << "#{tbl_name}.#{v_parts.last}"
|
1044
|
+
else
|
1045
|
+
s << v
|
1046
|
+
end
|
1047
|
+
end
|
1048
|
+
group!(*group2)
|
1049
|
+
end
|
1050
|
+
|
991
1051
|
unless wheres.empty?
|
992
1052
|
# Rewrite the wheres to reference table and correlation names built out by AREL
|
993
1053
|
where_nots = {}
|
@@ -998,7 +1058,7 @@ JOIN (SELECT #{hm_selects.map { |s| _br_quoted_name("#{'br_t0.' if from_clause}#
|
|
998
1058
|
if (v_parts = v.first.split('.')).length == 1
|
999
1059
|
(is_not ? where_nots : s)[v.first] = v.last
|
1000
1060
|
else
|
1001
|
-
tbl_name = brick_links[v_parts.
|
1061
|
+
tbl_name = brick_links[v_parts[0..-2].join('.')].split('.').last
|
1002
1062
|
(is_not ? where_nots : s)["#{tbl_name}.#{v_parts.last}"] = v.last
|
1003
1063
|
end
|
1004
1064
|
end
|
@@ -1095,13 +1155,9 @@ JOIN (SELECT #{hm_selects.map { |s| _br_quoted_name("#{'br_t0.' if from_clause}#
|
|
1095
1155
|
# && joins_values.empty? # Make sure we don't step on any toes if they've already specified JOIN things
|
1096
1156
|
ja = nil
|
1097
1157
|
opts.each do |k, v|
|
1158
|
+
# JOIN in all the same ways as the pathing describes
|
1098
1159
|
if k.is_a?(String) && (ref_parts = k.split('.')).length > 1
|
1099
|
-
|
1100
|
-
linkage = (ja ||= ::Brick::JoinArray.new)
|
1101
|
-
ref_parts[0..-3].each do |prefix_part|
|
1102
|
-
linkage = linkage[prefix_part.to_sym]
|
1103
|
-
end
|
1104
|
-
linkage[ref_parts[-2].to_sym] = nil
|
1160
|
+
(ja ||= ::Brick::JoinArray.new).add_parts(ref_parts)
|
1105
1161
|
end
|
1106
1162
|
end
|
1107
1163
|
if ja&.present?
|
@@ -1846,6 +1902,12 @@ class Object
|
|
1846
1902
|
end
|
1847
1903
|
end
|
1848
1904
|
|
1905
|
+
# Apply any acts_as_list things
|
1906
|
+
if (aal_col = ::Brick.config.acts_as_list_cols.fetch(matching, nil))
|
1907
|
+
new_model_class.send(:acts_as_list, aal_col.to_sym)
|
1908
|
+
code << " acts_as_list :#{aal_col}\n"
|
1909
|
+
end
|
1910
|
+
|
1849
1911
|
# Auto-support Ransack if it's present
|
1850
1912
|
if self.respond_to?(:ransackable_attributes)
|
1851
1913
|
def self.ransackable_attributes(auth_object = nil)
|
@@ -173,7 +173,6 @@ erDiagram
|
|
173
173
|
<%= erd_sidelinks(shown_classes, hm_class).html_safe %>
|
174
174
|
<% end
|
175
175
|
def dt_lookup(dt)
|
176
|
-
puts dt.inspect
|
177
176
|
{ 'integer' => 'int', 'character varying' => 'varchar', 'double precision' => 'float',
|
178
177
|
'timestamp without time zone' => 'timestamp',
|
179
178
|
'timestamp with time zone' => 'timestamp',
|
data/lib/brick/join_array.rb
CHANGED
@@ -165,6 +165,12 @@ module Brick
|
|
165
165
|
end.tap { |member| push(member) }
|
166
166
|
end
|
167
167
|
end
|
168
|
+
|
169
|
+
def add_parts(parts)
|
170
|
+
s = self
|
171
|
+
parts[0..-3].each { |part| s = s[part.to_sym] }
|
172
|
+
s[parts[-2].to_sym] = nil # unless parts[-2].empty? # Using []= will "hydrate" any missing part(s) in our whole series
|
173
|
+
end
|
168
174
|
end
|
169
175
|
|
170
176
|
class JoinHash < Hash
|
data/lib/brick/version_number.rb
CHANGED
@@ -53,7 +53,12 @@ module Brick
|
|
53
53
|
s[v_parts.first] = nil unless [::Brick.default_schema, 'public'].include?(v_parts.first)
|
54
54
|
end
|
55
55
|
end
|
56
|
-
seeds = +
|
56
|
+
seeds = +'# Seeds file for '
|
57
|
+
if (arbc = ActiveRecord::Base.connection).respond_to?(:current_database) # SQLite3 can't do this!
|
58
|
+
seeds << "#{arbc.current_database}:\n"
|
59
|
+
elsif (filename = arbc.instance_variable_get(:@connection_parameters)&.fetch(:database, nil))
|
60
|
+
seeds << "#{filename}:\n"
|
61
|
+
end
|
57
62
|
done = []
|
58
63
|
fks = {}
|
59
64
|
stuck = {}
|
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.213
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lorin Thwaits
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|