brick 1.0.250 → 1.0.252

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8dfd58af439d004894147bf5e1e568c791e2044d48f945aa22fa89a8e46d3efa
4
- data.tar.gz: 166b4869016f55f710f4124e8eb9d1ca4531c29a5e4c83e7c32dc661cf429c21
3
+ metadata.gz: 7bb30040fa7e3a7e755f0d853559f3fe2c9d2dc94af4b6ffbaceb39ef41d981f
4
+ data.tar.gz: 21642081c09d80c40b585ee838a8d4436254f4746cf4798e4cfa6eaf04cdccf7
5
5
  SHA512:
6
- metadata.gz: 354fa85b9c8e24c6bfd3a970de0fa93aec8daede747bb14a32d9c9a8ead95e19a38bbad646b70fd74c5d8aed24a55b31c9acdf9a9ea4570b8d5f24853961f484
7
- data.tar.gz: '0367903f7ff42ec1ac644b08e8462bf6297fccb34fac5f7cd92eb0f365e6af2e44c93d3a7bf216bf004366ba45a73f916607e2ff67141bfb1a68fc540fed5b65'
6
+ metadata.gz: ff10a4dc80c8e663be90c6c6e2b489763312c81834b2303b91799354b91b0bfd8b3d54343ab8ebc17665e17b5a039a53b336822d4529509d1d9f6ba588b403c1
7
+ data.tar.gz: '0912de41a2ee1651470e764234fd7394adcba3b16b618fd20359038010fb37a182746b386816fb5673eef7a0848b472fbdec9cea846dd510614cb6286e7b1403'
@@ -74,8 +74,9 @@ module ActiveRecord
74
74
 
75
75
  # Accommodate STI
76
76
  def find_real_model(params)
77
- if params && ((sub_name = params.fetch(inheritance_column, nil)).present? ||
78
- (sub_name = params[name.underscore]&.fetch(inheritance_column, nil)))
77
+ if params && ((sub_name = params.fetch(inh_col = "__#{inheritance_column}", nil)).present? ||
78
+ (sub_name = params[name.underscore]&.fetch(inh_col, nil)))
79
+ sub_name = sub_name.split(',') if sub_name.include?(',')
79
80
  sub_name = sub_name.first if sub_name.is_a?(Array) # Support the params style that gets returned from #_brick_querying
80
81
  # Make sure the chosen model is really the same or a subclass of this model
81
82
  return self if sub_name.blank?
@@ -128,6 +129,11 @@ module ActiveRecord
128
129
  end
129
130
  case ks.length
130
131
  when 1
132
+ if k == self.inheritance_column && self.name == v && (children = self.descendants).present?
133
+ # Modifying only the underlying where_values_hash is enough to cause inheritance_column types to work properly.
134
+ v << children.map { |sti_child| ",#{sti_child.name}" }.join
135
+ next
136
+ end
131
137
  next unless self.column_names.any?(where_col) || self._brick_get_fks.include?(where_col)
132
138
  when 2
133
139
  assoc_name = ks.first.to_sym
@@ -483,24 +489,24 @@ module ActiveRecord
483
489
  @_br_cust_cols ||= {}
484
490
  end
485
491
 
486
- def _brick_find_permits(model_or_assoc, current_permits, is_for_expects = nil, done_permits = [])
487
- unless done_permits.include?(model_or_assoc)
488
- done_permits << model_or_assoc
489
- self.reflect_on_all_associations.select { |assoc| !assoc.belongs_to? }.each_with_object([]) do |assoc, s|
490
- if assoc.options[:through]
491
- current_permits << { "#{assoc.name.to_s.singularize}_ids".to_sym => [] }
492
- s << "#{assoc.name.to_s.singularize}_ids: []"
493
- end
494
- if self.instance_methods.include?(:"#{assoc.name}_attributes=")
495
- # Support nested attributes which use the friendly_id gem
496
- assoc.klass._brick_nested_friendly_id if Object.const_defined?('FriendlyId') &&
497
- assoc.klass.instance_variable_get(:@friendly_id_config)
498
- new_attrib_text = assoc.klass._brick_find_permits(assoc, (new_permits = assoc.klass._brick_all_fields), done_permits)
499
- new_permits << :_destroy
500
- new_permits = [new_permits] if is_for_expects
501
- current_permits << { "#{assoc.name}_attributes".to_sym => new_permits }
502
- s << "#{assoc.name}_attributes: #{new_attrib_text}"
503
- end
492
+ def _brick_find_permits(current_permits, is_for_expects = nil, done_models = [])
493
+ return current_permits if done_models.include?(self)
494
+
495
+ done_models << self
496
+ self.reflect_on_all_associations.select { |assoc| !assoc.belongs_to? }.each do |assoc|
497
+ if assoc.options[:through]
498
+ current_permits << { "#{assoc.name.to_s.singularize}_ids".to_sym => [] }
499
+ end
500
+ if self.instance_methods.include?(:"#{assoc.name}_attributes=")
501
+ next if assoc.source_reflection.nil?
502
+
503
+ # Support nested attributes which use the friendly_id gem
504
+ assoc.klass._brick_nested_friendly_id if Object.const_defined?('FriendlyId') &&
505
+ assoc.klass.instance_variable_get(:@friendly_id_config)
506
+ assoc.klass._brick_find_permits((new_permits = assoc.klass._brick_all_fields), is_for_expects, done_models)
507
+ new_permits << :_destroy
508
+ new_permits = [new_permits] if is_for_expects
509
+ current_permits << { "#{assoc.name}_attributes".to_sym => new_permits }
504
510
  end
505
511
  end
506
512
  current_permits
@@ -1109,9 +1115,9 @@ JOIN (SELECT #{hm_selects.map { |s| _br_quoted_name("#{'br_t0.' if from_clause}#
1109
1115
  end
1110
1116
  tbl_and_col_name << v_parts.last
1111
1117
  if v.last.is_a?(String) && ['>', '<'].include?(first_char = v.last.first[0]) # Greater than or less than?
1112
- col_name = v.last.first[1..-1]
1113
- col_name = "'#{col_name}'" unless [:integer, :boolean, :decimal, :float].include?(klass.columns_hash[v.first].type)
1114
- where_comparisons << "#{tbl_and_col_name.join('.')} #{first_char} #{col_name}"
1118
+ val = v.last.first[1..-1]
1119
+ val = "'#{val}'" unless [:integer, :boolean, :decimal, :float].include?(klass.columns_hash[v.first].type)
1120
+ where_comparisons << "#{tbl_and_col_name.join('.')} #{first_char} #{val}"
1115
1121
  else
1116
1122
  (is_not ? where_nots : s)[tbl_and_col_name.join('.')] = v.last
1117
1123
  end
@@ -1836,7 +1842,7 @@ class Object
1836
1842
  code << " has_secure_password\n"
1837
1843
  end
1838
1844
  # Accommodate singular or camel-cased table names such as "order_detail" or "OrderDetails"
1839
- code << " self.table_name = '#{self.table_name = matching}'\n" if (inheritable_name || model_name).underscore.pluralize != matching
1845
+ code << " self.table_name = '#{self.table_name = matching}'\n" if table_name != matching
1840
1846
 
1841
1847
  if (inh_col = relation.fetch(:sti_col, nil) ||
1842
1848
  ::Brick.config.sti_type_column.find { |_k, v| v.include?(matching) }&.first)
@@ -1877,7 +1883,7 @@ class Object
1877
1883
  if our_pks.length > 1 && pk_mutator
1878
1884
  new_model_class.send(pk_mutator, our_pks)
1879
1885
  code << " self.#{pk_mutator[0..-2]} = #{our_pks.map(&:to_sym).inspect}\n"
1880
- else
1886
+ elsif new_model_class.primary_key != our_pks.first
1881
1887
  new_model_class.primary_key = (pk_sym = our_pks.first.to_sym)
1882
1888
  code << " self.primary_key = #{pk_sym.inspect}\n"
1883
1889
  end
@@ -2872,7 +2878,7 @@ class Object
2872
2878
  code << " def #{params_name}\n"
2873
2879
  require_txt = model.base_class.name.underscore.tr('/', '_')
2874
2880
  is_for_expects = ::ActiveSupport.version >= ::Gem::Version.new('8.0a')
2875
- permits = model._brick_find_permits(model, model._brick_all_fields(true), is_for_expects)
2881
+ permits = model._brick_find_permits(model._brick_all_fields(true), is_for_expects)
2876
2882
  if is_for_expects
2877
2883
  code << " params.expect(#{require_txt}: #{permits})\n"
2878
2884
  self.define_method(params_name) do
@@ -705,7 +705,7 @@ window.addEventListener(\"popstate\", linkSchemas);
705
705
 
706
706
  if @_brick_model
707
707
  pk = @_brick_model._brick_primary_key(::Brick.relations.fetch((table_name = @_brick_model.table_name.split('.').last), nil))
708
- rn_start = (mn_split = model_name.split('::')).length > 1 ? -2 : -1
708
+ rn_start = (mn_split = @_brick_model.base_class.name.split('::')).length > 1 ? -2 : -1
709
709
  obj_name = mn_split[rn_start..-1].join.underscore.singularize
710
710
  res_name = obj_name.pluralize
711
711
 
@@ -1130,7 +1130,7 @@ end
1130
1130
  %><% end %></h3><%
1131
1131
  end %><%
1132
1132
  end %>
1133
- <span class=\"__brick\">(<%= link_to \"See all #\{model.base_class.name.split('::').last.pluralize}\", #{@_brick_model._brick_index}_path %>)</span>
1133
+ <span class=\"__brick\">(<%= link_to \"See all #\{base_model.name.split('::').last.pluralize}\", #{@_brick_model._brick_index}_path %>)</span>
1134
1134
  <% end %><%
1135
1135
  # COLUMN EXCLUSIONS
1136
1136
  if @_brick_excl&.present? %>
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 250
8
+ TINY = 252
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.250
4
+ version: 1.0.252
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits