brick 1.0.114 → 1.0.116
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 +5 -2
- data/lib/brick/frameworks/rails/engine.rb +140 -16
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +66 -45
- 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: b515113ca31f4e0ad1a13e90df981c411e96c4a93507012876c9b2f10e76e68b
|
4
|
+
data.tar.gz: e23d63fe9fbbaaacd20d9646c382e914dfa46cfa61a8a504aaee9f3f6352d849
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78fcea6b98fae7cbb0496a55a824021f4accf8c75eaf3680696333000a90854dda52783cd14a67ee7dcb91f3a48cef871ba4e3ea037f3dbec42f31c1bb485a25
|
7
|
+
data.tar.gz: a1191c8adfd3d6dbd8393e85c4bb7857a030db449891e744ac6bc3ea7f9f9cae5303987143f02892374fd088528463aacc1b06c9c4541560a0df0ded1dafe1e5
|
data/lib/brick/extensions.rb
CHANGED
@@ -972,7 +972,10 @@ Module.class_exec do
|
|
972
972
|
end
|
973
973
|
# puts "#{self.name} - #{args.first}"
|
974
974
|
desired_classname = (self == Object || !name) ? requested : "#{name}::#{requested}"
|
975
|
-
if ((is_defined = self.const_defined?(args.first)) && (possible = self.const_get(args.first)) &&
|
975
|
+
if ((is_defined = self.const_defined?(args.first)) && (possible = self.const_get(args.first)) &&
|
976
|
+
# Reset `possible` if it's a controller request that's not a perfect match
|
977
|
+
# Was: (possible = nil) but changed to #local_variable_set in order to suppress the "= should be ==" warning
|
978
|
+
(possible.name == desired_classname || (is_controller && binding.local_variable_set(:possible, nil)))) ||
|
976
979
|
# Try to require the respective Ruby file
|
977
980
|
((filename = ActiveSupport::Dependencies.search_for_file(desired_classname.underscore) ||
|
978
981
|
(self != Object && ActiveSupport::Dependencies.search_for_file((desired_classname = requested).underscore))
|
@@ -983,7 +986,7 @@ Module.class_exec do
|
|
983
986
|
# then return what we've found.
|
984
987
|
(is_defined && !::Brick.is_eager_loading) # Used to also have: && possible != self
|
985
988
|
if (!brick_root && (filename || possible.instance_of?(Class))) ||
|
986
|
-
(possible.instance_of?(Module) && possible
|
989
|
+
(possible.instance_of?(Module) && possible&.module_parent == self) ||
|
987
990
|
(possible.instance_of?(Class) && possible == self) # Are we simply searching for ourselves?
|
988
991
|
return possible
|
989
992
|
end
|
@@ -82,6 +82,15 @@ function linkSchemas() {
|
|
82
82
|
}
|
83
83
|
};
|
84
84
|
"
|
85
|
+
BRICK_SVG = "<svg version=\"1.1\" style=\"display: inline; padding-left: 0.5em;\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"
|
86
|
+
viewBox=\"0 0 58 58\" height=\"1.4em\" xml:space=\"preserve\">
|
87
|
+
<g>
|
88
|
+
<polygon style=\"fill:#C2615F;\" points=\"58,15.831 19.106,35.492 0,26.644 40,6\"/>
|
89
|
+
<polygon style=\"fill:#6D4646;\" points=\"19,52 0,43.356 0,26.644 19,35\"/>
|
90
|
+
<polygon style=\"fill:#894747;\" points=\"58,31.559 19,52 19,35 58,15.831\"/>
|
91
|
+
</g>
|
92
|
+
</svg>
|
93
|
+
".html_safe
|
85
94
|
|
86
95
|
# paths['app/models'] << 'lib/brick/frameworks/active_record/models'
|
87
96
|
config.brick = ActiveSupport::OrderedOptions.new
|
@@ -246,15 +255,7 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
246
255
|
end
|
247
256
|
def to_s
|
248
257
|
@_name.to_s.html_safe + @vc.instance_variable_get(:@__vc_helpers)&.link_to_brick(nil,
|
249
|
-
|
250
|
-
viewBox=\"0 0 58 58\" height=\"1.4em\" xml:space=\"preserve\">
|
251
|
-
<g>
|
252
|
-
<polygon style=\"fill:#C2615F;\" points=\"58,15.831 19.106,35.492 0,26.644 40,6\"/>
|
253
|
-
<polygon style=\"fill:#6D4646;\" points=\"19,52 0,43.356 0,26.644 19,35\"/>
|
254
|
-
<polygon style=\"fill:#894747;\" points=\"58,31.559 19,52 19,35 58,15.831\"/>
|
255
|
-
</g>
|
256
|
-
</svg>
|
257
|
-
".html_safe,
|
258
|
+
BRICK_SVG,
|
258
259
|
{ title: "#{@_name} in Brick" }
|
259
260
|
)
|
260
261
|
end
|
@@ -298,7 +299,14 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
298
299
|
)
|
299
300
|
nil
|
300
301
|
else # This is either a non-Avo request or a proper Avo request, so carry on
|
301
|
-
|
302
|
+
begin
|
303
|
+
_brick_url_for(options, *args)
|
304
|
+
rescue
|
305
|
+
# Last-ditch effort in case we were in yet a different RouteSet
|
306
|
+
unless (rar = ::Rails.application.routes) == self
|
307
|
+
rar.url_for(options, *args)
|
308
|
+
end
|
309
|
+
end
|
302
310
|
end
|
303
311
|
end
|
304
312
|
end
|
@@ -314,14 +322,87 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
314
322
|
::Brick.relations.each do |k, v|
|
315
323
|
next if k == 'active_admin_comments'
|
316
324
|
|
317
|
-
|
318
|
-
|
325
|
+
begin
|
326
|
+
if (class_name = Object.const_get(v.fetch(:class_name, nil)))
|
327
|
+
::ActiveAdmin.register(class_name) { config.clear_batch_actions! }
|
328
|
+
end
|
329
|
+
rescue
|
319
330
|
end
|
320
331
|
end
|
321
332
|
_brick_routes(*args)
|
322
333
|
end
|
323
334
|
end
|
324
335
|
end
|
336
|
+
::ActiveAdmin::Views::TitleBar.class_exec do
|
337
|
+
alias _brick_build_title_tag build_title_tag
|
338
|
+
def build_title_tag
|
339
|
+
if klass = begin
|
340
|
+
aa_id = helpers.instance_variable_get(:@current_tab)&.id
|
341
|
+
::Brick.relations.fetch(aa_id, nil)&.fetch(:class_name, nil)&.constantize
|
342
|
+
rescue
|
343
|
+
end
|
344
|
+
h2((@title + link_to_brick(nil,
|
345
|
+
BRICK_SVG, # This would do well to be sized a bit smaller
|
346
|
+
{ title: "#{@_name} in Brick" }
|
347
|
+
)).html_safe)
|
348
|
+
else
|
349
|
+
_brick_build_title_tag # Revert to the original
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
# Forest Admin compatibility
|
356
|
+
if Object.const_defined?('ForestLiana')
|
357
|
+
ForestLiana::Bootstrapper.class_exec do
|
358
|
+
alias _brick_fetch_models fetch_models
|
359
|
+
def fetch_models
|
360
|
+
# Auto-create Brick models
|
361
|
+
::Brick.relations.each do |k, v|
|
362
|
+
next if k == 'active_admin_comments'
|
363
|
+
|
364
|
+
begin
|
365
|
+
v[:class_name].constantize
|
366
|
+
rescue
|
367
|
+
end
|
368
|
+
end
|
369
|
+
_brick_fetch_models
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
# MotorAdmin compatibility
|
375
|
+
if Object.const_defined?('Motor') && ::Motor.const_defined?('BuildSchema')
|
376
|
+
::Motor::BuildSchema::LoadFromRails.class_exec do
|
377
|
+
class << self
|
378
|
+
alias _brick_models models
|
379
|
+
def models
|
380
|
+
# If RailsAdmin is also present and had already cached its list of models, this builds out the MotorAdmin
|
381
|
+
# models differently, so invalidate RailsAdmin's cached list.
|
382
|
+
if Object.const_defined?('RailsAdmin') && ::RailsAdmin::Config.class_variable_defined?(:@@system_models)
|
383
|
+
::RailsAdmin::Config.remove_class_variable(:@@system_models)
|
384
|
+
::RailsAdmin::AbstractModel.reset
|
385
|
+
end
|
386
|
+
|
387
|
+
eager_load_models!
|
388
|
+
# Auto-create Brick models (except for those related to Motor::ApplicationRecord)
|
389
|
+
mar_tables = Motor::ApplicationRecord.descendants.map(&:table_name)
|
390
|
+
# Add JSON fields
|
391
|
+
if mar_tables.include?('motor_api_configs')
|
392
|
+
mac = (::Brick.config.json_columns['motor_api_configs'] ||= [])
|
393
|
+
mac += ['preferences', 'credentials']
|
394
|
+
end
|
395
|
+
(::Brick.config.json_columns['motor_audits'] ||= []) << 'audited_changes' if mar_tables.include?('motor_audits')
|
396
|
+
(::Brick.config.json_columns['motor_configs'] ||= []) << 'value' if mar_tables.include?('motor_configs')
|
397
|
+
::Brick.relations.each do |k, v|
|
398
|
+
next if mar_tables.include?(k) || k == 'motor_audits'
|
399
|
+
|
400
|
+
v[:class_name].constantize
|
401
|
+
end
|
402
|
+
_brick_models.reject { |m| mar_tables.include?(m.table_name) || m.table_name == 'motor_audits' }
|
403
|
+
end
|
404
|
+
end
|
405
|
+
end
|
325
406
|
end
|
326
407
|
|
327
408
|
# ====================================
|
@@ -846,7 +927,9 @@ callbacks = {} %>
|
|
846
927
|
<path opacity=\"0.25\" d=\"M41.9129 30.649L35.3301 45.0422C35.2023 45.3204 35.0074 45.563 34.7627 45.7484C34.518 45.9337 34.2311 46.0562 33.9274 46.1048C27.3926 47.1897 21.1567 49.6166 15.617 53.2308C15.279 53.4505 14.8783 53.555 14.4753 53.5286C14.0723 53.5022 13.6889 53.3463 13.3827 53.0844C13.0765 52.8225 12.8642 52.4688 12.7777 52.0765C12.6911 51.6842 12.7351 51.2745 12.9029 50.9092L32.0285 8.99382L33.4869 5.7959C32.6687 7.95084 32.7141 10.336 33.6135 12.4586L33.7958 12.8565L41.9129 30.649Z\" fill=\"currentColor\" fill-opacity=\"0.22\"></path>
|
847
928
|
</svg>
|
848
929
|
".gsub('"', '\"')
|
849
|
-
}\".html_safe
|
930
|
+
}\".html_safe
|
931
|
+
aa_png = \"<img src=\\\"data:image/png;base64,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\\\">\".html_safe
|
932
|
+
%>"
|
850
933
|
|
851
934
|
if ['index', 'show', 'new', 'update'].include?(args.first)
|
852
935
|
poly_cols = []
|
@@ -1194,6 +1277,19 @@ erDiagram
|
|
1194
1277
|
title: \"#\{model.name} in Avo\" }
|
1195
1278
|
) %></td>
|
1196
1279
|
<% end %>
|
1280
|
+
<% if Object.const_defined?('ActiveAdmin')
|
1281
|
+
ActiveAdmin.application.namespaces.names.each do |ns|
|
1282
|
+
td_count += 1 %>
|
1283
|
+
<td><%= link_to_brick(
|
1284
|
+
aa_png,
|
1285
|
+
{ index_proc: Proc.new do |aa_model, relation|
|
1286
|
+
path_helper = \"#\{ns}_#\{relation.fetch(:auto_prefixed_schema, nil)}#\{rk = aa_model.model_name.route_key}_path\".to_sym
|
1287
|
+
send(path_helper) if respond_to?(path_helper)
|
1288
|
+
end,
|
1289
|
+
title: \"#\{model.name} in ActiveAdmin\" }
|
1290
|
+
) %></td>
|
1291
|
+
<% end
|
1292
|
+
end %>
|
1197
1293
|
</tr><%= if (page_num = @#{table_name}._brick_page_num)
|
1198
1294
|
\"<tr><td colspan=\\\"#\{td_count}\\\">Page #\{page_num}</td></tr>\".html_safe
|
1199
1295
|
end %></table>#{template_link}<%
|
@@ -1382,7 +1478,20 @@ erDiagram
|
|
1382
1478
|
end,
|
1383
1479
|
title: \"#\{page_title} in Avo\" }
|
1384
1480
|
) %></td>
|
1385
|
-
<% end
|
1481
|
+
<% end
|
1482
|
+
|
1483
|
+
if Object.const_defined?('ActiveAdmin')
|
1484
|
+
ActiveAdmin.application.namespaces.names.each do |ns| %>
|
1485
|
+
<td><%= link_to_brick(
|
1486
|
+
aa_png,
|
1487
|
+
{ show_proc: Proc.new do |aa_model, relation|
|
1488
|
+
path_helper = \"#\{ns}_#\{relation.fetch(:auto_prefixed_schema, nil)}#\{rk = aa_model.model_name.singular_route_key}_path\".to_sym
|
1489
|
+
send(path_helper, obj) if respond_to?(path_helper)
|
1490
|
+
end,
|
1491
|
+
title: \"#\{page_title} in ActiveAdmin\" }
|
1492
|
+
) %></td>
|
1493
|
+
<% end
|
1494
|
+
end %>
|
1386
1495
|
</table>
|
1387
1496
|
<%
|
1388
1497
|
if (description = (relation = Brick.relations[tbl_name = #{model_name}.table_name])&.fetch(:description, nil)) %><%=
|
@@ -1821,9 +1930,24 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1821
1930
|
|
1822
1931
|
alias _brick_viable_models viable_models
|
1823
1932
|
def viable_models
|
1824
|
-
return _brick_viable_models if class_variables.include?(:@@system_models)
|
1933
|
+
return _brick_viable_models if ::RailsAdmin::Config.class_variables.include?(:@@system_models)
|
1934
|
+
|
1935
|
+
brick_models = ::Brick.relations.map { |_k, v| v[:class_name] }
|
1825
1936
|
|
1826
|
-
|
1937
|
+
# The original from RailsAdmin (now aliased as _brick_viable_models) loads all classes
|
1938
|
+
# in the whole project. This Brick approach is a little more tame.
|
1939
|
+
::Brick.eager_load_classes
|
1940
|
+
# All tables used by non-Brick models
|
1941
|
+
ar_tables = (arbd = ActiveRecord::Base.descendants).each_with_object([]) do |ar, s|
|
1942
|
+
s << ar.table_name unless brick_models.include?(ar.name)
|
1943
|
+
end
|
1944
|
+
viable = arbd.each_with_object([]) do |ar, s|
|
1945
|
+
# Include all the app's models, plus any Brick models which describe tables not covered by the app's models
|
1946
|
+
unless ar.abstract_class? || (brick_models.include?(ar.name) && ar_tables.include?(ar.table_name))
|
1947
|
+
s << ar.name
|
1948
|
+
end
|
1949
|
+
end
|
1950
|
+
RailsAdmin::Config.class_variable_set(:@@system_models, viable)
|
1827
1951
|
end
|
1828
1952
|
end
|
1829
1953
|
end
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -137,6 +137,7 @@ module Brick
|
|
137
137
|
|
138
138
|
attr_accessor :default_schema, :db_schemas, :test_schema,
|
139
139
|
:routes_done, :is_oracle, :is_eager_loading, :auto_models, :initializer_loaded
|
140
|
+
::Brick.auto_models = []
|
140
141
|
|
141
142
|
def set_db_schema(params = nil)
|
142
143
|
# If Apartment::Tenant.current is not still the default (usually 'public') then an elevator has brought us into
|
@@ -610,7 +611,7 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
610
611
|
|
611
612
|
def display_classes(prefix, rels, max_length)
|
612
613
|
rels.sort.each do |rel|
|
613
|
-
|
614
|
+
::Brick.auto_models << rel.first
|
614
615
|
puts "#{rel.first}#{' ' * (max_length - rel.first.length)} /#{prefix}#{"#{rel[1]}/" if rel[1]}#{rel.last}"
|
615
616
|
end
|
616
617
|
puts "\n"
|
@@ -660,7 +661,7 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
660
661
|
module RouteSet
|
661
662
|
def finalize!
|
662
663
|
routeset_to_use = ::Rails.application.routes
|
663
|
-
return super
|
664
|
+
return super if self != routeset_to_use || ::Brick.routes_done
|
664
665
|
|
665
666
|
path_prefix = ::Brick.config.path_prefix
|
666
667
|
existing_controllers = routes.each_with_object({}) do |r, s|
|
@@ -867,9 +868,12 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
867
868
|
|
868
869
|
# Trestle compatibility
|
869
870
|
if Object.const_defined?('Trestle') && ::Trestle.config.options&.key?(:site_title) &&
|
870
|
-
!Object.const_defined?("#{resource_name.camelize}Admin")
|
871
|
-
|
872
|
-
|
871
|
+
!Object.const_defined?("#{(res_name = resource_name.tr('/', '_')).camelize}Admin")
|
872
|
+
begin
|
873
|
+
::Trestle.resource(res_sym = res_name.to_sym, model: class_name&.constantize) do
|
874
|
+
menu { item res_sym, icon: "fa fa-star" }
|
875
|
+
end
|
876
|
+
rescue
|
873
877
|
end
|
874
878
|
end
|
875
879
|
end
|
@@ -887,54 +891,56 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
887
891
|
get("/#{controller_prefix}brick_crosstab/data", to: 'brick_gem#crosstab_data')
|
888
892
|
end
|
889
893
|
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
end
|
894
|
+
if Object.const_defined?('Rswag::Ui')
|
895
|
+
rswag_path = routeset_to_use.routes.find { |r| r.app.app == Rswag::Ui::Engine }&.instance_variable_get(:@path_formatter)&.instance_variable_get(:@parts)&.join
|
896
|
+
first_endpoint_parts = nil
|
897
|
+
(doc_endpoints = Rswag::Ui.config.config_object[:urls])&.each do |doc_endpoint|
|
898
|
+
puts "Mounting OpenApi 3.0 documentation endpoint for \"#{doc_endpoint[:name]}\" on #{doc_endpoint[:url]}" unless ::Brick.routes_done
|
899
|
+
send(:get, doc_endpoint[:url], { to: 'brick_openapi#index' })
|
900
|
+
endpoint_parts = doc_endpoint[:url]&.split('/')
|
901
|
+
first_endpoint_parts ||= endpoint_parts
|
902
|
+
end
|
903
|
+
end
|
904
|
+
next if ::Brick.routes_done
|
905
|
+
|
906
|
+
if Object.const_defined?('Rswag::Ui')
|
907
|
+
if doc_endpoints.present?
|
908
|
+
if rswag_path && first_endpoint_parts
|
909
|
+
puts "API documentation now available when navigating to: /#{first_endpoint_parts&.find(&:present?)}/index.html"
|
907
910
|
else
|
908
|
-
|
911
|
+
puts "In order to make documentation available you can put this into your routes.rb:"
|
912
|
+
puts " mount Rswag::Ui::Engine => '/#{first_endpoint_parts&.find(&:present?) || 'api-docs'}'"
|
913
|
+
end
|
914
|
+
else
|
915
|
+
sample_path = rswag_path || '/api-docs'
|
916
|
+
puts
|
917
|
+
puts "Brick: rswag-ui gem detected -- to make OpenAPI 3.0 documentation available from a path such as '#{sample_path}/v1/swagger.json',"
|
918
|
+
puts ' put code such as this in an initializer:'
|
919
|
+
puts ' Rswag::Ui.configure do |config|'
|
920
|
+
puts " config.swagger_endpoint '#{sample_path}/v1/swagger.json', 'API V1 Docs'"
|
921
|
+
puts ' end'
|
922
|
+
unless rswag_path
|
909
923
|
puts
|
910
|
-
puts
|
911
|
-
puts
|
912
|
-
puts ' Rswag::Ui.configure do |config|'
|
913
|
-
puts " config.swagger_endpoint '#{sample_path}/v1/swagger.json', 'API V1 Docs'"
|
914
|
-
puts ' end'
|
915
|
-
unless rswag_path
|
916
|
-
puts
|
917
|
-
puts ' and put this into your routes.rb:'
|
918
|
-
puts " mount Rswag::Ui::Engine => '/api-docs'"
|
919
|
-
end
|
924
|
+
puts ' and put this into your routes.rb:'
|
925
|
+
puts " mount Rswag::Ui::Engine => '/api-docs'"
|
920
926
|
end
|
921
927
|
end
|
928
|
+
end
|
922
929
|
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
::Brick.display_classes(controller_prefix, views, view_class_length)
|
934
|
-
end
|
930
|
+
puts "\n" if tables.present? || views.present?
|
931
|
+
if tables.present?
|
932
|
+
puts "Classes that can be built from tables:#{' ' * (table_class_length - 38)} Path:"
|
933
|
+
puts "======================================#{' ' * (table_class_length - 38)} ====="
|
934
|
+
::Brick.display_classes(controller_prefix, tables, table_class_length)
|
935
|
+
end
|
936
|
+
if views.present?
|
937
|
+
puts "Classes that can be built from views:#{' ' * (view_class_length - 37)} Path:"
|
938
|
+
puts "=====================================#{' ' * (view_class_length - 37)} ====="
|
939
|
+
::Brick.display_classes(controller_prefix, views, view_class_length)
|
935
940
|
end
|
936
941
|
end
|
937
942
|
super
|
943
|
+
::Brick.routes_done = true
|
938
944
|
end
|
939
945
|
end
|
940
946
|
|
@@ -976,6 +982,21 @@ module ::Rails
|
|
976
982
|
end
|
977
983
|
end
|
978
984
|
|
985
|
+
# # Support for when a table or view is named just 's'
|
986
|
+
# ActiveSupport::Inflector.class_eval do
|
987
|
+
# class << self
|
988
|
+
# alias _brick_singularize singularize
|
989
|
+
# def singularize(word, locale = :en)
|
990
|
+
# if word.present? && ((ret = _brick_singularize(word, locale)).empty? || ret[-1] == '/')
|
991
|
+
# # puts word
|
992
|
+
# # binding.pry if ret.empty? || ret[-1] == '/'
|
993
|
+
# ret << 's'
|
994
|
+
# end
|
995
|
+
# ret
|
996
|
+
# end
|
997
|
+
# end
|
998
|
+
# end
|
999
|
+
|
979
1000
|
# Major compatibility fixes for ActiveRecord < 4.2
|
980
1001
|
# ================================================
|
981
1002
|
ActiveSupport.on_load(:active_record) do
|
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.116
|
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-02-
|
11
|
+
date: 2023-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|