brick 1.0.184 → 1.0.186

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: 78b2c6e3f1da384e5310953f39a9bb08f85bdeabf7d2cf4143e483ad4df9f146
4
- data.tar.gz: e3bb0fc597cfb9908a87667b6e785f41dc73337fd834151dd8ce41af8aabca02
3
+ metadata.gz: e5a41639892f2e1b8c16c55334cd7cb50f9bfd3a5bffd1eb093764deaad606d1
4
+ data.tar.gz: 4a18ba9341e71fb00bbc6dde1686b561de8cdd9b898905c680ba85f83cabf394
5
5
  SHA512:
6
- metadata.gz: d1f52d74e8feca2255c86423b4108ddad31daa3b49c4f54ae0c25080542e51e1b1a812238ea6313de51c2644f67ac4ab5ad7c9759fbfb535a07e8c3134010f39
7
- data.tar.gz: 9b21a929ef26076909595907bfda0d74b73d274bb6442d58eb80beb4b152b6aaf97ec8a8177dc0057df9188dcfde9e9540f1573c6b59ae6be62b40ac0a7541d8
6
+ metadata.gz: c30f5f19ca9f5fe716d32d5efc5b0bc3a7d8addeeb9a8798cb34dc23efcc6abb92391854e899269875ccc2319b36b7361068e9ad17ad5d6245b16bf4ac7aaa89
7
+ data.tar.gz: d66d5544a948ad006294c654f8b7333b67b1a630c718c525a5fe40032414e4d307c0fe0aab70fcec47add3cd1feaed389ae3af75f69e3b480dbd4be3fc50a0a0
@@ -48,10 +48,14 @@ if ::Gem::Version.new(RUBY_VERSION) >= ::Gem::Version.new('2.7')
48
48
  end
49
49
  end
50
50
 
51
- unless ActiveRecord.const_defined?(:NoDatabaseError) # Generic version of NoDatabaseError for Rails <= 4.0
51
+ unless ActiveRecord.const_defined?(:NoDatabaseError)
52
52
  require 'active_model'
53
+ require 'active_record/deprecator' if ActiveRecord.version >= Gem::Version.new('7.1.0')
53
54
  require 'active_record/errors'
54
- class ::ActiveRecord::NoDatabaseError < ::ActiveRecord::StatementInvalid
55
+ # Generic version of NoDatabaseError for Rails <= 4.0
56
+ unless ActiveRecord.const_defined?(:NoDatabaseError)
57
+ class ::ActiveRecord::NoDatabaseError < ::ActiveRecord::StatementInvalid
58
+ end
55
59
  end
56
60
  end
57
61
 
@@ -317,10 +317,15 @@ module ActiveRecord
317
317
  tbl_parts[-1] = aps
318
318
  tbl_parts << last_part
319
319
  end
320
- tbl_parts.unshift(::Brick.config.path_prefix) if ::Brick.config.path_prefix
320
+ path_prefix = []
321
+ if ::Brick.config.path_prefix
322
+ tbl_parts.unshift(::Brick.config.path_prefix)
323
+ path_prefix << ::Brick.config.path_prefix
324
+ end
321
325
  index = tbl_parts.map(&:underscore).join(separator)
322
- # Rails applies an _index suffix to that route when the resource name is singular
323
- index << '_index' if mode != :singular && separator == '_' && index == index.singularize
326
+ # Rails applies an _index suffix to that route when the resource name isn't something plural
327
+ index << '_index' if mode != :singular && separator == '_' &&
328
+ index == (path_prefix + [name&.underscore&.tr('/', '_') || '_']).join(separator)
324
329
  index
325
330
  end
326
331
 
@@ -2044,9 +2049,10 @@ class Object
2044
2049
  _schema, @_is_show_schema_list = ::Brick.set_db_schema(params || api_params)
2045
2050
 
2046
2051
  if is_openapi
2047
- api_name = Rswag::Ui.config.config_object[:urls].find do |api_url|
2048
- api_url[:url] == request.path
2049
- end&.fetch(:name, 'API documentation')
2052
+ doc_endpoints = (Object.const_defined?('Rswag::Ui') &&
2053
+ (::Rswag::Ui.config.config_object[:urls])) ||
2054
+ ::Brick.instance_variable_get(:@swagger_endpoints)
2055
+ api_name = doc_endpoints&.find { |api_url| api_url[:url] == request.path }&.fetch(:name, 'API documentation')
2050
2056
  current_api_ver = current_api_root.split('/').last&.[](1..-1).to_i
2051
2057
  json = { 'openapi': '3.0.1', 'info': { 'title': api_name, 'version': request_ver },
2052
2058
  'servers': [
@@ -1966,7 +1966,7 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
1966
1966
  def viable_models
1967
1967
  return _brick_viable_models if ::RailsAdmin::Config.class_variables.include?(:@@system_models)
1968
1968
 
1969
- brick_models = ::Brick.relations.map { |_k, v| v[:class_name] }
1969
+ brick_models = ::Brick.relations.each_with_object([]) { |rel, s| s << rel.last[:class_name] unless rel.first.is_a?(Symbol) }
1970
1970
 
1971
1971
  # The original from RailsAdmin (now aliased as _brick_viable_models) loads all classes
1972
1972
  # in the whole project. This Brick approach is a little more tame.
@@ -1999,7 +1999,7 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
1999
1999
  end
2000
2000
 
2001
2001
  RailsAdmin.config do |config|
2002
- ::Brick.relations.select { |_k, v| v.key?(:isView) }.each do |_k, relation|
2002
+ ::Brick.relations.select { |_k, v| v.is_a?(Hash) && v.key?(:isView) }.each do |_k, relation|
2003
2003
  config.model(relation[:class_name]) do # new_model_class
2004
2004
  list do
2005
2005
  sort_by (sort_col = relation[:cols].first.first)
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 184
8
+ TINY = 186
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
@@ -162,6 +162,8 @@ module Brick
162
162
  h[:db_name] = db_name if db_name
163
163
  end
164
164
  end
165
+ rescue ActiveRecord::NoDatabaseError
166
+ {}
165
167
  end
166
168
 
167
169
  def apartment_multitenant
@@ -208,7 +210,10 @@ module Brick
208
210
  puts "Based on inclusion in ::Brick.polymorphics, marking association #{full_assoc_name} as being polymorphic."
209
211
  a.options[:polymorphic] = true
210
212
  end
211
- if !a.polymorphic? && (a.belongs_to? || (through = a.options[:through])) &&
213
+ if (through = a.options[:through]) && !a.through_reflection
214
+ puts "WARNING: In model #{model.name}, unable to utilise: has_many #{a.name}, through: #{through.inspect}"
215
+ end
216
+ if !a.polymorphic? && (a.belongs_to? || (through && a.through_reflection)) &&
212
217
  !(a.klass && ::Brick.config.exclude_tables.exclude?(a.klass.table_name) &&
213
218
  (!a.belongs_to? ||
214
219
  ((fk_type = a.foreign_key.is_a?(Array) ? a.foreign_key.map { |fk_part| model_cols[fk_part.to_s].type } : model_cols[a.foreign_key.to_s].type) &&
@@ -278,7 +283,7 @@ module Brick
278
283
  is_invalid_source = true
279
284
  end
280
285
  if is_invalid_source
281
- puts "WARNING: HMT relationship :#{a.name} in model #{model.name} has invalid source :#{a.source_reflection_name}."
286
+ puts " due to invalid source #{a.source_reflection_name.inspect}."
282
287
  next
283
288
  end
284
289
  else
@@ -321,6 +326,12 @@ module Brick
321
326
  true
322
327
  end
323
328
 
329
+ # Add a swagger endpoint in the same kind of way that RSwag UI does
330
+ def swagger_endpoint(url, name)
331
+ @swagger_endpoints ||= []
332
+ @swagger_endpoints << { url: url, name: name }
333
+ end
334
+
324
335
  def is_geography?(val)
325
336
  val.length < 31 && (val.length - 6) % 8 == 0 && val[0..5].bytes == [230, 16, 0, 0, 1, 12]
326
337
  end
@@ -1130,39 +1141,45 @@ In config/initializers/brick.rb appropriate entries would look something like:
1130
1141
  get("/#{controller_prefix}brick_crosstab/data", to: 'brick_gem#crosstab_data')
1131
1142
  end
1132
1143
 
1133
- if Object.const_defined?('Rswag::Ui')
1134
- rswag_path = routeset_to_use.routes.find { |r| r.app.app == Rswag::Ui::Engine }&.instance_variable_get(:@path_formatter)&.instance_variable_get(:@parts)&.join
1135
- first_endpoint_parts = nil
1136
- (doc_endpoints = Rswag::Ui.config.config_object[:urls])&.each do |doc_endpoint|
1144
+ if ((rswag_ui_present = Object.const_defined?('Rswag::Ui')) &&
1145
+ (rswag_path = routeset_to_use.routes.find { |r| r.app.app == ::Rswag::Ui::Engine }
1146
+ &.instance_variable_get(:@path_formatter)
1147
+ &.instance_variable_get(:@parts)&.join) &&
1148
+ (doc_endpoints = ::Rswag::Ui.config.config_object[:urls])) ||
1149
+ (doc_endpoints = ::Brick.instance_variable_get(:@swagger_endpoints))
1150
+ last_endpoint_parts = nil
1151
+ doc_endpoints.each do |doc_endpoint|
1137
1152
  puts "Mounting OpenApi 3.0 documentation endpoint for \"#{doc_endpoint[:name]}\" on #{doc_endpoint[:url]}" unless ::Brick.routes_done
1138
1153
  send(:get, doc_endpoint[:url], { to: 'brick_openapi#index' })
1139
1154
  endpoint_parts = doc_endpoint[:url]&.split('/')
1140
- first_endpoint_parts ||= endpoint_parts
1155
+ last_endpoint_parts = endpoint_parts
1141
1156
  end
1142
1157
  end
1143
1158
  return if ::Brick.routes_done
1144
1159
 
1145
- if Object.const_defined?('Rswag::Ui')
1146
- if doc_endpoints.present?
1147
- if rswag_path && first_endpoint_parts
1148
- puts "API documentation now available when navigating to: /#{first_endpoint_parts&.find(&:present?)}/index.html"
1160
+ if doc_endpoints.present?
1161
+ if rswag_ui_present
1162
+ if rswag_path
1163
+ puts "API documentation now available when navigating to: /#{last_endpoint_parts&.find(&:present?)}/index.html"
1149
1164
  else
1150
1165
  puts "In order to make documentation available you can put this into your routes.rb:"
1151
- puts " mount Rswag::Ui::Engine => '/#{first_endpoint_parts&.find(&:present?) || 'api-docs'}'"
1166
+ puts " mount Rswag::Ui::Engine => '/#{last_endpoint_parts&.find(&:present?) || 'api-docs'}'"
1152
1167
  end
1153
1168
  else
1154
- sample_path = rswag_path || '/api-docs'
1169
+ puts 'A couple easy ways to create compelling documentation from this are to use Scalar API, or to add the rswag-ui gem.'
1170
+ end
1171
+ elsif rswag_ui_present
1172
+ sample_path = rswag_path || '/api-docs'
1173
+ puts
1174
+ puts "Brick: rswag-ui gem detected -- to make OpenAPI 3.0 documentation available from a path such as '#{sample_path}/v1/swagger.json',"
1175
+ puts ' put code such as this in an initializer:'
1176
+ puts ' Rswag::Ui.configure do |config|'
1177
+ puts " config.swagger_endpoint '#{sample_path}/v1/swagger.json', 'API V1 Docs'"
1178
+ puts ' end'
1179
+ unless rswag_path
1155
1180
  puts
1156
- puts "Brick: rswag-ui gem detected -- to make OpenAPI 3.0 documentation available from a path such as '#{sample_path}/v1/swagger.json',"
1157
- puts ' put code such as this in an initializer:'
1158
- puts ' Rswag::Ui.configure do |config|'
1159
- puts " config.swagger_endpoint '#{sample_path}/v1/swagger.json', 'API V1 Docs'"
1160
- puts ' end'
1161
- unless rswag_path
1162
- puts
1163
- puts ' and put this into your routes.rb:'
1164
- puts " mount Rswag::Ui::Engine => '/api-docs'"
1165
- end
1181
+ puts ' and put this into your routes.rb:'
1182
+ puts " mount Rswag::Ui::Engine => '/api-docs'"
1166
1183
  end
1167
1184
  end
1168
1185
 
@@ -1916,7 +1933,7 @@ module ActiveRecord
1916
1933
  private
1917
1934
 
1918
1935
  # %%% Pretty much have to flat-out replace this guy (I think anyway)
1919
- # Good with Rails 5.24 through 7 on this
1936
+ # Good with Rails 5.2.4 through 7.1 on this
1920
1937
  # Ransack gem includes Polyamorous which replaces #build in a different way (which we handle below)
1921
1938
  unless Gem::Specification.all_names.any? { |g| g.start_with?('ransack-') }
1922
1939
  def build(associations, base_klass, root = nil, path = '')
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.184
4
+ version: 1.0.186
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-23 00:00:00.000000000 Z
11
+ date: 2023-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord