brick 1.0.20 → 1.0.21

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41b64e2d571540382ce5ecd497f1e1413fde20119d46f1b24e1fae5af428fb45
4
- data.tar.gz: 1c26ccf7b8df54fd121546e8daeeb9508561328186af46aea8ba1bd819524532
3
+ metadata.gz: 0ad289d9f4db9ef6ce9edcfb8948926d4a61910294291272ccf2b342fa2f5051
4
+ data.tar.gz: 9030f9ccf39d7f0a9a0ff9413e4f24ee7a46beaf3aba056e9875fc5c29551419
5
5
  SHA512:
6
- metadata.gz: e103d061b74402f3fe0b944d06b30c20f053166c706a54f15753afc8cb0c703ae71f83bd88191f985a37180cb9bdafdba918178174df08f58f683a723fcfb73a
7
- data.tar.gz: 13a7dce7f4f5789a0d7a0c6cae4adcaf2f44d22d0f59c355d75102a7f08292d80c781f8d33be121801d375fd33fed8bcdf4ef6b56108ef8f4ab4110c1f49e296
6
+ metadata.gz: ed6f08eabba91cb304141a0c84884cfbeaae0087094b1fe1ff4a80195aee44dbb697c385ab9d7afaac2e337f9008bc7bef059be98f95264fec34a2288beaff6b
7
+ data.tar.gz: 5ebbb793d23634232a529b3d39224e1e4deaa010cf8bf2841effe20a9e3b4d7079fb7163e6c2f90feeed8526c4a1314f319bad47d1c8a6079bf54ca92f0e6224
data/lib/brick/config.rb CHANGED
@@ -74,6 +74,20 @@ module Brick
74
74
  @mutex.synchronize { @exclude_hms = skips }
75
75
  end
76
76
 
77
+ # Skip showing counts for these specific has_many associations when building auto-generated #index views
78
+ def skip_index_hms
79
+ @mutex.synchronize { @skip_index_hms || {} }
80
+ end
81
+
82
+ def skip_index_hms=(skips)
83
+ @mutex.synchronize do
84
+ @skip_index_hms ||= skips.each_with_object({}) do |v, s|
85
+ class_name, assoc_name = v.split('.')
86
+ (s[class_name] ||= {})[assoc_name.to_sym] = nil
87
+ end
88
+ end
89
+ end
90
+
77
91
  # Associations to treat as a has_one
78
92
  def has_ones
79
93
  @mutex.synchronize { @has_ones }
@@ -304,7 +304,10 @@ module ActiveRecord
304
304
  # join_array[bt.first] = nil # Store this relation name in our special collection for .joins()
305
305
  bt_descrip[bt.first] = [bt.last, bt.last.brick_parse_dsl(join_array, bt.first, translations)]
306
306
  end
307
+ skip_klass_hms = ::Brick.config.skip_index_hms[klass.name] || {}
307
308
  hms.each do |k, hm|
309
+ next if skip_klass_hms.key?(k)
310
+
308
311
  join_array[k] = nil # Store this relation name in our special collection for .joins()
309
312
  hm_counts[k] = nil # Placeholder that will be filled in once we know the proper table alias
310
313
  end
@@ -672,7 +675,6 @@ class Object
672
675
  # %%% Add custom HM count columns
673
676
  # %%% What happens when the PK is composite?
674
677
  counts = hm_counts.each_with_object([]) { |v, s| s << "COUNT(DISTINCT #{v.last.first}.#{v.last.last.primary_key}) AS _br_#{v.first}_ct" }
675
- puts counts.inspect
676
678
  # *selects,
677
679
  instance_variable_set("@#{table_name}".to_sym, ar_relation.dup._select!(*selects, *counts))
678
680
  # binding.pry
@@ -74,6 +74,7 @@ module Brick
74
74
  table_name = model_name.pluralize.underscore
75
75
  bts, hms, associatives = ::Brick.get_bts_and_hms(@_brick_model) # This gets BT and HM and also has_many :through (HMT)
76
76
  hms_columns = +'' # Used for 'index'
77
+ skip_klass_hms = ::Brick.config.skip_index_hms[model_name] || {}
77
78
  hms_headers = hms.each_with_object([]) do |hm, s|
78
79
  hm_assoc = hm.last
79
80
  if args.first == 'index'
@@ -84,9 +85,15 @@ module Brick
84
85
  hm_assoc.foreign_key
85
86
  end
86
87
  hms_columns << if hm_assoc.macro == :has_many
88
+ set_ct = if skip_klass_hms.key?((assoc_name = hm.first).to_sym)
89
+ 'nil'
90
+ else
91
+ "#{obj_name}._br_#{assoc_name}_ct"
92
+ end
93
+
87
94
  "<td>
88
- <%= ct = #{obj_name}._br_#{hm.first}_ct
89
- link_to \"#\{ct\} #{hm.first}\", #{hm_assoc.klass.name.underscore.pluralize}_path({ #{hm_fk_name}: #{obj_name}.#{pk} }) unless ct.zero? %>
95
+ <%= ct = #{set_ct}
96
+ link_to \"#\{ct || 'View'\} #{assoc_name}\", #{hm_assoc.klass.name.underscore.pluralize}_path({ #{hm_fk_name}: #{obj_name}.#{pk} }) unless ct&.zero? %>
90
97
  </td>\n"
91
98
  else # has_one
92
99
  "<td>
@@ -177,10 +184,10 @@ def hide_bcrypt(val)
177
184
  end %>"
178
185
 
179
186
  if ['index', 'show', 'update'].include?(args.first)
180
- # Example: <% bts = { "site_id" => [:site, Site, "id"], "study_id" => [:study, Study, "id"], "study_country_id" => [:study_country, StudyCountry, "id"], "user_id" => [:user, User, "id"], "role_id" => [:role, Role, "id"] } %>
181
187
  css << "<% bts = { #{bts.each_with_object([]) { |v, s| s << "#{v.first.inspect} => [#{v.last.first.inspect}, #{v.last[1].name}, #{v.last[1].primary_key.inspect}]"}.join(', ')} } %>"
182
188
  end
183
189
 
190
+ # %%% When doing schema select, if there's an ID then remove it, or if we're on a new page go to index
184
191
  script = "<script>
185
192
  var schemaSelect = document.getElementById(\"schema\");
186
193
  var brickSchema;
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 20
8
+ TINY = 21
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
data/lib/brick.rb CHANGED
@@ -103,10 +103,10 @@ module Brick
103
103
 
104
104
  def get_bts_and_hms(model)
105
105
  bts, hms = model.reflect_on_all_associations.each_with_object([{}, {}]) do |a, s|
106
- # So that we can map an association name to any special alias name used in an AREL query
107
- ans = (model._assoc_names[a.name] ||= [])
108
106
  next if !const_defined?(a.name.to_s.singularize.camelize) && ::Brick.config.exclude_tables.include?(a.plural_name)
109
107
 
108
+ # So that we can map an association name to any special alias name used in an AREL query
109
+ ans = (model._assoc_names[a.name] ||= [])
110
110
  ans << a.klass unless ans.include?(a.klass)
111
111
  case a.macro
112
112
  when :belongs_to
@@ -240,6 +240,12 @@ module Brick
240
240
  end
241
241
  end
242
242
 
243
+ # Skip showing counts for these specific has_many associations when building auto-generated #index views
244
+ # @api public
245
+ def skip_index_hms=(value)
246
+ Brick.config.skip_index_hms = value
247
+ end
248
+
243
249
  # Associations to treat as a has_one
244
250
  # @api public
245
251
  def has_ones=(hos)
@@ -111,11 +111,16 @@ module Brick
111
111
  # # to be the primary key.)
112
112
  #{bar}
113
113
 
114
- # # Skip creating a has_many association for these
114
+ # # Skip creating a has_many association for these (only retain the belongs_to built from this additional_reference).
115
115
  # # (Uses the same exact three-part format as would define an additional_reference)
116
116
  # # Say for instance that we didn't care to display the favourite colours that users have:
117
117
  # Brick.exclude_hms = [['users', 'favourite_colour_id', 'colours']]
118
118
 
119
+ # # Skip showing counts for these specific has_many associations when building auto-generated #index views.
120
+ # # When there are related tables with a significant number of records, this can lessen the load on the database
121
+ # # considerably, sometimes fixing what might appear to be an index page that just \"hangs\" for no apparent reason.
122
+ Brick.skip_index_hms = ['User.litany_of_woes']
123
+
119
124
  # # By default primary tables involved in a foreign key relationship will indicate a \"has_many\" relationship pointing
120
125
  # # back to the foreign table. In order to represent a \"has_one\" association instead, an override can be provided
121
126
  # # using the primary model name and the association name which you instead want to have treated as a \"has_one\":
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.20
4
+ version: 1.0.21
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-04-29 00:00:00.000000000 Z
11
+ date: 2022-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord