brick 1.0.113 → 1.0.115
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/brick/config.rb +8 -0
- data/lib/brick/extensions.rb +6 -3
- data/lib/brick/frameworks/rails/engine.rb +67 -13
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +34 -3
- data/lib/generators/brick/install_generator.rb +4 -0
- 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: 6e92e1445b603e8611ad927b8864b6ff04fd819d2f2243051d109d0894838e0d
|
4
|
+
data.tar.gz: b76bc7adf85927a5ff4988027a0d7ff1d40b84d4a80531d23390867bcca0fc5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9caa3d9fdbc5229123058ec526482bf4c6926c42a44012d974a26d4f94f6f0e2f1dd2040ee76b1fbec21e431ea479694030365a1982878c6100245a607803260
|
7
|
+
data.tar.gz: 0e09bb3d9556bc8b4a442eccc9f19a374684c901dc0f9769030313ebdc57248f31a994e5deb7dbde394f066187b961eab169545e3466ab0851cb6df7636c62f1
|
data/lib/brick/config.rb
CHANGED
@@ -213,6 +213,14 @@ module Brick
|
|
213
213
|
@mutex.synchronize { @polymorphics = polys }
|
214
214
|
end
|
215
215
|
|
216
|
+
def json_columns
|
217
|
+
@mutex.synchronize { @json_columns ||= {} }
|
218
|
+
end
|
219
|
+
|
220
|
+
def json_columns=(cols)
|
221
|
+
@mutex.synchronize { @json_columns = cols }
|
222
|
+
end
|
223
|
+
|
216
224
|
def model_descrips
|
217
225
|
@mutex.synchronize { @model_descrips ||= {} }
|
218
226
|
end
|
data/lib/brick/extensions.rb
CHANGED
@@ -274,7 +274,7 @@ module ActiveRecord
|
|
274
274
|
tbl_parts.unshift(::Brick.config.path_prefix) if ::Brick.config.path_prefix
|
275
275
|
index = tbl_parts.map(&:underscore).join(separator)
|
276
276
|
# Rails applies an _index suffix to that route when the resource name is singular
|
277
|
-
index << '_index' if mode != :singular && index == index.singularize
|
277
|
+
index << '_index' if mode != :singular && separator == '_' && index == index.singularize
|
278
278
|
index
|
279
279
|
end
|
280
280
|
|
@@ -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
|
@@ -245,16 +254,8 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
245
254
|
@_name = name || ''
|
246
255
|
end
|
247
256
|
def to_s
|
248
|
-
@_name.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,
|
257
|
+
@_name.to_s.html_safe + @vc.instance_variable_get(:@__vc_helpers)&.link_to_brick(nil,
|
258
|
+
BRICK_SVG,
|
258
259
|
{ title: "#{@_name} in Brick" }
|
259
260
|
)
|
260
261
|
end
|
@@ -298,12 +299,59 @@ 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
|
305
313
|
end # Avo compatibility
|
306
314
|
|
315
|
+
# ActiveAdmin compatibility
|
316
|
+
if Object.const_defined?('ActiveAdmin') && ::ActiveAdmin.application&.site_title.present?
|
317
|
+
::ActiveAdmin.class_exec do
|
318
|
+
class << self
|
319
|
+
ActiveAdmin.load!
|
320
|
+
alias _brick_routes routes
|
321
|
+
def routes(*args)
|
322
|
+
::Brick.relations.each do |k, v|
|
323
|
+
next if k == 'active_admin_comments'
|
324
|
+
|
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
|
330
|
+
end
|
331
|
+
end
|
332
|
+
_brick_routes(*args)
|
333
|
+
end
|
334
|
+
end
|
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
|
+
|
307
355
|
# ====================================
|
308
356
|
# Dynamically create generic templates
|
309
357
|
# ====================================
|
@@ -1365,7 +1413,7 @@ erDiagram
|
|
1365
1413
|
<% end %>
|
1366
1414
|
</table>
|
1367
1415
|
<%
|
1368
|
-
if (description = (relation = Brick.relations[#{model_name}.table_name])&.fetch(:description, nil)) %><%=
|
1416
|
+
if (description = (relation = Brick.relations[tbl_name = #{model_name}.table_name])&.fetch(:description, nil)) %><%=
|
1369
1417
|
description %><br><%
|
1370
1418
|
end
|
1371
1419
|
%><%= link_to '(See all #{obj_name.pluralize})', #{@_brick_model._brick_index}_path %>
|
@@ -1437,7 +1485,13 @@ end
|
|
1437
1485
|
\"<span class=\\\"orphan\\\">Orphaned ID: #\{val}</span>\".html_safe
|
1438
1486
|
end %>
|
1439
1487
|
<% else
|
1440
|
-
col_type =
|
1488
|
+
col_type = if ::Brick.config.json_columns[tbl_name]&.include?(k)
|
1489
|
+
:json
|
1490
|
+
elsif col&.sql_type == 'geography'
|
1491
|
+
col.sql_type
|
1492
|
+
else
|
1493
|
+
col&.type
|
1494
|
+
end
|
1441
1495
|
case (col_type ||= col&.sql_type)
|
1442
1496
|
when :string, :text %>
|
1443
1497
|
<% if is_bcrypt?(val) # || .readonly?
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -458,6 +458,11 @@ module Brick
|
|
458
458
|
Brick.config.polymorphics = polys || {}
|
459
459
|
end
|
460
460
|
|
461
|
+
# @api public
|
462
|
+
def json_columns=(cols)
|
463
|
+
Brick.config.json_columns = cols
|
464
|
+
end
|
465
|
+
|
461
466
|
# DSL templates for individual models to provide prettier descriptions of objects
|
462
467
|
# @api public
|
463
468
|
def model_descrips=(descrips)
|
@@ -529,7 +534,7 @@ module Brick
|
|
529
534
|
You might be missing an STI namespace prefix entry for these tables: #{missing_stis.keys.join(', ')}.
|
530
535
|
In config/initializers/brick.rb appropriate entries would look something like:
|
531
536
|
Brick.sti_namespace_prefixes = {"
|
532
|
-
puts missing_stis.map { |_k, missing_sti| "\n '
|
537
|
+
puts missing_stis.map { |_k, missing_sti| "\n '#{missing_sti}' => 'SomeParentModel'" }.join(',')
|
533
538
|
puts " }
|
534
539
|
(Just trade out SomeParentModel with some more appropriate one.)"
|
535
540
|
end
|
@@ -655,7 +660,7 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
655
660
|
module RouteSet
|
656
661
|
def finalize!
|
657
662
|
routeset_to_use = ::Rails.application.routes
|
658
|
-
return super
|
663
|
+
return super if self != routeset_to_use || ::Brick.routes_done
|
659
664
|
|
660
665
|
path_prefix = ::Brick.config.path_prefix
|
661
666
|
existing_controllers = routes.each_with_object({}) do |r, s|
|
@@ -859,6 +864,17 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
859
864
|
end
|
860
865
|
end
|
861
866
|
end
|
867
|
+
|
868
|
+
# Trestle compatibility
|
869
|
+
if Object.const_defined?('Trestle') && ::Trestle.config.options&.key?(:site_title) &&
|
870
|
+
!Object.const_defined?("#{(res_name = resource_name.tr('/', '_')).camelize}Admin")
|
871
|
+
begin
|
872
|
+
::Trestle.resource(res_sym = res_name.to_sym, model: class_name&.constantize) do
|
873
|
+
menu { item res_sym, icon: "fa fa-star" }
|
874
|
+
end
|
875
|
+
rescue
|
876
|
+
end
|
877
|
+
end
|
862
878
|
end
|
863
879
|
|
864
880
|
if ::Brick.config.add_status && instance_variable_get(:@set).named_routes.names.exclude?(:brick_status)
|
@@ -907,7 +923,6 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
907
923
|
end
|
908
924
|
end
|
909
925
|
|
910
|
-
::Brick.routes_done = true
|
911
926
|
puts "\n" if tables.present? || views.present?
|
912
927
|
if tables.present?
|
913
928
|
puts "Classes that can be built from tables:#{' ' * (table_class_length - 38)} Path:"
|
@@ -921,6 +936,7 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
921
936
|
end
|
922
937
|
end
|
923
938
|
end
|
939
|
+
::Brick.routes_done = true
|
924
940
|
super
|
925
941
|
end
|
926
942
|
end
|
@@ -963,6 +979,21 @@ module ::Rails
|
|
963
979
|
end
|
964
980
|
end
|
965
981
|
|
982
|
+
# # Support for when a table or view is named just 's'
|
983
|
+
# ActiveSupport::Inflector.class_eval do
|
984
|
+
# class << self
|
985
|
+
# alias _brick_singularize singularize
|
986
|
+
# def singularize(word, locale = :en)
|
987
|
+
# if word.present? && ((ret = _brick_singularize(word, locale)).empty? || ret[-1] == '/')
|
988
|
+
# # puts word
|
989
|
+
# # binding.pry if ret.empty? || ret[-1] == '/'
|
990
|
+
# ret << 's'
|
991
|
+
# end
|
992
|
+
# ret
|
993
|
+
# end
|
994
|
+
# end
|
995
|
+
# end
|
996
|
+
|
966
997
|
# Major compatibility fixes for ActiveRecord < 4.2
|
967
998
|
# ================================================
|
968
999
|
ActiveSupport.on_load(:active_record) do
|
@@ -261,6 +261,10 @@ if ActiveRecord::Base.respond_to?(:brick_select) && !::Brick.initializer_loaded
|
|
261
261
|
# # Designated by <table name>.<column name>
|
262
262
|
# Brick.not_nullables = ['users.name']
|
263
263
|
|
264
|
+
# # String or text columns which for editing purposes should be treated as JSON. Format for the hash is:
|
265
|
+
# # { table_name => [column names] }
|
266
|
+
# Brick.json_columns = { 'users' => ['info'] }
|
267
|
+
|
264
268
|
# # FRIENDLY DSL
|
265
269
|
|
266
270
|
# # A simple DSL is available to allow more user-friendly display of objects. Normally a user object might be shown
|
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.115
|
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-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|