brick 1.0.188 → 1.0.190
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: 3e7a12940f4ac57eea3c53bb3b437472f90bbaa857bd6611d3e871463add46f2
|
|
4
|
+
data.tar.gz: 8afb6e47cebd99a9b4172aa82d9447b71dd66e6df750249063b66b9b9ba939a9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d5379ddb6c61675b5606730a771a3f95638829b8359b42fd78c0509836635a93d36b787b09f21a0b9321623c917a149508b643a68ff4474baf7b40739ad5eeed
|
|
7
|
+
data.tar.gz: 40b6c6dc4fd31b10632fafb572608ec1c6473b6efa1dab346f1c82fc4f9daa1faba6d3675b336a780291595e25ace20358a95205a9284e7c42ddf450efe1d0a4
|
data/lib/brick/extensions.rb
CHANGED
|
@@ -98,6 +98,7 @@ module ActiveRecord
|
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
def _br_quoted_name(name)
|
|
101
|
+
name = name.join('.') if name.is_a?(Array)
|
|
101
102
|
if name == '*'
|
|
102
103
|
name
|
|
103
104
|
elsif is_mysql
|
|
@@ -729,12 +730,12 @@ module ActiveRecord
|
|
|
729
730
|
cc_part_idx -= 1
|
|
730
731
|
end
|
|
731
732
|
end
|
|
732
|
-
selects << "#{tbl_name}.#{cc_part.last} AS #{col_alias}"
|
|
733
|
+
selects << "#{_br_quoted_name(tbl_name)}.#{_br_quoted_name(cc_part.last)} AS #{_br_quoted_name(col_alias)}"
|
|
733
734
|
cc_part << col_alias
|
|
734
735
|
end
|
|
735
736
|
# Add a key column unless we've already got it
|
|
736
737
|
if key_alias && !used_col_aliases.key?(key_alias)
|
|
737
|
-
selects << "#{key_tbl_name}.#{dest_pk} AS #{key_alias}"
|
|
738
|
+
selects << "#{_br_quoted_name(key_tbl_name)}.#{_br_quoted_name(dest_pk)} AS #{_br_quoted_name(key_alias)}"
|
|
738
739
|
used_col_aliases[key_alias] = nil
|
|
739
740
|
end
|
|
740
741
|
cc[2] = key_alias ? [key_klass, key_alias] : nil
|
|
@@ -1018,7 +1019,7 @@ JOIN (SELECT #{hm_selects.map { |s| _br_quoted_name("#{'br_t0.' if from_clause}#
|
|
|
1018
1019
|
selects, where_values_hash, nil, translations: translations, join_array: join_array,
|
|
1019
1020
|
cust_col_override: { '_br' => (descrip_cols = [pieces, my_dsl]) }
|
|
1020
1021
|
)
|
|
1021
|
-
order_values = "#{klass.table_name}.#{klass.primary_key}"
|
|
1022
|
+
order_values = "#{_br_quoted_name(klass.table_name)}.#{_br_quoted_name(klass.primary_key)}"
|
|
1022
1023
|
[self.select(selects), descrip_cols]
|
|
1023
1024
|
end
|
|
1024
1025
|
|
|
@@ -2158,7 +2159,7 @@ class Object
|
|
|
2158
2159
|
|
|
2159
2160
|
# %%% Allow params to define which columns to use for order_by
|
|
2160
2161
|
# Overriding the default by providing a querystring param?
|
|
2161
|
-
order_by = params['_brick_order']&.split(',')&.map(&:
|
|
2162
|
+
order_by = params['_brick_order']&.split(',')&.map(&:to_s) || Object.send(:default_ordering, table_name, pk)
|
|
2162
2163
|
|
|
2163
2164
|
ar_relation = ActiveRecord.version < Gem::Version.new('4') ? real_model.preload : real_model.all
|
|
2164
2165
|
params['_brick_is_api'] = true if (is_api = request.format == :js || current_api_root)
|
|
@@ -2895,24 +2896,32 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
|
2895
2896
|
# end
|
|
2896
2897
|
# end
|
|
2897
2898
|
# schema = ::Brick.default_schema # Reset back for this next round of fun
|
|
2899
|
+
kcus = nil
|
|
2898
2900
|
case ActiveRecord::Base.connection.adapter_name
|
|
2899
2901
|
when 'PostgreSQL', 'Mysql2', 'Trilogy', 'SQLServer'
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
+
# All KCUs -- use this to virtually JOIN against fk_references in Ruby code
|
|
2903
|
+
sql = "SELECT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, ORDINAL_POSITION,
|
|
2904
|
+
TABLE_NAME, COLUMN_NAME
|
|
2905
|
+
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE#{"
|
|
2906
|
+
WHERE CONSTRAINT_SCHEMA = COALESCE(current_setting('SEARCH_PATH'), 'public')" if is_postgres && schema }"
|
|
2907
|
+
kcus = ActiveRecord::Base.execute_sql(sql).each_with_object({}) do |v, s|
|
|
2908
|
+
key = "#{v['constraint_name']}.#{v['constraint_schema']}.#{v['constraint_catalog']}.#{v['ordinal_position']}"
|
|
2909
|
+
key << ".#{v['table_name']}.#{v['column_name']}" unless is_postgres || is_mssql
|
|
2910
|
+
s[key] = [v['constraint_schema'], v['table_name']]
|
|
2911
|
+
end
|
|
2912
|
+
|
|
2913
|
+
sql = "SELECT kcu.CONSTRAINT_SCHEMA, kcu.TABLE_NAME, kcu.COLUMN_NAME,
|
|
2914
|
+
#{# These will get filled in with real values (effectively doing the JOIN in Ruby)
|
|
2915
|
+
is_postgres || is_mssql ? 'NULL as primary_schema, NULL as primary_table' :
|
|
2916
|
+
'kcu.REFERENCED_TABLE_NAME, kcu.REFERENCED_COLUMN_NAME'},
|
|
2917
|
+
kcu.CONSTRAINT_NAME AS CONSTRAINT_SCHEMA_FK,
|
|
2918
|
+
rc.UNIQUE_CONSTRAINT_NAME, rc.UNIQUE_CONSTRAINT_SCHEMA, rc.UNIQUE_CONSTRAINT_CATALOG, kcu.ORDINAL_POSITION
|
|
2902
2919
|
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS rc
|
|
2903
|
-
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS
|
|
2904
|
-
ON
|
|
2905
|
-
AND
|
|
2906
|
-
AND
|
|
2907
|
-
|
|
2908
|
-
ON kcu2.CONSTRAINT_CATALOG = rc.UNIQUE_CONSTRAINT_CATALOG
|
|
2909
|
-
AND kcu2.CONSTRAINT_SCHEMA = rc.UNIQUE_CONSTRAINT_SCHEMA
|
|
2910
|
-
AND kcu2.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME#{"
|
|
2911
|
-
AND kcu2.TABLE_NAME = kcu1.REFERENCED_TABLE_NAME
|
|
2912
|
-
AND kcu2.COLUMN_NAME = kcu1.REFERENCED_COLUMN_NAME" unless is_postgres || is_mssql }
|
|
2913
|
-
AND kcu2.ORDINAL_POSITION = kcu1.ORDINAL_POSITION#{"
|
|
2914
|
-
WHERE kcu1.CONSTRAINT_SCHEMA = COALESCE(current_setting('SEARCH_PATH'), 'public')" if is_postgres && schema }"
|
|
2915
|
-
# AND kcu2.TABLE_NAME = ?;", Apartment::Tenant.current, table_name
|
|
2920
|
+
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS kcu
|
|
2921
|
+
ON kcu.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG
|
|
2922
|
+
AND kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
|
|
2923
|
+
AND kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME#{"
|
|
2924
|
+
WHERE kcu.CONSTRAINT_SCHEMA = COALESCE(current_setting('SEARCH_PATH'), 'public')" if is_postgres && schema }"
|
|
2916
2925
|
fk_references = ActiveRecord::Base.execute_sql(sql)
|
|
2917
2926
|
when 'SQLite'
|
|
2918
2927
|
sql = "SELECT NULL AS constraint_schema, m.name, fkl.\"from\", NULL AS primary_schema, fkl.\"table\", m.name || '_' || fkl.\"from\" AS constraint_name
|
|
@@ -2943,6 +2952,11 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
|
2943
2952
|
::Brick.default_schema ||= 'public' if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
|
|
2944
2953
|
fk_references&.each do |fk|
|
|
2945
2954
|
fk = fk.values unless fk.is_a?(Array)
|
|
2955
|
+
# Virtually JOIN against fk_references in order to change out the primary schema and primary table
|
|
2956
|
+
if (kcu = kcus&.fetch("#{fk[6]}.#{fk[7]}.#{fk[8]}.#{fk[9]}", nil))
|
|
2957
|
+
fk[3] = kcu[0]
|
|
2958
|
+
fk[4] = kcu[1]
|
|
2959
|
+
end
|
|
2946
2960
|
# Multitenancy makes things a little more general overall, except for non-tenanted tables
|
|
2947
2961
|
if ::Brick.is_apartment_excluded_table(::Brick.namify(fk[1]))
|
|
2948
2962
|
fk[0] = ::Brick.apartment_default_tenant
|
|
@@ -2967,6 +2981,7 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
|
2967
2981
|
end
|
|
2968
2982
|
::Brick._add_bt_and_hm(fk, relations)
|
|
2969
2983
|
end
|
|
2984
|
+
kcus = nil # Allow this large item to be garbage collected
|
|
2970
2985
|
end
|
|
2971
2986
|
|
|
2972
2987
|
table_name_lookup = (::Brick.table_name_lookup ||= {})
|
|
@@ -738,8 +738,11 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
|
738
738
|
hms_columns << hm_entry
|
|
739
739
|
end
|
|
740
740
|
when 'show', 'new', 'update'
|
|
741
|
+
predicates = nil
|
|
741
742
|
hm_stuff << if hm_fk_name
|
|
742
|
-
if
|
|
743
|
+
if (hm_fk_name.is_a?(Array) && # Composite key?
|
|
744
|
+
hm_fk_name.all? { |hm_fk_part| hm_assoc.klass.column_names.include?(hm_fk_part) }) ||
|
|
745
|
+
hm_assoc.klass.column_names.include?(hm_fk_name.to_s) ||
|
|
743
746
|
(hm_fk_name.is_a?(String) && hm_fk_name.include?('.')) # HMT? (Could do a better check for this)
|
|
744
747
|
predicates = path_keys(hm_assoc, hm_fk_name, pk).map do |k, v|
|
|
745
748
|
if v == '[sti_type]'
|
|
@@ -1638,7 +1641,7 @@ end
|
|
|
1638
1641
|
end
|
|
1639
1642
|
s << "<table id=\"#{hm_name}\" class=\"shadow\">
|
|
1640
1643
|
<tr><th>#{hm[1]}#{' poly' if hm[0].options[:as]} #{hm[3]}
|
|
1641
|
-
<% if respond_to?(:new_#{partial_new_path_name = hm.first.klass._brick_index(:singular)}_path) %>
|
|
1644
|
+
<% if predicates && respond_to?(:new_#{partial_new_path_name = hm.first.klass._brick_index(:singular)}_path) %>
|
|
1642
1645
|
<span class = \"add-hm-related\"><%=
|
|
1643
1646
|
pk_val = (obj_pk = model.primary_key).is_a?(String) ? obj.send(obj_pk) : obj_pk.map { |pk_part| obj.send(pk_part) }
|
|
1644
1647
|
pk_val_arr = [pk_val] unless pk_val.is_a?(Array)
|
|
@@ -467,7 +467,7 @@ function onImagesLoaded(event) {
|
|
|
467
467
|
if bt.length < 4
|
|
468
468
|
bt << (option_detail = [["(No #{bt_name} chosen)", '^^^brick_NULL^^^']])
|
|
469
469
|
# %%% Accommodate composite keys for obj.pk at the end here
|
|
470
|
-
collection, descrip_cols = bt_class&.order(Arel.sql("#{bt_class.table_name}.#{obj_pk = bt_class.primary_key}"))&.brick_list
|
|
470
|
+
collection, descrip_cols = bt_class&.order(Arel.sql("#{bt_class._br_quoted_name(bt_class.table_name)}.#{bt_class._br_quoted_name(obj_pk = bt_class.primary_key)}"))&.brick_list
|
|
471
471
|
collection&.brick_(:each) do |obj|
|
|
472
472
|
option_detail << [
|
|
473
473
|
obj.brick_descrip(
|
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.190
|
|
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-11-
|
|
11
|
+
date: 2023-11-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -280,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
280
280
|
- !ruby/object:Gem::Version
|
|
281
281
|
version: 1.3.6
|
|
282
282
|
requirements: []
|
|
283
|
-
rubygems_version: 3.
|
|
283
|
+
rubygems_version: 3.2.33
|
|
284
284
|
signing_key:
|
|
285
285
|
specification_version: 4
|
|
286
286
|
summary: Create a Rails app from data alone
|