brick 1.0.249 → 1.0.251

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: 6a0179dae81efe75fe8ed60f18a8bcad431cd98db8604eadf7efba5ef200798f
4
- data.tar.gz: fa409b53922fc28f8d0e0ef4753b0545efc27ae2c92fdf2f2249508d311137dc
3
+ metadata.gz: 7f3523afa6d066b034bb48321fee476541b520db03a6414a6bbb3ce7eb6fef68
4
+ data.tar.gz: 2a7db114267da1de863e4d225c09983585e04674a92c4d3c7d21c2eadf9ce1d8
5
5
  SHA512:
6
- metadata.gz: 95ad49630d116d9fc1ca4c29065caeef4bbff0c688f4cadc64aed81b9611d057a628168ab2bd69d8958e4aa79c6caf4a2715ae2979c60741f081ddfc0fb41db5
7
- data.tar.gz: a8e9d742f3207b58ff4069e3efd57a02cfa25f6c267db72ca1e725b10bc3fd29fddcaca2dd19c6501aaa4003cafc515d413789539c838f4d24cc668785776111
6
+ metadata.gz: ca9c7a8a90956bbfce0af44e21bace777bc988653173c854e59b783c05d7016ab0407015367ea7e5b075f6ab88416e3caf8825653f208d781c3ff86e82baf610
7
+ data.tar.gz: c93ba7596bfe01d8850178a2334d952fff29e2e4b76e0d5db22a081a8d05151cd64287caa81769a6401fd8f31c3bd9fad6bd50ca4c2081fa245376ef0c591254
@@ -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
@@ -441,7 +447,7 @@ module ActiveRecord
441
447
  CGI.escapeHTML(assoc_name)
442
448
  end
443
449
  model_path = ::Rails.application.routes.url_helpers.send("#{_brick_index || table_name}_path".to_sym)
444
- model_path << "?#{self.inheritance_column}=#{self.name}" if self != base_class
450
+ model_path << "__?#{self.inheritance_column}=#{self.name}" if self != base_class
445
451
  av_class = Class.new.extend(ActionView::Helpers::UrlHelper)
446
452
  av_class.extend(ActionView::Helpers::TagHelper) if ActionView.version < ::Gem::Version.new('7')
447
453
  link = av_class.link_to(assoc_html_name ? name : assoc_name, model_path)
@@ -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.any? { |dp| self <= dp }
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
 
@@ -1098,7 +1098,7 @@ if (window.brickFontFamily) {
1098
1098
  until this_model == base_model do
1099
1099
  this_model = this_model.superclass
1100
1100
  path = send(\"#\{this_model._brick_index}_path\")
1101
- path << \"?#\{base_model.inheritance_column}=#\{this_model.name}\" unless this_model == base_model
1101
+ path << \"?__#\{base_model.inheritance_column}=#\{this_model.name}\" unless this_model == base_model
1102
1102
  parent_links << link_to(this_model.name, path)
1103
1103
  end
1104
1104
  \"<tr><td colspan=\\\"#\{td_count}\\\">Parent: #\{parent_links.join(' ')}</tr>\".html_safe
@@ -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? %>
@@ -1406,7 +1406,7 @@ s << \"\\n <br>\\n\"
1406
1406
  #{(inh_col = @_brick_model.inheritance_column).present? &&
1407
1407
  " if obj.respond_to?(:#{inh_col}) && (model_name = @#{obj_name}.#{inh_col}) &&
1408
1408
  !model_name.is_a?(Numeric) && model_name != base_model.name
1409
- see_all_path << \"?#{inh_col}=#\{model_name}\"
1409
+ see_all_path << \"?__#{inh_col}=#\{model_name}\"
1410
1410
  end
1411
1411
  model_name = base_model.name if model_name.is_a?(Numeric)"}
1412
1412
  model_name = nil if model_name == ''
@@ -1647,7 +1647,7 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
1647
1647
  var mermaidCode;
1648
1648
  var cbs = {<%= callbacks.map do |k, v|
1649
1649
  path = send(\"#\{v._brick_index}_path\".to_sym)
1650
- path << \"?#\{v.base_class.inheritance_column}=#\{v.name}\" unless v == v.base_class
1650
+ path << \"?__#\{v.base_class.inheritance_column}=#\{v.name}\" unless v == v.base_class
1651
1651
  \"#\{k}: \\\"#\{path}\\\"\"
1652
1652
  end.join(', ').html_safe %>};
1653
1653
  if (imgErd) imgErd.addEventListener(\"click\", showErd);
@@ -807,7 +807,7 @@ function onImagesLoaded(event) {
807
807
  klass, sti_type, rel_name = ::Brick.ctrl_to_klass(controller_path)
808
808
  if klass
809
809
  type_col = klass.inheritance_column # Usually 'type'
810
- filter_parts << "#{type_col}=#{sti_type}" if sti_type && klass.column_names.include?(type_col)
810
+ filter_parts << "__#{type_col}=#{sti_type}" if sti_type && klass.column_names.include?(type_col)
811
811
  path_params = request.path_parameters
812
812
  pk = (klass.primary_key || ActiveRecord::Base.primary_key).to_sym
813
813
  if ((id = (path_params[pk] || path_params[:id] || path_params["#{klass.name.underscore}_id".to_sym])) && (obj = klass.find_by(pk => id))) ||
@@ -829,7 +829,7 @@ function onImagesLoaded(event) {
829
829
  .pluck(assoc_klass.primary_key).first)
830
830
  foreign_id = new_id
831
831
  end
832
- filter_parts << "#{path_param}=#{foreign_id}"
832
+ filter_parts << "__#{path_param}=#{foreign_id}"
833
833
  end
834
834
  klass
835
835
  end
@@ -839,7 +839,7 @@ function onImagesLoaded(event) {
839
839
  if klass_or_obj
840
840
  if klass_or_obj.is_a?(ActiveRecord::Relation)
841
841
  klass_or_obj.where_values_hash.each do |whr|
842
- filter_parts << "#{whr.first}=#{whr.last}" if whr.last && !whr.last.is_a?(Array)
842
+ filter_parts << "__#{whr.first}=#{whr.last}" if whr.last && !whr.last.is_a?(Array)
843
843
  end
844
844
  klass_or_obj = klass_or_obj.klass
845
845
  end
@@ -849,7 +849,7 @@ function onImagesLoaded(event) {
849
849
  if klass_or_obj.is_a?(Class) && klass_or_obj <= ActiveRecord::Base
850
850
  type_col = klass_or_obj.inheritance_column
851
851
  if klass_or_obj.column_names.include?(type_col) && klass_or_obj.name != klass_or_obj.base_class.name
852
- filter_parts << "#{type_col}=#{klass_or_obj.name}"
852
+ filter_parts << "__#{type_col}=#{klass_or_obj.name}"
853
853
  end
854
854
  end
855
855
  filter = "?#{filter_parts.join('&')}" if filter_parts.present?
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 249
8
+ TINY = 251
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.249
4
+ version: 1.0.251
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits