brick 1.0.183 → 1.0.185
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 +4 -4
- data/lib/brick/compatibility.rb +6 -2
- data/lib/brick/config.rb +9 -0
- data/lib/brick/frameworks/rails/engine.rb +2 -2
- data/lib/brick/frameworks/rails/form_builder.rb +11 -2
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +39 -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: d930911e6903179271b74220c325ba024dfebe26f87eec06111772bfe1dd6b39
|
4
|
+
data.tar.gz: fb0767bf7e59c56dffbe1999ee86ca3cefe66040dd26387019f2d45b8776fcd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d03584188eaf7ba5a41b37fd80470f6eeb8c166949f4e19f1e2a9ccf958b94d0864c25f16363fbaae1980c36d8e82ec0eacf731cd5bdee97ec819a68be4b9836
|
7
|
+
data.tar.gz: 5fc2966228117b7d35e5370ff64f2f46e85e8bfa8a1a4a4df8732e91fe0e0f4c0a5050cc7b77d44217538a7bc46681a24ebd03d0fc6ff69f483f7a7861f74a38
|
data/lib/brick/compatibility.rb
CHANGED
@@ -48,10 +48,14 @@ if ::Gem::Version.new(RUBY_VERSION) >= ::Gem::Version.new('2.7')
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
unless ActiveRecord.const_defined?(:NoDatabaseError)
|
51
|
+
unless ActiveRecord.const_defined?(:NoDatabaseError)
|
52
52
|
require 'active_model'
|
53
|
+
require 'active_record/deprecator' if ActiveRecord.version >= Gem::Version.new('7.1.0')
|
53
54
|
require 'active_record/errors'
|
54
|
-
|
55
|
+
# Generic version of NoDatabaseError for Rails <= 4.0
|
56
|
+
unless ActiveRecord.const_defined?(:NoDatabaseError)
|
57
|
+
class ::ActiveRecord::NoDatabaseError < ::ActiveRecord::StatementInvalid
|
58
|
+
end
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
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 }
|
@@ -1966,7 +1966,7 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1966
1966
|
def viable_models
|
1967
1967
|
return _brick_viable_models if ::RailsAdmin::Config.class_variables.include?(:@@system_models)
|
1968
1968
|
|
1969
|
-
brick_models = ::Brick.relations.
|
1969
|
+
brick_models = ::Brick.relations.each_with_object([]) { |rel, s| s << rel.last[:class_name] unless rel.first.is_a?(Symbol) }
|
1970
1970
|
|
1971
1971
|
# The original from RailsAdmin (now aliased as _brick_viable_models) loads all classes
|
1972
1972
|
# in the whole project. This Brick approach is a little more tame.
|
@@ -1999,7 +1999,7 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1999
1999
|
end
|
2000
2000
|
|
2001
2001
|
RailsAdmin.config do |config|
|
2002
|
-
::Brick.relations.select { |_k, v| v.key?(:isView) }.each do |_k, relation|
|
2002
|
+
::Brick.relations.select { |_k, v| v.is_a?(Hash) && v.key?(:isView) }.each do |_k, relation|
|
2003
2003
|
config.model(relation[:class_name]) do # new_model_class
|
2004
2004
|
list do
|
2005
2005
|
sort_by (sort_col = relation[:cols].first.first)
|
@@ -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
@@ -162,6 +162,8 @@ module Brick
|
|
162
162
|
h[:db_name] = db_name if db_name
|
163
163
|
end
|
164
164
|
end
|
165
|
+
rescue ActiveRecord::NoDatabaseError
|
166
|
+
{}
|
165
167
|
end
|
166
168
|
|
167
169
|
def apartment_multitenant
|
@@ -475,6 +477,21 @@ module Brick
|
|
475
477
|
end
|
476
478
|
end
|
477
479
|
|
480
|
+
# References to disregard when auto-building migrations, models, and seeds
|
481
|
+
# @api public
|
482
|
+
def defer_references_for_generation=(drfg)
|
483
|
+
if drfg
|
484
|
+
drfg = [drfg] unless drfg.empty? || drfg.first.is_a?(Array)
|
485
|
+
Brick.config.defer_references_for_generation = drfg
|
486
|
+
end
|
487
|
+
end
|
488
|
+
|
489
|
+
def drfgs
|
490
|
+
(::Brick.config.defer_references_for_generation || []).each_with_object({}) do |drfg, s|
|
491
|
+
s[drfg.first] = [drfg[1..-1]]
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|
478
495
|
# Custom columns to add to a table, minimally defined with a name and DSL string.
|
479
496
|
# @api public
|
480
497
|
def custom_columns=(cust_cols)
|
@@ -1901,7 +1918,7 @@ module ActiveRecord
|
|
1901
1918
|
private
|
1902
1919
|
|
1903
1920
|
# %%% Pretty much have to flat-out replace this guy (I think anyway)
|
1904
|
-
# Good with Rails 5.
|
1921
|
+
# Good with Rails 5.2.4 through 7.1 on this
|
1905
1922
|
# Ransack gem includes Polyamorous which replaces #build in a different way (which we handle below)
|
1906
1923
|
unless Gem::Specification.all_names.any? { |g| g.start_with?('ransack-') }
|
1907
1924
|
def build(associations, base_klass, root = nil, path = '')
|
@@ -2026,15 +2043,17 @@ end
|
|
2026
2043
|
|
2027
2044
|
# Keyword arguments updates for Rails <= 5.2.x and Ruby >= 3.0
|
2028
2045
|
if ActiveRecord.version < ::Gem::Version.new('6.0') && ruby_version >= ::Gem::Version.new('3.0')
|
2029
|
-
|
2030
|
-
|
2031
|
-
|
2032
|
-
|
2033
|
-
|
2034
|
-
|
2046
|
+
if Object.const_defined?('ActionDispatch')
|
2047
|
+
admsm = ActionDispatch::MiddlewareStack::Middleware
|
2048
|
+
admsm.class_exec do
|
2049
|
+
# redefine #build
|
2050
|
+
def build(app, **kwargs)
|
2051
|
+
if args.length > 1 && args.last.is_a?(Hash)
|
2052
|
+
kwargs.merge!(args.pop)
|
2053
|
+
end
|
2054
|
+
# binding.pry if klass == ActionDispatch::Static # ActionDispatch::Reloader
|
2055
|
+
klass.new(app, *args, **kwargs, &block)
|
2035
2056
|
end
|
2036
|
-
# binding.pry if klass == ActionDispatch::Static # ActionDispatch::Reloader
|
2037
|
-
klass.new(app, *args, **kwargs, &block)
|
2038
2057
|
end
|
2039
2058
|
end
|
2040
2059
|
|
@@ -2086,16 +2105,18 @@ if ActiveRecord.version < ::Gem::Version.new('6.0') && ruby_version >= ::Gem::Ve
|
|
2086
2105
|
end
|
2087
2106
|
end
|
2088
2107
|
|
2089
|
-
|
2090
|
-
|
2108
|
+
if Object.const_defined?('ActionController')
|
2109
|
+
module ActionController::RequestForgeryProtection
|
2110
|
+
private
|
2091
2111
|
|
2092
|
-
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2112
|
+
# Creates the authenticity token for the current request.
|
2113
|
+
def form_authenticity_token(*args, form_options: {}) # :doc:
|
2114
|
+
if method(:masked_authenticity_token).arity == 1
|
2115
|
+
masked_authenticity_token(session) # AR <= 4.2 doesn't use form_options
|
2116
|
+
else
|
2117
|
+
form_options.merge!(args.pop) if args.last.is_a?(Hash)
|
2118
|
+
masked_authenticity_token(session, form_options: form_options)
|
2119
|
+
end
|
2099
2120
|
end
|
2100
2121
|
end
|
2101
2122
|
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.185
|
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-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|