brick 1.0.151 → 1.0.152
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/extensions.rb +46 -33
- data/lib/brick/frameworks/rails/engine.rb +3 -0
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +6 -0
- data/lib/generators/brick/install_generator.rb +4 -0
- 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: 4b4101e6f3437aaf0cb79eec97a94b9df6655d9db8a4773e761768556d2ec31f
|
4
|
+
data.tar.gz: 543bad78f1a359af9126373928789d868530b7ed09c17dbf18bf52a012a37763
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84d77e9a74428eea4e90f0a40b6e2a6dc824623a6b8975659698b4c79b73ec2ec5f5f26409c5d3d7f0c89c33e6c0aafb73a0c69b8cb3900654d10c528f3d4699
|
7
|
+
data.tar.gz: 556ad657abeb7a2368940a8b651ef85e6d3c410684e3ab7a088d741ea851e5c31b51bbe8f8baaa017231f56eb7fa177928782b68c6ee7b00c053d1267ac67a1f
|
data/lib/brick/config.rb
CHANGED
@@ -204,6 +204,15 @@ module Brick
|
|
204
204
|
@mutex.synchronize { @has_ones = hos }
|
205
205
|
end
|
206
206
|
|
207
|
+
# Associations upon which to add #accepts_nested_attributes_for logic
|
208
|
+
def nested_attributes
|
209
|
+
@mutex.synchronize { @nested_attributes }
|
210
|
+
end
|
211
|
+
|
212
|
+
def nested_attributes=(anaf)
|
213
|
+
@mutex.synchronize { @nested_attributes = anaf }
|
214
|
+
end
|
215
|
+
|
207
216
|
# Polymorphic associations
|
208
217
|
def polymorphics
|
209
218
|
@mutex.synchronize { @polymorphics }
|
data/lib/brick/extensions.rb
CHANGED
@@ -344,6 +344,28 @@ module ActiveRecord
|
|
344
344
|
def _br_cust_cols
|
345
345
|
@_br_cust_cols ||= {}
|
346
346
|
end
|
347
|
+
|
348
|
+
def _brick_find_permits(model_or_assoc, current_permits, done_permits = [])
|
349
|
+
unless done_permits.include?(model_or_assoc)
|
350
|
+
done_permits << model_or_assoc
|
351
|
+
self.reflect_on_all_associations.select { |assoc| !assoc.belongs_to? }.each_with_object([]) do |assoc, s|
|
352
|
+
if assoc.options[:through]
|
353
|
+
current_permits << { "#{assoc.name.to_s.singularize}_ids".to_sym => [] }
|
354
|
+
s << "#{assoc.name.to_s.singularize}_ids: []"
|
355
|
+
end
|
356
|
+
if self.instance_methods.include?(:"#{assoc.name}_attributes=")
|
357
|
+
# Support nested attributes which use the friendly_id gem
|
358
|
+
assoc.klass._brick_nested_friendly_id if Object.const_defined?('FriendlyId') &&
|
359
|
+
assoc.klass.instance_variable_get(:@friendly_id_config)
|
360
|
+
new_attrib_text = assoc.klass._brick_find_permits(assoc, (new_permits = assoc.klass.columns_hash.keys.map(&:to_sym)), done_permits)
|
361
|
+
new_permits << :_destroy
|
362
|
+
current_permits << { "#{assoc.name}_attributes".to_sym => new_permits }
|
363
|
+
s << "#{assoc.name}_attributes: #{new_attrib_text}"
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
current_permits
|
368
|
+
end
|
347
369
|
end
|
348
370
|
|
349
371
|
# Search for custom column, BT, HM, and HMT DSL stuff
|
@@ -1639,18 +1661,23 @@ class Object
|
|
1639
1661
|
else
|
1640
1662
|
need_fk = "#{ActiveSupport::Inflector.singularize(assoc[:inverse][:inverse_table].split('.').last)}_id" != assoc[:fk]
|
1641
1663
|
end
|
1664
|
+
singular_assoc_name = ActiveSupport::Inflector.singularize(assoc_name.tr('.', '_'))
|
1642
1665
|
has_ones = ::Brick.config.has_ones&.fetch(full_name, nil)
|
1643
|
-
if has_ones&.key?(singular_assoc_name
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1666
|
+
macro = if has_ones&.key?(singular_assoc_name)
|
1667
|
+
assoc_name = if (custom_assoc_name = has_ones[singular_assoc_name])
|
1668
|
+
need_class_name = custom_assoc_name != singular_assoc_name
|
1669
|
+
custom_assoc_name
|
1670
|
+
else
|
1671
|
+
singular_assoc_name
|
1672
|
+
end
|
1673
|
+
:has_one
|
1674
|
+
else
|
1675
|
+
:has_many
|
1676
|
+
end
|
1677
|
+
# Auto-create an accepts_nested_attributes_for for this HM?
|
1678
|
+
is_anaf = (anaf = ::Brick.config.nested_attributes&.fetch(full_name, nil)) &&
|
1679
|
+
(anaf.is_a?(Array) ? anaf.include?(assoc_name) : anaf == assoc_name)
|
1680
|
+
macro
|
1654
1681
|
end
|
1655
1682
|
# Figure out if we need to specially call out the class_name and/or foreign key
|
1656
1683
|
# (and if either of those then definitely also a specific inverse_of)
|
@@ -1686,6 +1713,10 @@ class Object
|
|
1686
1713
|
assoc_name = assoc_name.tr('.', '_').to_sym
|
1687
1714
|
code << " #{macro} #{assoc_name.inspect}#{options.map { |k, v| ", #{k}: #{v.inspect}" }.join}\n"
|
1688
1715
|
self.send(macro, assoc_name, **options)
|
1716
|
+
if is_anaf
|
1717
|
+
code << " accepts_nested_attributes_for #{assoc_name.inspect}\n"
|
1718
|
+
self.send(:accepts_nested_attributes_for, assoc_name)
|
1719
|
+
end
|
1689
1720
|
end
|
1690
1721
|
|
1691
1722
|
def default_ordering(table_name, pk)
|
@@ -2194,6 +2225,9 @@ class Object
|
|
2194
2225
|
end
|
2195
2226
|
end
|
2196
2227
|
end
|
2228
|
+
if (upd_hash ||= upd_params).fetch(model.inheritance_column, nil).strip == ''
|
2229
|
+
upd_hash[model.inheritance_column] = nil
|
2230
|
+
end
|
2197
2231
|
obj.send(:update, upd_hash || upd_params)
|
2198
2232
|
end
|
2199
2233
|
|
@@ -2241,7 +2275,7 @@ class Object
|
|
2241
2275
|
|
2242
2276
|
if is_need_params
|
2243
2277
|
code << " def #{params_name}\n"
|
2244
|
-
permits_txt =
|
2278
|
+
permits_txt = model._brick_find_permits(model, permits = model.columns_hash.keys.map(&:to_sym))
|
2245
2279
|
code << " params.require(:#{require_name = model.name.underscore.tr('/', '_')
|
2246
2280
|
}).permit(#{permits_txt.map(&:inspect).join(', ')})\n"
|
2247
2281
|
code << " end\n"
|
@@ -2257,27 +2291,6 @@ class Object
|
|
2257
2291
|
[built_controller, code]
|
2258
2292
|
end
|
2259
2293
|
|
2260
|
-
def _brick_find_permits(model, current_permits, done_permits = [])
|
2261
|
-
unless done_permits.include?(self)
|
2262
|
-
done_permits << self
|
2263
|
-
model.reflect_on_all_associations.select { |assoc| assoc.macro == :has_many }.each_with_object([]) do |assoc, s|
|
2264
|
-
if assoc.options[:through]
|
2265
|
-
current_permits << { "#{assoc.name.to_s.singularize}_ids".to_sym => [] }
|
2266
|
-
s << "#{assoc.name.to_s.singularize}_ids: []"
|
2267
|
-
elsif assoc.active_record.instance_methods.include?(:"#{assoc.name}_attributes=")
|
2268
|
-
# Support nested attributes which use the friendly_id gem
|
2269
|
-
self._brick_nested_friendly_id if Object.const_defined?('FriendlyId') &&
|
2270
|
-
assoc.klass.instance_variable_get(:@friendly_id_config)
|
2271
|
-
new_attrib_text = self._brick_find_permits(assoc.klass, (new_permits = assoc.klass.columns_hash.keys.map(&:to_sym)), done_permits)
|
2272
|
-
new_permits << :_destroy
|
2273
|
-
current_permits << { "#{assoc.name}_attributes".to_sym => new_permits }
|
2274
|
-
s << "#{assoc.name}_attributes: #{new_attrib_text}"
|
2275
|
-
end
|
2276
|
-
end
|
2277
|
-
end
|
2278
|
-
current_permits
|
2279
|
-
end
|
2280
|
-
|
2281
2294
|
def _brick_nested_friendly_id
|
2282
2295
|
unless @_brick_nested_friendly_id
|
2283
2296
|
::ActiveRecord::Base.class_exec do
|
@@ -257,6 +257,9 @@ function linkSchemas() {
|
|
257
257
|
# Has one relationships
|
258
258
|
::Brick.has_ones = app.config.brick.fetch(:has_ones, nil)
|
259
259
|
|
260
|
+
# accepts_nested_attributes_for relationships
|
261
|
+
::Brick.nested_attributes = app.config.brick.fetch(:nested_attributes, nil)
|
262
|
+
|
260
263
|
# Polymorphic associations
|
261
264
|
::Brick.polymorphics = app.config.brick.fetch(:polymorphics, nil)
|
262
265
|
end
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -477,6 +477,12 @@ module Brick
|
|
477
477
|
end
|
478
478
|
end
|
479
479
|
|
480
|
+
# Associations upon which to add #accepts_nested_attributes_for logic
|
481
|
+
# @api public
|
482
|
+
def nested_attributes=(anaf)
|
483
|
+
Brick.config.nested_attributes = anaf
|
484
|
+
end
|
485
|
+
|
480
486
|
# Polymorphic associations
|
481
487
|
def polymorphics=(polys)
|
482
488
|
polys = polys.each_with_object({}) { |poly, s| s[poly] = nil } if polys.is_a?(Array)
|
@@ -256,6 +256,10 @@ if ActiveRecord::Base.respond_to?(:brick_select) && !::Brick.initializer_loaded
|
|
256
256
|
# # instead of \"user_profile\", then apply that as a third parameter like this:
|
257
257
|
# Brick.has_ones = [['User', 'user_profile', 'profile']]
|
258
258
|
|
259
|
+
# # Automatically establish #accepts_nested_attributes_for logic on has_many and has_one associations.
|
260
|
+
# # This video to demonstrates how this works: https://github.com/lorint/brick/assets/5301131/82ac4f6d-bc23-4a55-adab-bc754bcb0f26
|
261
|
+
# Brick.nested_attributes = { 'User' => ['profile', 'posts'] }
|
262
|
+
|
259
263
|
# # We normally don't show the timestamp columns \"created_at\", \"updated_at\", and \"deleted_at\", and also do
|
260
264
|
# # not consider them when finding associative tables to support an N:M association. (That is, ones that can be a
|
261
265
|
# # part of a has_many :through association.) If you want to use different exclusion columns than our defaults
|
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.152
|
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-06-
|
11
|
+
date: 2023-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|