brick 1.0.81 → 1.0.82
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/brick/extensions.rb +22 -13
- data/lib/brick/frameworks/rails/engine.rb +16 -8
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +9 -11
- data/lib/generators/brick/install_generator.rb +3 -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: 74df340edd3b41626ea7f72409064b27ae10ddfd6eb41dd66ecc6704044156bd
|
4
|
+
data.tar.gz: 82181c7ffe7a26b6ab02bfc4faaedf031d78e5e4880f6316e1ea2143da8a9655
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 644d3d343e774f8682a575c8fad849c27ee60c279e30a689874b608f056b1aee39a936ec85e91878d2200deeaf49ad78188866b6548ccf6dae43fbadbe80752a
|
7
|
+
data.tar.gz: '09f1f3383f9db0f3519215bb372a238478a0ae5176090bd2992a4f43f6e41b8aaef9f2a449573413ee886cc08cd94b868e0ec81a822b20d8dd0cc9e4eebf635e'
|
data/lib/brick/extensions.rb
CHANGED
@@ -59,6 +59,10 @@ end
|
|
59
59
|
|
60
60
|
module ActiveRecord
|
61
61
|
class Base
|
62
|
+
def self.is_brick?
|
63
|
+
instance_variables.include?(:@_brick_built) && instance_variable_get(:@_brick_built)
|
64
|
+
end
|
65
|
+
|
62
66
|
def self._assoc_names
|
63
67
|
@_assoc_names ||= {}
|
64
68
|
end
|
@@ -521,7 +525,7 @@ module ActiveRecord
|
|
521
525
|
# CUSTOM COLUMNS
|
522
526
|
# ==============
|
523
527
|
klass._br_cust_cols.each do |k, cc|
|
524
|
-
if respond_to?(k) # Name already taken?
|
528
|
+
if rel_dupe.respond_to?(k) # Name already taken?
|
525
529
|
# %%% Use ensure_unique here in this kind of fashion:
|
526
530
|
# cnstr_name = ensure_unique(+"(brick) #{for_tbl}_#{pri_tbl}", bts, hms)
|
527
531
|
# binding.pry
|
@@ -641,11 +645,13 @@ module ActiveRecord
|
|
641
645
|
[a.table_name, a.foreign_key, a.source_reflection.macro]
|
642
646
|
end
|
643
647
|
next if bail_out
|
648
|
+
|
644
649
|
# count_column is determined from the originating HMT member
|
645
650
|
if (src_ref = hm.source_reflection).nil?
|
646
651
|
puts "*** Warning: Could not determine destination model for this HMT association in model #{klass.name}:\n has_many :#{hm.name}, through: :#{hm.options[:through]}"
|
652
|
+
puts
|
647
653
|
nix << k
|
648
|
-
|
654
|
+
next
|
649
655
|
elsif src_ref.macro == :belongs_to # Traditional HMT using an associative table
|
650
656
|
"br_t#{idx}.#{hm.foreign_key}"
|
651
657
|
else # A HMT that goes HM -> HM, something like Categories -> Products -> LineItems
|
@@ -676,15 +682,15 @@ module ActiveRecord
|
|
676
682
|
pri_tbl.table_name
|
677
683
|
end
|
678
684
|
on_clause = []
|
679
|
-
if fk_col.is_a?(Array) # Composite key?
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
685
|
+
hm_selects = if fk_col.is_a?(Array) # Composite key?
|
686
|
+
fk_col.each_with_index { |fk_col_part, idx| on_clause << "#{tbl_alias}.#{fk_col_part} = #{pri_tbl_name}.#{pri_tbl.primary_key[idx]}" }
|
687
|
+
fk_col.dup
|
688
|
+
else
|
689
|
+
on_clause << "#{tbl_alias}.#{fk_col} = #{pri_tbl_name}.#{pri_tbl.primary_key}"
|
690
|
+
[fk_col]
|
691
|
+
end
|
686
692
|
if poly_type
|
687
|
-
|
693
|
+
hm_selects << poly_type
|
688
694
|
on_clause << "#{tbl_alias}.#{poly_type} = '#{name}'"
|
689
695
|
end
|
690
696
|
unless from_clause
|
@@ -696,9 +702,9 @@ module ActiveRecord
|
|
696
702
|
hm.table_name
|
697
703
|
end
|
698
704
|
end
|
699
|
-
group_bys = ::Brick.is_oracle || is_mssql ?
|
705
|
+
group_bys = ::Brick.is_oracle || is_mssql ? hm_selects : (1..hm_selects.length).to_a
|
700
706
|
join_clause = "LEFT OUTER
|
701
|
-
JOIN (SELECT #{
|
707
|
+
JOIN (SELECT #{hm_selects.map { |s| "#{'br_t0.' if from_clause}#{s}" }.join(', ')}, COUNT(#{'DISTINCT ' if hm.options[:through]}#{count_column
|
702
708
|
}) AS c_t_ FROM #{from_clause || hm_table_name} GROUP BY #{group_bys.join(', ')}) #{tbl_alias}"
|
703
709
|
joins!("#{join_clause} ON #{on_clause.join(' AND ')}")
|
704
710
|
end
|
@@ -735,8 +741,10 @@ JOIN (SELECT #{selects.map { |s| "#{'br_t0.' if from_clause}#{s}" }.join(', ')},
|
|
735
741
|
else
|
736
742
|
s << v
|
737
743
|
end
|
738
|
-
else # String stuff just comes straight through
|
744
|
+
else # String stuff (which defines a custom ORDER BY) just comes straight through
|
739
745
|
s << v
|
746
|
+
# Avoid "PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list" in Postgres
|
747
|
+
selects << v if is_distinct
|
740
748
|
end
|
741
749
|
end
|
742
750
|
order!(*final_order_by)
|
@@ -1138,6 +1146,7 @@ class Object
|
|
1138
1146
|
end # class definition
|
1139
1147
|
# Having this separate -- will this now work out better?
|
1140
1148
|
built_model.class_exec do
|
1149
|
+
@_brick_built = true
|
1141
1150
|
hmts&.each do |hmt_fk, hms|
|
1142
1151
|
hmt_fk = hmt_fk.tr('.', '_')
|
1143
1152
|
hms.each do |hm|
|
@@ -130,15 +130,15 @@ module Brick
|
|
130
130
|
next unless @_brick_model.instance_methods.include?(through) &&
|
131
131
|
(associative = @_brick_model._br_associatives.fetch(hm.first, nil))
|
132
132
|
|
133
|
-
tbl_nm = if hm_assoc.
|
134
|
-
|
133
|
+
tbl_nm = if (source = hm_assoc.source_reflection).macro == :belongs_to
|
134
|
+
hm_assoc.through_reflection&.name # for standard HMT, which is HM -> BT
|
135
135
|
else
|
136
|
-
|
136
|
+
source.inverse_of&.name # For HM -> HM style HMT
|
137
137
|
end
|
138
138
|
# If there is no inverse available for the source belongs_to association, make one based on the class name
|
139
139
|
unless tbl_nm
|
140
140
|
tbl_nm = associative.class_name.underscore
|
141
|
-
tbl_nm.slice!(0) if tbl_nm[0] ==
|
141
|
+
tbl_nm.slice!(0) if tbl_nm[0] == '/'
|
142
142
|
tbl_nm = tbl_nm.tr('/', '_').pluralize
|
143
143
|
end
|
144
144
|
"'#{tbl_nm}.#{associative.foreign_key}'"
|
@@ -1331,10 +1331,18 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1331
1331
|
prepend ::Brick::RouteSet
|
1332
1332
|
end
|
1333
1333
|
# Do the root route before the Rails Welcome one would otherwise take precedence
|
1334
|
-
|
1335
|
-
|
1336
|
-
::
|
1337
|
-
|
1334
|
+
if (route = ::Brick.config.default_route_fallback).present?
|
1335
|
+
action = "#{route}#{'#index' unless route.index('#')}"
|
1336
|
+
if ::Brick.config.path_prefix
|
1337
|
+
::Rails.application.routes.append do
|
1338
|
+
send(:namespace, ::Brick.config.path_prefix) do
|
1339
|
+
send(:root, action)
|
1340
|
+
end
|
1341
|
+
end
|
1342
|
+
elsif ::Rails.application.routes.named_routes.send(:routes)[:root].nil?
|
1343
|
+
::Rails.application.routes.append do
|
1344
|
+
send(:root, action)
|
1345
|
+
end
|
1338
1346
|
end
|
1339
1347
|
end
|
1340
1348
|
end
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -113,15 +113,15 @@ if Gem::Specification.all_names.any? { |g| g.start_with?('rails-') }
|
|
113
113
|
require 'brick/frameworks/rails'
|
114
114
|
end
|
115
115
|
module Brick
|
116
|
-
|
117
|
-
|
118
|
-
|
116
|
+
class << self
|
117
|
+
def sti_models
|
118
|
+
@sti_models ||= {}
|
119
|
+
end
|
119
120
|
|
120
|
-
|
121
|
-
|
122
|
-
|
121
|
+
def existing_stis
|
122
|
+
@existing_stis ||= Brick.config.sti_namespace_prefixes.each_with_object({}) { |snp, s| s[snp.first[2..-1]] = snp.last unless snp.first.end_with?('::') }
|
123
|
+
end
|
123
124
|
|
124
|
-
class << self
|
125
125
|
attr_accessor :default_schema, :db_schemas, :routes_done, :is_oracle, :is_eager_loading, :auto_models
|
126
126
|
|
127
127
|
def set_db_schema(params = nil)
|
@@ -203,11 +203,9 @@ module Brick
|
|
203
203
|
skip_hms = {}
|
204
204
|
hms.each do |hmt|
|
205
205
|
if (through = hmt.last.options[:through])
|
206
|
-
|
207
|
-
|
206
|
+
# ::Brick.relations[hmt.last.through_reflection.table_name]
|
207
|
+
skip_hms[through] = nil if hms[through] && model.is_brick?
|
208
208
|
# End up with a hash of HMT names pointing to join-table associations
|
209
|
-
# Last part was: hmt.last.name
|
210
|
-
# Changed up because looking for: hms[:issue_issue_duplicates]
|
211
209
|
model._br_associatives[hmt.first] = hms[through] # || hms["#{(opt = hmt.last.options)[:through].to_s.singularize}_#{opt[:source].to_s.pluralize}".to_sym]
|
212
210
|
elsif hmt.last.inverse_of.nil?
|
213
211
|
puts "SKIPPING #{hmt.last.name.inspect}"
|
@@ -298,7 +298,9 @@ if Object.const_defined?('Brick')
|
|
298
298
|
# # route to go to the :index action for what would be a controller for that table. You can specify any controller
|
299
299
|
# # name and action you wish in order to override this and have that be the default route when none other has been
|
300
300
|
# # specified in routes.rb or elsewhere. (Or just use an empty string in order to disable this behaviour.)
|
301
|
-
#
|
301
|
+
# This defaults to \"customers#index\", and if there was also a prefix set called \"admin\" then it would instead
|
302
|
+
# go to \"admin/customers#index\".
|
303
|
+
# Brick.default_route_fallback = 'customers'
|
302
304
|
# Brick.default_route_fallback = 'orders#outstanding' # Example of a non-RESTful route
|
303
305
|
# Brick.default_route_fallback = '' # Omits setting a default route in the absence of any other
|
304
306
|
end
|
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.82
|
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-10-
|
11
|
+
date: 2022-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|