brick 1.0.149 → 1.0.150
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/extensions.rb +93 -6
- data/lib/brick/version_number.rb +1 -1
- 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: 7914cc56d8cd8919835028d5ad9b05a50a2b17baf32c9699d1f78bbaf9417e0d
|
4
|
+
data.tar.gz: a7f945e136fe8401c54e8fd24a4d92a5cef24b22bb68d2caceac28d809ff8f07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa3ed344e3d4beed83cf9a6fd7059d78032497f8a6c51c825fd50d163e61bd8029afe3dd82e055631d8258b0c9cf54f7d176e064c47fe9fb5a70cc25cdb67faf
|
7
|
+
data.tar.gz: e43ca92a155c805d4dc5be0a2548d9612bc0b1a92cb2e65722ca4c55c81dbef9b476493d6764eece75489e9caf60e2a1046ca960d9a58cafe060aeae11db954a
|
data/lib/brick/extensions.rb
CHANGED
@@ -2238,12 +2238,7 @@ class Object
|
|
2238
2238
|
|
2239
2239
|
if is_need_params
|
2240
2240
|
code << " def #{params_name}\n"
|
2241
|
-
permits = model.columns_hash.keys.map(&:to_sym)
|
2242
|
-
permits_txt = permits.map(&:inspect) +
|
2243
|
-
model.reflect_on_all_associations.select { |assoc| assoc.macro == :has_many && assoc.options[:through] }.map do |assoc|
|
2244
|
-
permits << { "#{assoc.name.to_s.singularize}_ids".to_sym => [] }
|
2245
|
-
"#{assoc.name.to_s.singularize}_ids: []"
|
2246
|
-
end
|
2241
|
+
permits_txt = self._brick_find_permits(model, (permits = model.columns_hash.keys.map(&:to_sym)))
|
2247
2242
|
code << " params.require(:#{require_name = model.name.underscore.tr('/', '_')
|
2248
2243
|
}).permit(#{permits_txt.join(', ')})\n"
|
2249
2244
|
code << " end\n"
|
@@ -2259,6 +2254,98 @@ class Object
|
|
2259
2254
|
[built_controller, code]
|
2260
2255
|
end
|
2261
2256
|
|
2257
|
+
def _brick_find_permits(model, current_permits)
|
2258
|
+
model.reflect_on_all_associations.select { |assoc| assoc.macro == :has_many }.each_with_object([]) do |assoc, s|
|
2259
|
+
if assoc.options[:through]
|
2260
|
+
current_permits << { "#{assoc.name.to_s.singularize}_ids".to_sym => [] }
|
2261
|
+
s << "#{assoc.name.to_s.singularize}_ids: []"
|
2262
|
+
elsif assoc.active_record.instance_methods.include?(:"#{assoc.name}_attributes=")
|
2263
|
+
# Support nested attributes which use the friendly_id gem
|
2264
|
+
self._brick_nested_friendly_id if Object.const_defined?('FriendlyId') &&
|
2265
|
+
assoc.klass.instance_variable_get(:@friendly_id_config)
|
2266
|
+
new_attrib_text = self._brick_find_permits(assoc.klass, (new_permits = assoc.klass.columns_hash.keys.map(&:to_sym)))
|
2267
|
+
new_permits << :_destroy
|
2268
|
+
current_permits << { "#{assoc.name}_attributes".to_sym => new_permits }
|
2269
|
+
s << "#{assoc.name}_attributes: #{new_attrib_text}"
|
2270
|
+
end
|
2271
|
+
end
|
2272
|
+
current_permits
|
2273
|
+
end
|
2274
|
+
|
2275
|
+
def _brick_nested_friendly_id
|
2276
|
+
unless @_brick_nested_friendly_id
|
2277
|
+
::ActiveRecord::Base.class_exec do
|
2278
|
+
if private_instance_methods.include?(:assign_nested_attributes_for_collection_association)
|
2279
|
+
alias _brick_anafca assign_nested_attributes_for_collection_association
|
2280
|
+
def assign_nested_attributes_for_collection_association(association_name, attributes_collection)
|
2281
|
+
association = association(association_name)
|
2282
|
+
slug_column = association.klass.instance_variable_get(:@friendly_id_config)&.slug_column
|
2283
|
+
return _brick_anafca unless slug_column
|
2284
|
+
|
2285
|
+
# Here is the FriendlyId version of #assign_nested_attributes_for_collection_association
|
2286
|
+
options = nested_attributes_options[association_name]
|
2287
|
+
attributes_collection = attributes_collection.to_h if attributes_collection.respond_to?(:permitted?)
|
2288
|
+
|
2289
|
+
unless attributes_collection.is_a?(Hash) || attributes_collection.is_a?(Array)
|
2290
|
+
raise ArgumentError, "Hash or Array expected for attribute `#{association_name}`, got #{attributes_collection.class.name} (#{attributes_collection.inspect})"
|
2291
|
+
end
|
2292
|
+
|
2293
|
+
check_record_limit!(options[:limit], attributes_collection)
|
2294
|
+
|
2295
|
+
if attributes_collection.is_a? Hash
|
2296
|
+
keys = attributes_collection.keys
|
2297
|
+
attributes_collection = if keys.include?("id") || keys.include?(:id)
|
2298
|
+
[attributes_collection]
|
2299
|
+
else
|
2300
|
+
attributes_collection.values
|
2301
|
+
end
|
2302
|
+
end
|
2303
|
+
existing_records = if association.loaded?
|
2304
|
+
association.target
|
2305
|
+
else
|
2306
|
+
attribute_ids = attributes_collection.filter_map { |a| a["id"] || a[:id] }
|
2307
|
+
if attribute_ids.empty?
|
2308
|
+
[]
|
2309
|
+
else # Implement the same logic as "friendly" scope
|
2310
|
+
association.scope.where(association.klass.primary_key => attribute_ids)
|
2311
|
+
.or(association.scope.where(slug_column => attribute_ids))
|
2312
|
+
end
|
2313
|
+
end
|
2314
|
+
attributes_collection.each do |attributes|
|
2315
|
+
attributes = attributes.to_h if attributes.respond_to?(:permitted?)
|
2316
|
+
attributes = attributes.with_indifferent_access
|
2317
|
+
if attributes["id"].blank? && attributes[slug_column].blank?
|
2318
|
+
unless reject_new_record?(association_name, attributes)
|
2319
|
+
association.reader.build(attributes.except(*::ActiveRecord::Base::UNASSIGNABLE_KEYS))
|
2320
|
+
end
|
2321
|
+
elsif (attr_id_str = attributes["id"].to_s) &&
|
2322
|
+
(existing_record = existing_records.detect { |record| record.id.to_s == attr_id_str ||
|
2323
|
+
record.send(slug_column).to_s == attr_id_str })
|
2324
|
+
unless call_reject_if(association_name, attributes)
|
2325
|
+
# Make sure we are operating on the actual object which is in the association's
|
2326
|
+
# proxy_target array (either by finding it, or adding it if not found)
|
2327
|
+
# Take into account that the proxy_target may have changed due to callbacks
|
2328
|
+
target_record = association.target.detect { |record| record.id.to_s == attr_id_str ||
|
2329
|
+
record.send(slug_column).to_s == attr_id_str }
|
2330
|
+
if target_record
|
2331
|
+
existing_record = target_record
|
2332
|
+
else
|
2333
|
+
association.add_to_target(existing_record, skip_callbacks: true)
|
2334
|
+
end
|
2335
|
+
|
2336
|
+
assign_to_or_mark_for_destruction(existing_record, attributes, options[:allow_destroy])
|
2337
|
+
end
|
2338
|
+
else
|
2339
|
+
raise_nested_attributes_record_not_found!(association_name, attributes["id"])
|
2340
|
+
end
|
2341
|
+
end
|
2342
|
+
end # anafca
|
2343
|
+
end
|
2344
|
+
end if ::ActiveRecord::QueryMethods.instance_methods.include?(:or)
|
2345
|
+
@_brick_nested_friendly_id = true
|
2346
|
+
end
|
2347
|
+
end
|
2348
|
+
|
2262
2349
|
def _brick_get_hm_assoc_name(relation, hm_assoc, source = nil)
|
2263
2350
|
assoc_name, needs_class = if (relation[:hm_counts][hm_assoc[:inverse_table]]&.> 1) &&
|
2264
2351
|
hm_assoc[:alternate_name] != (source || name.underscore)
|
data/lib/brick/version_number.rb
CHANGED
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.150
|
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-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|