brick 1.0.182 → 1.0.184
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 +9 -0
- data/lib/brick/frameworks/rails/form_builder.rb +11 -2
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +37 -18
- data/lib/generators/brick/migration_builder.rb +11 -2
- data/lib/generators/brick/seeds_generator.rb +7 -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: 78b2c6e3f1da384e5310953f39a9bb08f85bdeabf7d2cf4143e483ad4df9f146
|
4
|
+
data.tar.gz: e3bb0fc597cfb9908a87667b6e785f41dc73337fd834151dd8ce41af8aabca02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1f52d74e8feca2255c86423b4108ddad31daa3b49c4f54ae0c25080542e51e1b1a812238ea6313de51c2644f67ac4ab5ad7c9759fbfb535a07e8c3134010f39
|
7
|
+
data.tar.gz: 9b21a929ef26076909595907bfda0d74b73d274bb6442d58eb80beb4b152b6aaf97ec8a8177dc0057df9188dcfde9e9540f1573c6b59ae6be62b40ac0a7541d8
|
data/lib/brick/config.rb
CHANGED
@@ -164,6 +164,15 @@ module Brick
|
|
164
164
|
@mutex.synchronize { @additional_references = references }
|
165
165
|
end
|
166
166
|
|
167
|
+
# References to disregard when auto-building migrations, models, and seeds
|
168
|
+
def defer_references_for_generation
|
169
|
+
@mutex.synchronize { @defer_references_for_generation }
|
170
|
+
end
|
171
|
+
|
172
|
+
def defer_references_for_generation=(drfg)
|
173
|
+
@mutex.synchronize { @defer_references_for_generation = drfg }
|
174
|
+
end
|
175
|
+
|
167
176
|
# Custom columns to add to a table, minimally defined with a name and DSL string
|
168
177
|
def custom_columns
|
169
178
|
@mutex.synchronize { @custom_columns }
|
@@ -48,7 +48,9 @@ module Brick::Rails::FormBuilder
|
|
48
48
|
col&.type
|
49
49
|
end
|
50
50
|
case (col_type ||= col&.sql_type)
|
51
|
-
when :string, :text, :citext
|
51
|
+
when :string, :text, :citext,
|
52
|
+
:enum # Support for the activerecord-mysql-enum gem
|
53
|
+
spit_out_text_field = nil
|
52
54
|
if ::Brick::Rails::FormBuilder.is_bcrypt?(val) # || .readonly?
|
53
55
|
is_revert = false
|
54
56
|
out << ::Brick::Rails::FormBuilder.hide_bcrypt(val, nil, 1000)
|
@@ -57,13 +59,20 @@ module Brick::Rails::FormBuilder
|
|
57
59
|
enum_html_options = attr.kind_of?(Enumerize::Multiple) ? html_options.merge({ multiple: true, size: opts.length + 1 }) : html_options
|
58
60
|
out << self.select(method.to_sym, [["(No #{method} chosen)", '^^^brick_NULL^^^']] + opts, { value: val || '^^^brick_NULL^^^' }, enum_html_options)
|
59
61
|
else
|
60
|
-
|
62
|
+
spit_out_text_field = true
|
63
|
+
end
|
64
|
+
elsif col_type == :enum
|
65
|
+
if col.respond_to?(:limit) && col.limit.present?
|
66
|
+
out << self.select(method.to_sym, [["(No #{method} chosen)", '^^^brick_NULL^^^']] + col.limit, { value: val.to_s || '^^^brick_NULL^^^' }, html_options)
|
67
|
+
else
|
68
|
+
spit_out_text_field = true
|
61
69
|
end
|
62
70
|
else
|
63
71
|
template.instance_variable_set(:@_text_fields_present, true)
|
64
72
|
out << self.hidden_field(method.to_sym, html_options)
|
65
73
|
out << "<trix-editor input=\"#{self.field_id(method)}\"></trix-editor>"
|
66
74
|
end
|
75
|
+
out << self.text_field(method.to_sym, html_options) if spit_out_text_field
|
67
76
|
when :boolean
|
68
77
|
out << self.check_box(method.to_sym)
|
69
78
|
when :integer, :decimal, :float
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -282,7 +282,7 @@ module Brick
|
|
282
282
|
next
|
283
283
|
end
|
284
284
|
else
|
285
|
-
this_fks = this_fk.is_a?(Array) ? this_fk : [this_fk.to_s]
|
285
|
+
this_fks = (this_fk = a.foreign_key).is_a?(Array) ? this_fk.uniq : [this_fk.to_s]
|
286
286
|
if !a.options.key?(:as) && (this_fks - a.klass.column_names).length.positive?
|
287
287
|
options = ", #{a.options.map { |k, v| "#{k.inspect} => #{v.inspect}" }.join(', ')}" if a.options.present?
|
288
288
|
puts "WARNING: Model #{model.name} has this association:
|
@@ -475,6 +475,21 @@ module Brick
|
|
475
475
|
end
|
476
476
|
end
|
477
477
|
|
478
|
+
# References to disregard when auto-building migrations, models, and seeds
|
479
|
+
# @api public
|
480
|
+
def defer_references_for_generation=(drfg)
|
481
|
+
if drfg
|
482
|
+
drfg = [drfg] unless drfg.empty? || drfg.first.is_a?(Array)
|
483
|
+
Brick.config.defer_references_for_generation = drfg
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
487
|
+
def drfgs
|
488
|
+
(::Brick.config.defer_references_for_generation || []).each_with_object({}) do |drfg, s|
|
489
|
+
s[drfg.first] = [drfg[1..-1]]
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
478
493
|
# Custom columns to add to a table, minimally defined with a name and DSL string.
|
479
494
|
# @api public
|
480
495
|
def custom_columns=(cust_cols)
|
@@ -2026,15 +2041,17 @@ end
|
|
2026
2041
|
|
2027
2042
|
# Keyword arguments updates for Rails <= 5.2.x and Ruby >= 3.0
|
2028
2043
|
if ActiveRecord.version < ::Gem::Version.new('6.0') && ruby_version >= ::Gem::Version.new('3.0')
|
2029
|
-
|
2030
|
-
|
2031
|
-
|
2032
|
-
|
2033
|
-
|
2034
|
-
|
2044
|
+
if Object.const_defined?('ActionDispatch')
|
2045
|
+
admsm = ActionDispatch::MiddlewareStack::Middleware
|
2046
|
+
admsm.class_exec do
|
2047
|
+
# redefine #build
|
2048
|
+
def build(app, **kwargs)
|
2049
|
+
if args.length > 1 && args.last.is_a?(Hash)
|
2050
|
+
kwargs.merge!(args.pop)
|
2051
|
+
end
|
2052
|
+
# binding.pry if klass == ActionDispatch::Static # ActionDispatch::Reloader
|
2053
|
+
klass.new(app, *args, **kwargs, &block)
|
2035
2054
|
end
|
2036
|
-
# binding.pry if klass == ActionDispatch::Static # ActionDispatch::Reloader
|
2037
|
-
klass.new(app, *args, **kwargs, &block)
|
2038
2055
|
end
|
2039
2056
|
end
|
2040
2057
|
|
@@ -2086,16 +2103,18 @@ if ActiveRecord.version < ::Gem::Version.new('6.0') && ruby_version >= ::Gem::Ve
|
|
2086
2103
|
end
|
2087
2104
|
end
|
2088
2105
|
|
2089
|
-
|
2090
|
-
|
2106
|
+
if Object.const_defined?('ActionController')
|
2107
|
+
module ActionController::RequestForgeryProtection
|
2108
|
+
private
|
2091
2109
|
|
2092
|
-
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2110
|
+
# Creates the authenticity token for the current request.
|
2111
|
+
def form_authenticity_token(*args, form_options: {}) # :doc:
|
2112
|
+
if method(:masked_authenticity_token).arity == 1
|
2113
|
+
masked_authenticity_token(session) # AR <= 4.2 doesn't use form_options
|
2114
|
+
else
|
2115
|
+
form_options.merge!(args.pop) if args.last.is_a?(Hash)
|
2116
|
+
masked_authenticity_token(session, form_options: form_options)
|
2117
|
+
end
|
2099
2118
|
end
|
2100
2119
|
end
|
2101
2120
|
end
|
@@ -26,11 +26,16 @@ module Brick
|
|
26
26
|
'SDO_GEOMETRY' => 'geometry',
|
27
27
|
# MSSQL data types
|
28
28
|
'int' => 'integer',
|
29
|
+
'char' => 'string',
|
30
|
+
'varchar' => 'string',
|
29
31
|
'nvarchar' => 'string',
|
30
32
|
'nchar' => 'string',
|
31
33
|
'datetime2' => 'timestamp',
|
32
34
|
'bit' => 'boolean',
|
33
35
|
'varbinary' => 'binary',
|
36
|
+
'tinyint' => 'integer', # %%% Need to put in "limit: 2"
|
37
|
+
'year' => 'date',
|
38
|
+
'set' => 'string',
|
34
39
|
# Sqlite data types
|
35
40
|
'TEXT' => 'text',
|
36
41
|
'' => 'string',
|
@@ -111,8 +116,12 @@ module Brick
|
|
111
116
|
while (fringe = chosen.reject do |tbl|
|
112
117
|
snag_fks = []
|
113
118
|
snags = relations.fetch(tbl, nil)&.fetch(:fks, nil)&.select do |_k, v|
|
114
|
-
|
115
|
-
tbl
|
119
|
+
# Skip any foreign keys which should be deferred ...
|
120
|
+
!Brick.drfgs[tbl]&.any? do |drfg|
|
121
|
+
drfg[0] == v.fetch(:fk, nil) && drfg[1] == v.fetch(:inverse_table, nil)
|
122
|
+
end &&
|
123
|
+
v[:is_bt] && !v[:polymorphic] && # ... and polymorphics ...
|
124
|
+
tbl != v[:inverse_table] && # ... and self-referencing associations (stuff like "parent_id")
|
116
125
|
!done.include?(v[:inverse_table]) &&
|
117
126
|
::Brick.config.ignore_migration_fks.exclude?(snag_fk = "#{tbl}.#{v[:fk]}") &&
|
118
127
|
snag_fks << snag_fk
|
@@ -66,8 +66,12 @@ module Brick
|
|
66
66
|
tbl = seed_model.table_name
|
67
67
|
snag_fks = []
|
68
68
|
snags = ::Brick.relations.fetch(tbl, nil)&.fetch(:fks, nil)&.select do |_k, v|
|
69
|
-
|
70
|
-
tbl
|
69
|
+
# Skip any foreign keys which should be deferred ...
|
70
|
+
!Brick.drfgs[tbl]&.any? do |drfg|
|
71
|
+
drfg[0] == v.fetch(:fk, nil) && drfg[1] == v.fetch(:inverse_table, nil)
|
72
|
+
end &&
|
73
|
+
v[:is_bt] && !v[:polymorphic] && # ... and polymorphics ...
|
74
|
+
tbl != v[:inverse_table] && # ... and self-referencing associations (stuff like "parent_id")
|
71
75
|
!done.any? { |done_seed_model| done_seed_model.table_name == v[:inverse_table] } &&
|
72
76
|
::Brick.config.ignore_migration_fks.exclude?(snag_fk = "#{tbl}.#{v[:fk]}") &&
|
73
77
|
snag_fks << snag_fk
|
@@ -151,7 +155,7 @@ module Brick
|
|
151
155
|
puts "\n*** Created seeds for #{done.length} models in db/seeds.rb ***"
|
152
156
|
if (stuck_sorted = stuck_counts.to_a.sort { |a, b| b.last <=> a.last }).length.positive?
|
153
157
|
puts "-----------------------------------------"
|
154
|
-
puts "Unable to create
|
158
|
+
puts "Unable to create seeds for #{stuck_sorted.length} tables#{
|
155
159
|
". Here's the top 5 blockers" if stuck_sorted.length > 5
|
156
160
|
}:"
|
157
161
|
pp stuck_sorted[0..4]
|
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.184
|
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-10-
|
11
|
+
date: 2023-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|