brick 1.0.43 → 1.0.44

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: 8387796a98b0bcf24586c6b31f091cfdc4cca1b45b73d02de3bdba17430625f7
4
- data.tar.gz: 1c7509e21a1a9a6c8c52f3015b0a7e34222ff944433e028be314f8525ee948b8
3
+ metadata.gz: 0d43e8d88203f6496d0e86f57a3de2638f254a74da070d6a0f0ae107bf596a87
4
+ data.tar.gz: d5ce2e3814f36fa758762e3c4774032c70ce18a101cdd1e30622dd86c757ab1a
5
5
  SHA512:
6
- metadata.gz: 75222971d2407d8ffb3b8412694da3fe6ad0d3f27f147159f6d75aa712d1dfe8a9d54627cb2c816fdfc8cb7c44de4407f180fbc559b9c811719c22a016c913f5
7
- data.tar.gz: 44e03a9d2ddec85969d5b1aca67a9426a4b3dd33f196c058d57b380fa77e78424768dd3e97a40227b2372bec4ccd81dfd1b7760b65e2c5b292c8b47c0d27e2c7
6
+ metadata.gz: 36b8bf590c1d980655b8c465e52659fdbcdf3e13b7050e46dcb41c2b3fba44ebc9ff14db823afddbb49b3e6b736a33fa1ef794ed6062aba4e35ade3cd95c5bbd
7
+ data.tar.gz: d1bd0954d0400068aaf8f7c83cc599f283fbe9c75e347fd4193d1fa3973c0d2bd3198f3265990cd3d24f406cd3b55f3174518bd6a991801c75a06d1c749cc157
@@ -354,6 +354,7 @@ module ActiveRecord
354
354
  next if bt[2] # Polymorphic?
355
355
 
356
356
  # join_array will receive this relation name when calling #brick_parse_dsl
357
+ # binding.pry if bt.length > 2
357
358
  bt_descrip[bt.first] = if bt[1].is_a?(Array)
358
359
  bt[1].each_with_object({}) { |bt_class, s| s[bt_class] = bt_class.brick_parse_dsl(join_array, bt.first, translations, true) }
359
360
  else
@@ -364,7 +365,12 @@ module ActiveRecord
364
365
  hms.each do |k, hm|
365
366
  next if skip_klass_hms.key?(k)
366
367
 
367
- hm_counts[k] = hm
368
+ if hm.macro == :has_one
369
+ # For our purposes a :has_one is similar enough to a :belongs_to that we can just join forces
370
+ bt_descrip[k] = { hm.klass => hm.klass.brick_parse_dsl(join_array, k, translations) }
371
+ else # Standard :has_many
372
+ hm_counts[k] = hm
373
+ end
368
374
  end
369
375
  end
370
376
 
@@ -650,10 +656,11 @@ class Object
650
656
  private
651
657
 
652
658
  def build_model(schema_name, inheritable_name, model_name, singular_table_name, table_name, relations, matching)
653
- full_name = if (::Brick.config.schema_behavior[:multitenant] && Object.const_defined?('Apartment') && schema_name == Apartment.default_schema)
654
- relation = relations["#{schema_name}.#{matching}"]
655
- inheritable_name || model_name
656
- elsif schema_name.blank?
659
+ if ::Brick.config.schema_behavior[:multitenant] && Object.const_defined?('Apartment') &&
660
+ schema_name == Apartment.default_schema
661
+ relation = relations["#{schema_name}.#{matching}"]
662
+ end
663
+ full_name = if relation || schema_name.blank?
657
664
  inheritable_name || model_name
658
665
  else # Prefix the schema to the table name + prefix the schema namespace to the class name
659
666
  schema_module = if schema_name.instance_of?(Module) # from an auto-STI namespace?
@@ -749,10 +756,10 @@ class Object
749
756
  if assoc[:is_bt]
750
757
  invs = invs.first # Just do the first one of what would be multiple identical polymorphic belongs_to
751
758
  else
752
- invs.each { |inv| build_bt_or_hm(relations, model_name, relation, hmts, assoc, inverse_assoc_name, inv, code) }
759
+ invs.each { |inv| build_bt_or_hm(full_name, relations, relation, hmts, assoc, inverse_assoc_name, inv, code) }
753
760
  end
754
761
  end
755
- build_bt_or_hm(relations, model_name, relation, hmts, assoc, inverse_assoc_name, invs, code) unless invs.is_a?(Array)
762
+ build_bt_or_hm(full_name, relations, relation, hmts, assoc, inverse_assoc_name, invs, code) unless invs.is_a?(Array)
756
763
  hmts
757
764
  end
758
765
  # # Not NULLables
@@ -804,7 +811,7 @@ class Object
804
811
  [built_model, code]
805
812
  end
806
813
 
807
- def build_bt_or_hm(relations, model_name, relation, hmts, assoc, inverse_assoc_name, inverse_table, code)
814
+ def build_bt_or_hm(full_name, relations, relation, hmts, assoc, inverse_assoc_name, inverse_table, code)
808
815
  singular_table_name = inverse_table&.singularize
809
816
  options = {}
810
817
  macro = if assoc[:is_bt]
@@ -826,8 +833,14 @@ class Object
826
833
  end
827
834
  if (inverse = assoc[:inverse])
828
835
  inverse_assoc_name, _x = _brick_get_hm_assoc_name(relations[inverse_table], inverse)
829
- has_ones = ::Brick.config.has_ones&.fetch(inverse[:alternate_name].camelize, nil)
830
- if has_ones&.key?(singular_inv_assoc_name = ActiveSupport::Inflector.singularize(inverse_assoc_name))
836
+ # If it's multitenant with something like: public.____ ...
837
+ if (it_parts = inverse_table.split('.')).length > 1 &&
838
+ ::Brick.config.schema_behavior[:multitenant] && Object.const_defined?('Apartment') &&
839
+ it_parts.first == Apartment.default_schema
840
+ it_parts.shift # ... then ditch the generic schema name
841
+ end
842
+ has_ones = ::Brick.config.has_ones&.fetch(it_parts.join('/').singularize.camelize, nil)
843
+ if has_ones&.key?(singular_inv_assoc_name = ActiveSupport::Inflector.singularize(inverse_assoc_name.tr('.', '_')))
831
844
  inverse_assoc_name = if has_ones[singular_inv_assoc_name]
832
845
  need_inverse_of = true
833
846
  has_ones[singular_inv_assoc_name]
@@ -838,7 +851,6 @@ class Object
838
851
  end
839
852
  :belongs_to
840
853
  else
841
- # need_class_name = ActiveSupport::Inflector.singularize(assoc_name) == ActiveSupport::Inflector.singularize(table_name.underscore)
842
854
  # Are there multiple foreign keys out to the same table?
843
855
  assoc_name, need_class_name = _brick_get_hm_assoc_name(relation, assoc)
844
856
  if assoc.key?(:polymorphic)
@@ -846,8 +858,8 @@ class Object
846
858
  else
847
859
  need_fk = "#{ActiveSupport::Inflector.singularize(assoc[:inverse][:inverse_table].split('.').last)}_id" != assoc[:fk]
848
860
  end
849
- # fks[table_name].find { |other_assoc| other_assoc.object_id != assoc.object_id && other_assoc[:assoc_name] == assoc[assoc_name] }
850
- if (has_ones = ::Brick.config.has_ones&.fetch(model_name, nil))&.key?(singular_assoc_name = ActiveSupport::Inflector.singularize(assoc_name))
861
+ has_ones = ::Brick.config.has_ones&.fetch(full_name, nil)
862
+ if has_ones&.key?(singular_assoc_name = ActiveSupport::Inflector.singularize(assoc_name.tr('.', '_')))
851
863
  assoc_name = if (custom_assoc_name = has_ones[singular_assoc_name])
852
864
  need_class_name = custom_assoc_name != singular_assoc_name
853
865
  custom_assoc_name
@@ -129,7 +129,11 @@ module Brick
129
129
  "#{assoc_name}\n"
130
130
  end
131
131
  else # has_one
132
- "<%= obj = #{obj_name}.#{hm.first}; link_to(obj.brick_descrip, obj) if obj %>\n"
132
+ # 0..62 because Postgres column names are limited to 63 characters
133
+ "<%= descrips = @_brick_bt_descrip[#{hm.first.inspect}][ho_class = #{hm[1].klass.name}]
134
+ ho_txt = ho_class.brick_descrip(#{obj_name}, descrips[0..-2].map { |id| #{obj_name}.send(id.last[0..62]) }, (ho_id_col = descrips.last))
135
+ ho_id = ho_id_col.map { |id_col| #{obj_name}.send(id_col.to_sym) }
136
+ ho_id&.first ? link_to(ho_txt, send(\"#\{ho_class.base_class.name.underscore.tr('/', '_')\}_path\".to_sym, ho_id)) : ho_txt %>\n"
133
137
  end
134
138
  when 'show', 'update'
135
139
  hm_stuff << if hm_fk_name
@@ -574,11 +578,11 @@ if (headerTop) {
574
578
  else
575
579
  bt_txt = (bt_class = bt[1].first.first).brick_descrip(
576
580
  # 0..62 because Postgres column names are limited to 63 characters
577
- #{obj_name}, (descrips = @_brick_bt_descrip[bt.first][bt_class])[0..-2].map { |z| #{obj_name}.send(z.last[0..62]) }, (bt_id_col = descrips.last)
581
+ #{obj_name}, (descrips = @_brick_bt_descrip[bt.first][bt_class])[0..-2].map { |id| #{obj_name}.send(id.last[0..62]) }, (bt_id_col = descrips.last)
578
582
  )
579
583
  bt_txt ||= \"<< Orphaned ID: #\{val} >>\" if val
580
- bt_id = #{obj_name}.send(*bt_id_col) if bt_id_col&.present? %>
581
- <%= bt_id ? link_to(bt_txt, send(\"#\{bt_class.base_class.name.underscore.tr('/', '_')\}_path\".to_sym, bt_id)) : bt_txt %>
584
+ bt_id = bt_id_col.map { |id_col| #{obj_name}.send(id_col.to_sym) } if bt_id_col&.present? %>
585
+ <%= bt_id&.first ? link_to(bt_txt, send(\"#\{bt_class.base_class.name.underscore.tr('/', '_')\}_path\".to_sym, bt_id)) : bt_txt %>
582
586
  <%#= Previously was: bt_obj = bt[1].first.first.find_by(bt[2] => val); link_to(bt_obj.brick_descrip, send(\"#\{bt[1].first.first.name.underscore\}_path\".to_sym, bt_obj.send(bt[1].first.first.primary_key.to_sym))) if bt_obj %>
583
587
  <% end %>
584
588
  <% else %>
@@ -697,10 +701,6 @@ end
697
701
  <% when :boolean %>
698
702
  <%= f.check_box k.to_sym %><svg class=\"revert\" width=\"1.5em\" viewBox=\"0 0 512 512\"><use xlink:href=\"#revertPath\" /></svg>
699
703
  <% when :integer, :decimal, :float
700
- # What happens when keys are UUID?
701
- # Postgres naturally uses the +uuid_generate_v4()+ function from the uuid-ossp extension
702
- # If it's not yet enabled then: enable_extension 'uuid-ossp'
703
- # ActiveUUID gem created a new :uuid type %>
704
704
  <%= if col_type == :integer
705
705
  f.text_field k.to_sym, { pattern: '\\d*', class: 'check-validity' }
706
706
  else
@@ -709,6 +709,11 @@ end
709
709
  <% when *dt_pickers.keys
710
710
  is_includes_dates = true %>
711
711
  <%= f.text_field k.to_sym, { class: dt_pickers[col_type] } %><svg class=\"revert\" width=\"1.5em\" viewBox=\"0 0 512 512\"><use xlink:href=\"#revertPath\" /></svg>
712
+ <% when :uuid %>
713
+ # Postgres naturally uses the +uuid_generate_v4()+ function from the uuid-ossp extension
714
+ # If it's not yet enabled then: enable_extension 'uuid-ossp'
715
+ # ActiveUUID gem created a new :uuid type %>
716
+ <%= val %>
712
717
  <% when :binary, :primary_key %>
713
718
  <% end %>
714
719
  <% end %>
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 43
8
+ TINY = 44
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
@@ -224,7 +224,7 @@ module Brick
224
224
  # # Database schema to use when analysing existing data, such as deriving a list of polymorphic classes in the case that
225
225
  # # it wasn't originally specified.
226
226
  # Brick.schema_behavior = :namespaced
227
- #{Brick.config.schema_behavior ? "Brick.schema_behavior = { multitenant: { schema_to_analyse: #{
227
+ #{Brick.config.schema_behavior.present? ? "Brick.schema_behavior = { multitenant: { schema_to_analyse: #{
228
228
  Brick.config.schema_behavior[:multitenant]&.fetch(:schema_to_analyse, nil).inspect}" :
229
229
  "# Brick.schema_behavior = { multitenant: { schema_to_analyse: 'engineering'"
230
230
  } } }
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.43
4
+ version: 1.0.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-11 00:00:00.000000000 Z
11
+ date: 2022-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord