brick 1.0.67 → 1.0.68
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 +1 -3
- data/lib/brick/frameworks/rails/engine.rb +65 -50
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +4 -4
- data/lib/generators/brick/install_generator.rb +2 -2
- data/lib/generators/brick/migrations_generator.rb +27 -18
- 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: 977737d8dec8900c82e2a973060dca56ae7897e281557e43e1c0696012521270
|
4
|
+
data.tar.gz: 8a005ecab292cbfdaf94b29476d4db56e9f5b71a46a5f71ca6fd049550ed4cff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3cfaf5cdcdf67038ba5969306f49b73c09977b9e1dec078ad3ca3d6f6e7d16b5b0d18eb16a982568966ac91cabdcb96e82362cce4906485581b36ce2e2410da
|
7
|
+
data.tar.gz: 50f38455e43528478fe694f08bfcc50a8968536c9e4e6d8ab0c1713ff621e2153454a541d8e5940f584f2bd9e06549c4d3db047ac11fbdedaf5bc536d0ac7cd1
|
data/lib/brick/extensions.rb
CHANGED
@@ -1358,14 +1358,12 @@ module ActiveRecord::ConnectionHandling
|
|
1358
1358
|
when 'Mysql2'
|
1359
1359
|
::Brick.default_schema = schema = ActiveRecord::Base.connection.current_database
|
1360
1360
|
when 'SQLite'
|
1361
|
-
# %%% Retrieve internal ActiveRecord table names like this:
|
1362
|
-
# ActiveRecord::Base.internal_metadata_table_name, ActiveRecord::Base.schema_migrations_table_name
|
1363
1361
|
sql = "SELECT m.name AS relation_name, UPPER(m.type) AS table_type,
|
1364
1362
|
p.name AS column_name, p.type AS data_type,
|
1365
1363
|
CASE p.pk WHEN 1 THEN 'PRIMARY KEY' END AS const
|
1366
1364
|
FROM sqlite_master AS m
|
1367
1365
|
INNER JOIN pragma_table_info(m.name) AS p
|
1368
|
-
WHERE m.name NOT IN (?, ?)
|
1366
|
+
WHERE m.name NOT IN ('sqlite_sequence', ?, ?)
|
1369
1367
|
ORDER BY m.name, p.cid"
|
1370
1368
|
else
|
1371
1369
|
puts "Unfamiliar with connection adapter #{ActiveRecord::Base.connection.adapter_name}"
|
@@ -96,17 +96,15 @@ module Brick
|
|
96
96
|
|
97
97
|
alias :_brick_find_template :find_template
|
98
98
|
def find_template(*args, **options)
|
99
|
-
unless (
|
99
|
+
unless (model_name = @_brick_model&.name) ||
|
100
|
+
(is_status = ::Brick.config.add_status && args[0..1] == ['status', ['brick_gem']]) ||
|
100
101
|
(is_orphans = ::Brick.config.add_orphans && args[0..1] == ['orphans', ['brick_gem']]) ||
|
101
|
-
|
102
|
-
|
103
|
-
# Used to also have: ActionView.version < ::Gem::Version.new('5.0') &&
|
104
|
-
(args[1].is_a?(Array) ? set_brick_model(args) : nil)
|
105
|
-
)&.name)
|
102
|
+
# Used to also have: ActionView.version < ::Gem::Version.new('5.0') &&
|
103
|
+
(model_name = (args[1].is_a?(Array) ? set_brick_model(args) : nil)&.name)
|
106
104
|
return _brick_find_template(*args, **options)
|
107
105
|
end
|
108
106
|
|
109
|
-
|
107
|
+
if @_brick_model
|
110
108
|
pk = @_brick_model._brick_primary_key(::Brick.relations.fetch(model_name, nil))
|
111
109
|
obj_name = model_name.split('::').last.underscore
|
112
110
|
path_obj_name = model_name.underscore.tr('/', '_')
|
@@ -180,7 +178,7 @@ module Brick
|
|
180
178
|
end.keys.sort.each_with_object(+'') do |v, s|
|
181
179
|
s << "<option value=\"#{v.underscore.gsub('.', '/').pluralize}\">#{v}</option>"
|
182
180
|
end.html_safe
|
183
|
-
table_options << '<option value="brick_status">(Status)</option>'.html_safe
|
181
|
+
table_options << '<option value="brick_status">(Status)</option>'.html_safe if ::Brick.config.add_status
|
184
182
|
table_options << '<option value="brick_orphans">(Orphans)</option>'.html_safe if is_orphans
|
185
183
|
css = +"<style>
|
186
184
|
h1, h3 {
|
@@ -277,7 +275,7 @@ tr th, tr td {
|
|
277
275
|
color: #80B8D2;
|
278
276
|
}
|
279
277
|
|
280
|
-
table.shadow tbody tr {
|
278
|
+
table.shadow > tbody > tr {
|
281
279
|
border-bottom: thin solid #dddddd;
|
282
280
|
}
|
283
281
|
|
@@ -285,7 +283,7 @@ table tbody tr:nth-of-type(even) {
|
|
285
283
|
background-color: #f3f3f3;
|
286
284
|
}
|
287
285
|
|
288
|
-
table.shadow tbody tr:last-of-type {
|
286
|
+
table.shadow > tbody > tr:last-of-type {
|
289
287
|
border-bottom: 2px solid #009879;
|
290
288
|
}
|
291
289
|
|
@@ -302,14 +300,6 @@ a.big-arrow {
|
|
302
300
|
font-size: 2.5em;
|
303
301
|
text-decoration: none;
|
304
302
|
}
|
305
|
-
.wide-input {
|
306
|
-
display: block;
|
307
|
-
overflow: hidden;
|
308
|
-
}
|
309
|
-
.wide-input input[type=text] {
|
310
|
-
display: inline-block;
|
311
|
-
width: 90%;
|
312
|
-
}
|
313
303
|
.dimmed {
|
314
304
|
background-color: #C0C0C0;
|
315
305
|
text-align: center;
|
@@ -326,9 +316,6 @@ svg.revert {
|
|
326
316
|
display: none;
|
327
317
|
margin-left: 0.25em;
|
328
318
|
}
|
329
|
-
.wide-input > svg.revert {
|
330
|
-
float: right;
|
331
|
-
}
|
332
319
|
input+svg.revert {
|
333
320
|
top: 0.5em;
|
334
321
|
}
|
@@ -550,7 +537,8 @@ erDiagram
|
|
550
537
|
is_has_one = #{@_brick_model.name}.reflect_on_association(bt.first).inverse_of&.macro == :has_one ||
|
551
538
|
::Brick.config.has_ones&.fetch('#{@_brick_model.name}', nil)&.key?(bt.first.to_s)
|
552
539
|
%> <%= \"#\{model_short_name} #\{is_has_one ? '||' : '}o'}--|| #\{bt_name} : \\\"#\{
|
553
|
-
|
540
|
+
bt_underscored = bt[1].first.first.name.underscore.singularize
|
541
|
+
bt.first unless bt.first.to_s == bt_underscored.split('/').last # Was: bt_underscored.tr('/', '_')
|
554
542
|
}\\\"\".html_safe %>
|
555
543
|
<% end
|
556
544
|
last_through = nil
|
@@ -560,14 +548,15 @@ erDiagram
|
|
560
548
|
|
561
549
|
callbacks[hm_name = hm_class.name.split('::').last] = hm_class
|
562
550
|
if (through = hm.last.options[:through]&.to_s) # has_many :through (HMT)
|
563
|
-
|
551
|
+
through_name = (through_assoc = hm.last.source_reflection).active_record.name.split('::').last
|
552
|
+
callbacks[through_name] = through_assoc.active_record
|
564
553
|
if last_through == through # Same HM, so no need to build it again, and for clarity just put in a blank line
|
565
554
|
%><%= \"\n\"
|
566
555
|
%><% else
|
567
|
-
%> <%= \"#\{model_short_name} ||--o{ #\{
|
556
|
+
%> <%= \"#\{model_short_name} ||--o{ #\{through_name}\".html_safe %> : \"\"
|
568
557
|
<% last_through = through
|
569
558
|
end
|
570
|
-
%> <%= \"#\{
|
559
|
+
%> <%= \"#\{through_name} }o--|| #\{hm_name}\".html_safe %> : \"\"
|
571
560
|
<%= \"#\{model_short_name} }o..o{ #\{hm_name} : \\\"#\{hm.first}\\\"\".html_safe %><%
|
572
561
|
else # has_many
|
573
562
|
%> <%= \"#\{model_short_name} ||--o{ #\{hm_name} : \\\"#\{
|
@@ -575,21 +564,25 @@ erDiagram
|
|
575
564
|
}\\\"\".html_safe %><%
|
576
565
|
end %>
|
577
566
|
<% end
|
567
|
+
def dt_lookup(dt)
|
568
|
+
{ 'integer' => 'int', }[dt] || dt.tr(' ', '_')
|
569
|
+
end
|
578
570
|
callbacks.merge({model_short_name => #{@_brick_model.name}}).each do |cb_k, cb_class|
|
579
571
|
cb_relation = ::Brick.relations[cb_class.table_name]
|
580
572
|
pkeys = cb_relation[:pkey]&.first&.last
|
581
573
|
fkeys = cb_relation[:fks]&.values&.each_with_object([]) { |fk, s| s << fk[:fk] if fk.fetch(:is_bt, nil) }
|
574
|
+
cols = cb_relation[:cols]
|
582
575
|
%> <%= cb_k %> {<%
|
583
576
|
pkeys&.each do |pk| %>
|
584
|
-
<%= \"
|
577
|
+
<%= \"#\{dt_lookup(cols[pk].first)} #\{pk} \\\"PK#\{' fk' if fkeys&.include?(pk)}\\\"\".html_safe %><%
|
585
578
|
end %><%
|
586
579
|
fkeys&.each do |fk|
|
587
580
|
if fk.is_a?(Array)
|
588
581
|
fk.each do |fk_part| %>
|
589
|
-
<%= \"
|
582
|
+
<%= \"#\{dt_lookup(cols[fk_part].first)} #\{fk_part} \\\" fk\\\"\".html_safe unless pkeys&.include?(fk_part) %><%
|
590
583
|
end
|
591
584
|
else %>
|
592
|
-
<%= \"
|
585
|
+
<%= \"#\{dt_lookup(cols[fk].first)} #\{fk} \\\" fk\\\"\".html_safe unless pkeys&.include?(fk) %><%
|
593
586
|
end
|
594
587
|
end %>
|
595
588
|
}
|
@@ -694,7 +687,7 @@ erDiagram
|
|
694
687
|
</script>
|
695
688
|
<script async defer src=\"https://apis.google.com/js/api.js\" onload=\"gapiLoaded()\"></script>
|
696
689
|
"
|
697
|
-
end
|
690
|
+
end # DutyFree data export and import
|
698
691
|
# %%% Instead of our current "for Janet Leverling (Employee)" kind of link we previously had this code that did a "where x = 123" thing:
|
699
692
|
# (where <%= @_brick_params.each_with_object([]) { |v, s| s << \"#\{v.first\} = #\{v.last.inspect\}\" }.join(', ') %>)
|
700
693
|
+"#{css}
|
@@ -833,6 +826,7 @@ erDiagram
|
|
833
826
|
#{script}"
|
834
827
|
|
835
828
|
when 'status'
|
829
|
+
if is_status
|
836
830
|
# Status page - list of all resources and 5 things they do or don't have present, and what is turned on and off
|
837
831
|
# Must load all models, and then find what table names are represented
|
838
832
|
# Easily could be multiple files involved (STI for instance)
|
@@ -856,7 +850,7 @@ erDiagram
|
|
856
850
|
@resources.each do |r|
|
857
851
|
%>
|
858
852
|
<tr>
|
859
|
-
<td><%= link_to(r[0], \"/#\{r[0].tr('.', '/')}\") %></td>
|
853
|
+
<td><%= link_to(r[0], \"/#\{r[0].underscore.tr('.', '/')}\") %></td>
|
860
854
|
<td<%= if r[1]
|
861
855
|
' class=\"orphan\"' unless ::Brick.relations.key?(r[1])
|
862
856
|
else
|
@@ -877,6 +871,7 @@ erDiagram
|
|
877
871
|
<% end %>
|
878
872
|
</tbody></table>
|
879
873
|
#{script}"
|
874
|
+
end
|
880
875
|
|
881
876
|
when 'orphans'
|
882
877
|
if is_orphans
|
@@ -962,38 +957,41 @@ end
|
|
962
957
|
<% end %>
|
963
958
|
</th>
|
964
959
|
<td>
|
960
|
+
<table><tr><td>
|
965
961
|
<% dt_pickers = { datetime: 'datetimepicker', timestamp: 'datetimepicker', time: 'timepicker', date: 'datepicker' }
|
962
|
+
html_options = {}
|
963
|
+
html_options[:class] = 'dimmed' unless val
|
964
|
+
is_revert = true
|
966
965
|
if bt
|
967
|
-
html_options =
|
968
|
-
html_options[:class] = 'dimmed' unless val %>
|
966
|
+
html_options[:prompt] = \"Select #\{bt_name\}\" %>
|
969
967
|
<%= f.select k.to_sym, bt[3], { value: val || '^^^brick_NULL^^^' }, html_options %>
|
970
968
|
<%= if (bt_obj = bt_class&.find_by(bt_pair[1] => val))
|
971
969
|
link_to('⇛', send(\"#\{bt_class.base_class.name.underscore.tr('/', '_')\}_path\".to_sym, bt_obj.send(bt_class.primary_key.to_sym)), { class: 'show-arrow' })
|
972
970
|
elsif val
|
973
971
|
\"<span class=\\\"orphan\\\">Orphaned ID: #\{val}</span>\".html_safe
|
974
|
-
end
|
972
|
+
end %>
|
975
973
|
<% else
|
976
|
-
|
977
|
-
html_options[:class] = 'dimmed' unless val
|
978
|
-
case (col_type = col.type || col.sql_type)
|
974
|
+
case (col_type = col.type || col.sql_type)
|
979
975
|
when :string, :text %>
|
980
|
-
<% if is_bcrypt?(val) # || .readonly?
|
976
|
+
<% if is_bcrypt?(val) # || .readonly?
|
977
|
+
is_revert = false %>
|
981
978
|
<%= hide_bcrypt(val, 1000) %>
|
982
979
|
<% else %>
|
983
|
-
|
980
|
+
<%= f.text_field(k.to_sym, html_options) %>
|
984
981
|
<% end %>
|
985
982
|
<% when :boolean %>
|
986
|
-
<%= f.check_box k.to_sym
|
983
|
+
<%= f.check_box k.to_sym %>
|
987
984
|
<% when :integer, :decimal, :float %>
|
988
985
|
<%= if col_type == :integer
|
989
986
|
f.text_field k.to_sym, { pattern: '\\d*', class: 'check-validity' }
|
990
987
|
else
|
991
988
|
f.number_field k.to_sym
|
992
|
-
end
|
989
|
+
end %>
|
993
990
|
<% when *dt_pickers.keys
|
994
991
|
is_includes_dates = true %>
|
995
|
-
<%= f.text_field k.to_sym, { class: dt_pickers[col_type] }
|
996
|
-
<% when :uuid
|
992
|
+
<%= f.text_field k.to_sym, { class: dt_pickers[col_type] } %>
|
993
|
+
<% when :uuid
|
994
|
+
is_revert = false %>
|
997
995
|
<%=
|
998
996
|
# Postgres naturally uses the +uuid_generate_v4()+ function from the uuid-ossp extension
|
999
997
|
# If it's not yet enabled then: create extension \"uuid-ossp\";
|
@@ -1004,11 +1002,18 @@ end
|
|
1004
1002
|
# In Postgres labels of data stored in a hierarchical tree-like structure
|
1005
1003
|
# If it's not yet enabled then: create extension ltree;
|
1006
1004
|
val %>
|
1007
|
-
<% when :binary, :primary_key
|
1005
|
+
<% when :binary, :primary_key
|
1006
|
+
is_revert = false %>
|
1008
1007
|
<% else %>
|
1009
|
-
<%= display_value(col_type, val)
|
1008
|
+
<%= display_value(col_type, val)
|
1009
|
+
is_revert = false %>
|
1010
|
+
<% end
|
1011
|
+
end
|
1012
|
+
if is_revert
|
1013
|
+
%></td>
|
1014
|
+
<td><svg class=\"revert\" width=\"1.5em\" viewBox=\"0 0 512 512\"><use xlink:href=\"#revertPath\" /></svg>
|
1010
1015
|
<% end %>
|
1011
|
-
|
1016
|
+
</td></tr></table>
|
1012
1017
|
</td>
|
1013
1018
|
</tr>
|
1014
1019
|
<% end
|
@@ -1070,7 +1075,7 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
|
|
1070
1075
|
var mermaidErd = document.getElementById(\"mermaidErd\");
|
1071
1076
|
var mermaidCode;
|
1072
1077
|
var cbs = {<%= callbacks.map { |k, v| \"#\{k}: \\\"#\{v.name.underscore.pluralize}\\\"\" }.join(', ').html_safe %>};
|
1073
|
-
imgErd.addEventListener(\"click\", showErd);
|
1078
|
+
if (imgErd) imgErd.addEventListener(\"click\", showErd);
|
1074
1079
|
function showErd() {
|
1075
1080
|
imgErd.style.display = \"none\";
|
1076
1081
|
mermaidErd.style.display = \"inline-block\";
|
@@ -1131,9 +1136,12 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1131
1136
|
var origVal = getInpVal(),
|
1132
1137
|
prevVal = origVal;
|
1133
1138
|
var revert;
|
1134
|
-
if (
|
1135
|
-
|
1136
|
-
|
1139
|
+
if (inp.getAttribute(\"type\") == \"hidden\" || inp.getAttribute(\"type\") == \"submit\") return;
|
1140
|
+
|
1141
|
+
var svgTd = null;
|
1142
|
+
if ((revert = ((inp.tagName === \"SELECT\" && (svgTd = inp.parentElement.nextElementSibling) && svgTd.firstElementChild) ||
|
1143
|
+
((svgTd = inp.parentElement.nextElementSibling) && svgTd.firstElementChild))
|
1144
|
+
) && revert.tagName.toLowerCase() === \"svg\")
|
1137
1145
|
revert.addEventListener(\"click\", function (e) {
|
1138
1146
|
if (inp.type === \"checkbox\")
|
1139
1147
|
inp.checked = origVal;
|
@@ -1164,7 +1172,7 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1164
1172
|
prevVal = getInpVal();
|
1165
1173
|
}
|
1166
1174
|
// Show or hide the revert button
|
1167
|
-
if (revert) revert.style.display = getInpVal() === origVal ? \"none\" : \"
|
1175
|
+
if (revert) revert.style.display = getInpVal() === origVal ? \"none\" : \"block\";
|
1168
1176
|
});
|
1169
1177
|
function getInpVal() {
|
1170
1178
|
return inp.type === \"checkbox\" ? inp.checked : inp.value;
|
@@ -1184,6 +1192,13 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1184
1192
|
# In order to defer auto-creation of any routes that already exist, calculate Brick routes only after having loaded all others
|
1185
1193
|
prepend ::Brick::RouteSet
|
1186
1194
|
end
|
1195
|
+
# Do the root route before the Rails Welcome one would otherwise take precedence
|
1196
|
+
unless (route = ::Brick.config.default_route_fallback).blank? ||
|
1197
|
+
::Rails.application.routes.named_routes.send(:routes)[:root]
|
1198
|
+
::Rails.application.routes.append do
|
1199
|
+
send(:root, "#{route}#{'#index' unless route.index('#')}")
|
1200
|
+
end
|
1201
|
+
end
|
1187
1202
|
end
|
1188
1203
|
|
1189
1204
|
# Just in case it hadn't been done previously when we tried to load the brick initialiser,
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -123,7 +123,7 @@ module Brick
|
|
123
123
|
end
|
124
124
|
|
125
125
|
class << self
|
126
|
-
attr_accessor :default_schema, :db_schemas
|
126
|
+
attr_accessor :default_schema, :db_schemas, :routes_done
|
127
127
|
|
128
128
|
def set_db_schema(params)
|
129
129
|
schema = params['_brick_schema'] || 'public'
|
@@ -461,11 +461,11 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
461
461
|
|
462
462
|
module RouteSet
|
463
463
|
def finalize!
|
464
|
+
return super if ::Brick.routes_done
|
465
|
+
|
466
|
+
::Brick.routes_done = true
|
464
467
|
existing_controllers = routes.each_with_object({}) { |r, s| c = r.defaults[:controller]; s[c] = nil if c }
|
465
468
|
::Rails.application.routes.append do
|
466
|
-
unless ::Brick.config.default_route_fallback.blank? || ::Rails.application.routes.named_routes.send(:routes)[:root]
|
467
|
-
send(:root, "#{::Brick.config.default_route_fallback}#index")
|
468
|
-
end
|
469
469
|
# %%% TODO: If no auto-controllers then enumerate the controllers folder in order to build matching routes
|
470
470
|
# If auto-controllers and auto-models are both enabled then this makes sense:
|
471
471
|
::Brick.relations.each do |rel_name, v|
|
@@ -279,8 +279,8 @@ module Brick
|
|
279
279
|
# # route to go to the :index action for what would be a controller for that table. You can specify any controller
|
280
280
|
# # name and action you wish in order to override this and have that be the default route when none other has been
|
281
281
|
# # specified in routes.rb or elsewhere. (Or just use an empty string in order to disable this behaviour.)
|
282
|
-
# Brick.default_route_fallback = 'customers' # This defaults to \"customers
|
283
|
-
# Brick.default_route_fallback = 'orders
|
282
|
+
# Brick.default_route_fallback = 'customers' # This defaults to \"customers#index\"
|
283
|
+
# Brick.default_route_fallback = 'orders#outstanding' # Example of a non-RESTful route
|
284
284
|
# Brick.default_route_fallback = '' # Omits setting a default route in the absence of any other
|
285
285
|
")
|
286
286
|
end
|
@@ -22,7 +22,16 @@ module Brick
|
|
22
22
|
'time without time zone' => 'time',
|
23
23
|
'time with time zone' => 'time',
|
24
24
|
'double precision' => 'float',
|
25
|
-
'smallint' => 'integer'
|
25
|
+
'smallint' => 'integer', # %%% Need to put in "limit: 2"
|
26
|
+
# Sqlite data types
|
27
|
+
'TEXT' => 'text',
|
28
|
+
'' => 'string',
|
29
|
+
'INTEGER' => 'integer',
|
30
|
+
'REAL' => 'float',
|
31
|
+
'BLOB' => 'binary',
|
32
|
+
'TIMESTAMP' => 'timestamp',
|
33
|
+
'DATETIME' => 'timestamp'
|
34
|
+
}
|
26
35
|
# (Still need to find what "inet" and "json" data types map to.)
|
27
36
|
|
28
37
|
desc 'Auto-generates migration files for an existing database.'
|
@@ -38,7 +47,8 @@ module Brick
|
|
38
47
|
return
|
39
48
|
end
|
40
49
|
|
41
|
-
|
50
|
+
is_sqlite = ActiveRecord::Base.connection.adapter_name == 'SQLite'
|
51
|
+
key_type = ((is_sqlite || ActiveRecord.version < ::Gem::Version.new('5.1')) ? 'integer' : 'bigint')
|
42
52
|
is_4x_rails = ActiveRecord.version < ::Gem::Version.new('5.0')
|
43
53
|
ar_version = "[#{ActiveRecord.version.segments[0..1].join('.')}]" unless is_4x_rails
|
44
54
|
is_insert_versions = true
|
@@ -142,21 +152,20 @@ module Brick
|
|
142
152
|
# if this one has come in as bigint or integer.
|
143
153
|
pk_is_also_fk = fkey_cols.any? { |assoc| pkey_cols&.first == assoc[:fk] } ? pkey_cols&.first : nil
|
144
154
|
# Support missing primary key (by adding: ,id: false)
|
145
|
-
id_option = if pk_is_also_fk ||
|
146
|
-
|
147
|
-
|
155
|
+
id_option = if pk_is_also_fk || !pkey_cols&.present?
|
156
|
+
', id: false'
|
157
|
+
elsif ((pkey_col_first = relation[:cols][pkey_cols&.first]&.first) &&
|
158
|
+
(pkey_col_first = SQL_TYPES[pkey_col_first] || pkey_col_first) != key_type)
|
159
|
+
case pkey_col_first
|
160
|
+
when 'integer'
|
161
|
+
', id: :serial'
|
162
|
+
when 'bigint'
|
163
|
+
', id: :bigserial'
|
148
164
|
else
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
', id: :bigserial'
|
154
|
-
else
|
155
|
-
", id: :#{SQL_TYPES[pkey_col_first] || pkey_col_first}" # Something like: id: :integer, primary_key: :businessentityid
|
156
|
-
end +
|
157
|
-
(pkey_cols.first ? ", primary_key: :#{pkey_cols.first}" : '') +
|
158
|
-
(!is_4x_rails && (comment = relation&.fetch(:description, nil))&.present? ? ", comment: #{comment.inspect}" : '')
|
159
|
-
end
|
165
|
+
", id: :#{pkey_col_first}" # Something like: id: :integer, primary_key: :businessentityid
|
166
|
+
end +
|
167
|
+
(pkey_cols.first ? ", primary_key: :#{pkey_cols.first}" : '') +
|
168
|
+
(!is_4x_rails && (comment = relation&.fetch(:description, nil))&.present? ? ", comment: #{comment.inspect}" : '')
|
160
169
|
end
|
161
170
|
# Find the ActiveRecord class in order to see if the columns have comments
|
162
171
|
unless is_4x_rails
|
@@ -208,7 +217,7 @@ module Brick
|
|
208
217
|
mig << " t.references :#{fk[:assoc_name]}#{suffix}, foreign_key: { to_table: #{to_table} }\n"
|
209
218
|
end
|
210
219
|
else
|
211
|
-
next if !id_option&.end_with?('id: false') && pkey_cols
|
220
|
+
next if !id_option&.end_with?('id: false') && pkey_cols&.include?(col)
|
212
221
|
|
213
222
|
# See if there are generic timestamps
|
214
223
|
if sql_type == 'timestamp' && ['created_at','updated_at'].include?(col)
|
@@ -244,7 +253,7 @@ module Brick
|
|
244
253
|
mig << " #{'# ' if is_commented}add_foreign_key #{tbl_code}, #{add_fk[0]}, column: :#{add_fk[1]}, primary_key: :#{pk}\n"
|
245
254
|
end
|
246
255
|
mig << " end\n"
|
247
|
-
versions_to_create << migration_file_write(mig_path, "create_#{tbl_parts.join('_')}", current_mig_time += 1.minute, ar_version, mig)
|
256
|
+
versions_to_create << migration_file_write(mig_path, "create_#{tbl_parts.map(&:underscore).join('_')}", current_mig_time += 1.minute, ar_version, mig)
|
248
257
|
end
|
249
258
|
done.concat(fringe)
|
250
259
|
chosen -= done
|
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.68
|
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-09-
|
11
|
+
date: 2022-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|