brick 1.0.231 → 1.0.232
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: ec8b0390d538c25946d68d51b1394875a02203694bc2d28928df1fd63987f40f
|
4
|
+
data.tar.gz: de49f7332e2a08a21a22e92cbac5c9668079551de6ba36ff45fd02dcac9102db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz: '
|
6
|
+
metadata.gz: 7e77492d4d72836a829f9e073eaa14cb1f2c676aefbd053b0466e43b0d0f79141ec661bb38a377391d96711338f9bab5535ee52d51fc90964013ea042219cddc
|
7
|
+
data.tar.gz: '099332256ecadb0948c329dc8a3b06c1b460da5de41e8f183fc5dd937651edd57895b2d3c57399455af5732bab7172e6e88435560cd2d6b1d2e6f42eafefe71d'
|
data/lib/brick/version_number.rb
CHANGED
@@ -15,6 +15,7 @@ You need only #{usage == :migrations ? 'this scope:' : "these three scopes:
|
|
15
15
|
|
16
16
|
Please provide your Airtable PAT:"
|
17
17
|
pat = gets_password
|
18
|
+
pat = ENV['AIRTABLE_PAT'] if pat.blank?
|
18
19
|
require 'net/http'
|
19
20
|
# Generate a list of bases that can be chosen
|
20
21
|
bases = https_get('https://api.airtable.com/v0/meta/bases', pat)
|
@@ -52,12 +53,12 @@ Please provide your Airtable PAT:"
|
|
52
53
|
# Queue up to build associative table with two foreign keys
|
53
54
|
camelized = (assoc_name = "#{tbl_name}_#{col_name}_#{frn_tbl}").camelize
|
54
55
|
if associatives.keys.any? { |a| a.camelize == camelized }
|
55
|
-
puts "Strangely have found two columns in \"#{table.name}\" with a name similar to \"#{col_name}\". Skipping
|
56
|
+
puts "Strangely have found two columns in \"#{table.name}\" with a name similar to \"#{col_name}\". Skipping one to avoid a conflict."
|
56
57
|
next
|
57
58
|
|
58
59
|
end
|
59
60
|
associatives[assoc_name] = [col_name, frn_tbl, tbl_name]
|
60
|
-
fks << [assoc_name, frn_tbl,
|
61
|
+
fks << [assoc_name, frn_tbl, tbl_name, col_name.underscore, tbl_name]
|
61
62
|
end
|
62
63
|
end
|
63
64
|
else
|
@@ -94,18 +95,15 @@ Please provide your Airtable PAT:"
|
|
94
95
|
}
|
95
96
|
end
|
96
97
|
associatives.each do |k, v|
|
97
|
-
pri_pk_col = relations[v[1]][:pkey]&.first&.last&.first
|
98
|
-
frn_pk_col = relations[v[2]][:pkey]&.first&.last&.first
|
99
98
|
pri_fk_name = "#{v[1]}_id"
|
100
|
-
|
101
|
-
|
102
|
-
: "#{v[2]}_id" # Standard N:M
|
99
|
+
frn_fk_base = (v[1] == v[2]) ? "#{v[2]}_2" : v[2] # Accommodates self-referencing N:Ms
|
100
|
+
frn_fk_name = "#{frn_fk_base}_id"
|
103
101
|
relations[k] = {
|
104
102
|
pkey: { "#{k}_pkey" => ['id'] },
|
105
103
|
cols: { 'id' => ['integer', nil, false, false] }
|
106
104
|
}
|
107
|
-
fks << [v[1], pri_fk_name, k,
|
108
|
-
fks << [v[2], frn_fk_name, k,
|
105
|
+
fks << [v[1], pri_fk_name, k, v[0].underscore]
|
106
|
+
fks << [v[2], frn_fk_name, k, frn_fk_base.underscore]
|
109
107
|
end
|
110
108
|
fk_idx = 0
|
111
109
|
fks.each do |pri_tbl, fk_col, frn_tbl, airtable_col, assoc_tbl|
|
@@ -161,14 +161,15 @@ module Brick
|
|
161
161
|
if relation[:cols].keys.include?(col_name = ::Brick::AirtableApiCaller.sane_name(field.first))
|
162
162
|
s[col_name] = obj['fields'][field.first]
|
163
163
|
else # Consider N:M fks
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
164
|
+
hm_fk = relation[:fks].find { |_k, fk1| !fk1[:is_bt] && fk1[:assoc_name] == ::Brick::AirtableApiCaller.sane_name(field.first) }&.last
|
165
|
+
if (t_table = hm_fk&.fetch(:inverse_table, nil))
|
166
|
+
associative_fks = relations[hm_fk&.fetch(:inverse_table, nil)][:fks]
|
167
|
+
# near_side_fk = associative_fks.find { |_k, fk1| fk1[:is_bt] && fk1[:assoc_name] == ::Brick::AirtableApiCaller.sane_name(field.first) }&.last
|
168
|
+
far_side_fk = associative_fks.find { |_k, fk1| fk1[:is_bt] && fk1[:assoc_name] != ::Brick::AirtableApiCaller.sane_name(field.first) }&.last
|
168
169
|
field.last.each do |nm_rec|
|
169
|
-
|
170
|
-
airtable_assoc_recids[t_table] << "#{
|
171
|
-
"#{
|
170
|
+
# Can trade out: hm_fk[:fk] for: near_side_fk[:inverse_table]
|
171
|
+
airtable_assoc_recids[t_table] << "#{hm_fk[:fk]}: #{hm_fk[:fk].singularize}_#{nm_rec[3..-1]}, " \
|
172
|
+
"#{far_side_fk[:assoc_name]}: #{far_side_fk[:inverse_table].singularize}_#{obj['id'][3..-1]}"
|
172
173
|
end
|
173
174
|
end
|
174
175
|
end
|
@@ -183,7 +184,7 @@ module Brick
|
|
183
184
|
is_empty = false
|
184
185
|
# For Airtable, take off the "rec___" prefix
|
185
186
|
pk_val = is_airtable ? airtable_id[3..-1] : brick_escape(obj.attributes_before_type_cast[pkey_cols.first])
|
186
|
-
var_name = "#{tbl.gsub('.', '__')}_#{pk_val}"
|
187
|
+
var_name = "#{tbl.singularize.gsub('.', '__')}_#{pk_val}"
|
187
188
|
fk_vals = []
|
188
189
|
data = []
|
189
190
|
updates = []
|
@@ -203,6 +204,7 @@ module Brick
|
|
203
204
|
if fk
|
204
205
|
inv_tbl = fk[:inverse_table].gsub('.', '__')
|
205
206
|
fk_val = if is_airtable
|
207
|
+
inv_tbl = inv_tbl.singularize
|
206
208
|
# Used to be: fk[:airtable_col]
|
207
209
|
# Take off the "rec___" prefix
|
208
210
|
obj.attributes_before_type_cast[fk[:assoc_name]]&.first&.[](3..-1)
|
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.232
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lorin Thwaits
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-03-
|
11
|
+
date: 2025-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|