brick 1.0.138 → 1.0.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/brick/extensions.rb +46 -5
- data/lib/brick/frameworks/rails/engine.rb +14 -9
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +12 -4
- 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: e13ace06f3c894715f631be750cd0571b9ab1cfe44b15780e9278d7b6a1c88f3
|
4
|
+
data.tar.gz: fd0d89eb66a8878fc968e95e7a3c27f1fcf619a06c652c0c58c468d4cf66e451
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58665ea6c29d49542ae83096fa3ad5fa371ed0a12920f86492111319e3ab9a46c8c7d83ab9277377b6dabb51a75adf0a7cb32c4aa37234f54d796fe206563172
|
7
|
+
data.tar.gz: f5ee7ebdfa31f76133db652ff0beec175aa5eb319a7f1472da56f0e8e7c79aba12bceb9c26b73fc4c305e69143529416cb5d683660025d1b1e08aa72209a688b
|
data/lib/brick/extensions.rb
CHANGED
@@ -1042,7 +1042,7 @@ if ActiveSupport::Dependencies.respond_to?(:autoload_module!) # %%% Only works w
|
|
1042
1042
|
end
|
1043
1043
|
end
|
1044
1044
|
|
1045
|
-
|
1045
|
+
::Brick::ADD_CONST_MISSING = lambda do
|
1046
1046
|
alias _brick_const_missing const_missing
|
1047
1047
|
def const_missing(*args)
|
1048
1048
|
requested = args.first.to_s
|
@@ -1319,7 +1319,14 @@ class Object
|
|
1319
1319
|
if (base_model = ::Brick.sti_models[full_model_name]&.fetch(:base, nil) || ::Brick.existing_stis[full_model_name]&.constantize)
|
1320
1320
|
is_sti = true
|
1321
1321
|
else
|
1322
|
-
|
1322
|
+
# Class for auto-generated models to inherit from
|
1323
|
+
base_model = (::Brick.config.models_inherit_from ||= (app.config.brick.fetch(:models_inherit_from, nil) ||
|
1324
|
+
begin
|
1325
|
+
::ApplicationRecord
|
1326
|
+
rescue StandardError => ex
|
1327
|
+
::ActiveRecord::Base
|
1328
|
+
end))
|
1329
|
+
|
1323
1330
|
end
|
1324
1331
|
hmts = nil
|
1325
1332
|
code = +"class #{full_name} < #{base_model.name}\n"
|
@@ -1486,8 +1493,10 @@ class Object
|
|
1486
1493
|
assoc[:assoc_name]
|
1487
1494
|
end
|
1488
1495
|
options[:optional] = true if assoc.key?(:optional)
|
1489
|
-
if assoc.key?(:polymorphic)
|
1490
|
-
|
1496
|
+
if assoc.key?(:polymorphic) ||
|
1497
|
+
# If a polymorphic association is missing but could be established then go ahead and put it into place.
|
1498
|
+
relations[assoc[:inverse_table]][:class_name].constantize.reflect_on_all_associations.find { |inv_assoc| !inv_assoc.belongs_to? && inv_assoc.options[:as].to_s == assoc[:assoc_name] }
|
1499
|
+
assoc[:polymorphic] ||= (options[:polymorphic] = true)
|
1491
1500
|
else
|
1492
1501
|
need_class_name = singular_table_name.underscore != assoc_name
|
1493
1502
|
need_fk = "#{assoc_name}_id" != assoc[:fk]
|
@@ -1548,7 +1557,11 @@ class Object
|
|
1548
1557
|
assoc[:fk].to_sym
|
1549
1558
|
end
|
1550
1559
|
end
|
1551
|
-
|
1560
|
+
if inverse_assoc_name && (need_class_name || need_fk || need_inverse_of) &&
|
1561
|
+
(klass = options[:class_name]&.constantize) && (ian = inverse_assoc_name.tr('.', '_').to_sym) &&
|
1562
|
+
(klass.is_brick? || klass.reflect_on_association(ian))
|
1563
|
+
options[:inverse_of] = ian
|
1564
|
+
end
|
1552
1565
|
|
1553
1566
|
# Prepare a list of entries for "has_many :through"
|
1554
1567
|
if macro == :has_many
|
@@ -1591,14 +1604,38 @@ class Object
|
|
1591
1604
|
built_controller = Class.new(controller_base || ActionController::Base) do |new_controller_class|
|
1592
1605
|
(namespace || Object).const_set(class_name.to_sym, new_controller_class)
|
1593
1606
|
|
1607
|
+
# Add a hash for the inline style to the content-security-policy if one is present
|
1608
|
+
self.define_method(:add_csp_hash) do |style_value = nil|
|
1609
|
+
if (csp = request.content_security_policy)
|
1610
|
+
if (cspd = csp.directives.fetch('style-src'))
|
1611
|
+
if style_value
|
1612
|
+
if (nonce = ::ActionDispatch::ContentSecurityPolicy::Request::NONCE)
|
1613
|
+
request.env[nonce] = '' # Generally 'action_dispatch.content_security_policy_nonce'
|
1614
|
+
end
|
1615
|
+
# Keep only self, if present, and also add this value
|
1616
|
+
cspd.select! { |val| val == "'self'" }
|
1617
|
+
cspd << style_value
|
1618
|
+
else
|
1619
|
+
cspd << "'sha256-QHKxqKcUq7AER1QwEu5uQXRQwC8j4iTWkE8mpOmP7ms='"
|
1620
|
+
end
|
1621
|
+
cspd << 'https://cdn.jsdelivr.net'
|
1622
|
+
end
|
1623
|
+
if (cspd = csp.directives.fetch('script-src'))
|
1624
|
+
cspd << 'https://cdn.jsdelivr.net'
|
1625
|
+
end
|
1626
|
+
end
|
1627
|
+
end
|
1628
|
+
|
1594
1629
|
# Brick-specific pages
|
1595
1630
|
case plural_class_name
|
1596
1631
|
when 'BrickGem'
|
1597
1632
|
self.define_method :status do
|
1598
1633
|
instance_variable_set(:@resources, ::Brick.get_status_of_resources)
|
1634
|
+
add_csp_hash
|
1599
1635
|
end
|
1600
1636
|
self.define_method :orphans do
|
1601
1637
|
instance_variable_set(:@orphans, ::Brick.find_orphans(::Brick.set_db_schema(params).first))
|
1638
|
+
add_csp_hash
|
1602
1639
|
end
|
1603
1640
|
self.define_method :crosstab do
|
1604
1641
|
@relations = ::Brick.relations.each_with_object({}) do |r, s|
|
@@ -1881,6 +1918,7 @@ class Object
|
|
1881
1918
|
@_brick_hm_counts = real_model._br_hm_counts
|
1882
1919
|
@_brick_join_array = join_array
|
1883
1920
|
@_brick_erd = params['_brick_erd']&.to_i
|
1921
|
+
add_csp_hash
|
1884
1922
|
end
|
1885
1923
|
end
|
1886
1924
|
|
@@ -1911,6 +1949,7 @@ class Object
|
|
1911
1949
|
self.define_method :show do
|
1912
1950
|
_schema, @_is_show_schema_list = ::Brick.set_db_schema(params)
|
1913
1951
|
instance_variable_set("@#{singular_table_name}".to_sym, find_obj)
|
1952
|
+
add_csp_hash("'unsafe-inline'")
|
1914
1953
|
end
|
1915
1954
|
end
|
1916
1955
|
|
@@ -1928,6 +1967,7 @@ class Object
|
|
1928
1967
|
end if Object.const_defined?('ActiveStorage')
|
1929
1968
|
end
|
1930
1969
|
instance_variable_set("@#{singular_table_name}".to_sym, new_obj)
|
1970
|
+
add_csp_hash
|
1931
1971
|
end
|
1932
1972
|
|
1933
1973
|
params_name_sym = (params_name = "#{singular_table_name}_params").to_sym
|
@@ -1968,6 +2008,7 @@ class Object
|
|
1968
2008
|
self.define_method :edit do
|
1969
2009
|
_schema, @_is_show_schema_list = ::Brick.set_db_schema(params)
|
1970
2010
|
instance_variable_set("@#{singular_table_name}".to_sym, find_obj)
|
2011
|
+
add_csp_hash
|
1971
2012
|
end
|
1972
2013
|
|
1973
2014
|
code << " def update\n"
|
@@ -209,6 +209,7 @@ function linkSchemas() {
|
|
209
209
|
# paths['app/models'] << 'lib/brick/frameworks/active_record/models'
|
210
210
|
config.brick = ActiveSupport::OrderedOptions.new
|
211
211
|
ActiveSupport.on_load(:before_initialize) do |app|
|
212
|
+
::Rails.application.reloader.to_prepare { Module.class_exec &::Brick::ADD_CONST_MISSING }
|
212
213
|
is_development = (ENV['RAILS_ENV'] || ENV['RACK_ENV']) == 'development'
|
213
214
|
::Brick.enable_models = app.config.brick.fetch(:enable_models, true)
|
214
215
|
::Brick.enable_controllers = app.config.brick.fetch(:enable_controllers, is_development)
|
@@ -736,7 +737,7 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
736
737
|
end
|
737
738
|
when 'show', 'new', 'update'
|
738
739
|
hm_stuff << if hm_fk_name
|
739
|
-
if hm_assoc.klass.column_names.include?(hm_fk_name) ||
|
740
|
+
if hm_assoc.klass.column_names.include?(hm_fk_name.to_s) ||
|
740
741
|
(hm_fk_name.is_a?(String) && hm_fk_name.include?('.')) # HMT? (Could do a better check for this)
|
741
742
|
predicates = path_keys(hm_assoc, hm_fk_name, pk).map do |k, v|
|
742
743
|
if v == '[sti_type]'
|
@@ -798,6 +799,10 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
798
799
|
left: 0;
|
799
800
|
}
|
800
801
|
|
802
|
+
.flashNotice {
|
803
|
+
color: green;
|
804
|
+
}
|
805
|
+
|
801
806
|
h1, h3 {
|
802
807
|
margin-bottom: 0;
|
803
808
|
}
|
@@ -1313,7 +1318,7 @@ erDiagram
|
|
1313
1318
|
</head>
|
1314
1319
|
<body>
|
1315
1320
|
<div id=\"titleBox\"><div id=\"titleSticky\">
|
1316
|
-
<p
|
1321
|
+
<p class=\"flashNotice\"><%= notice if request.respond_to?(:flash) %></p>#{"
|
1317
1322
|
#{schema_options}" if schema_options}
|
1318
1323
|
<select id=\"tbl\">#{table_options}</select>
|
1319
1324
|
<table id=\"resourceName\"><tr>
|
@@ -1453,7 +1458,7 @@ end
|
|
1453
1458
|
# Must load all models, and then find what table names are represented
|
1454
1459
|
# Easily could be multiple files involved (STI for instance)
|
1455
1460
|
+"#{css}
|
1456
|
-
<p
|
1461
|
+
<p class=\"flashNotice\"><%= notice if request.respond_to?(:flash) %></p>#{"
|
1457
1462
|
#{schema_options}" if schema_options}
|
1458
1463
|
<select id=\"tbl\">#{table_options}</select>
|
1459
1464
|
<h1>Status</h1>
|
@@ -1503,7 +1508,7 @@ end
|
|
1503
1508
|
when 'orphans'
|
1504
1509
|
if is_orphans
|
1505
1510
|
+"#{css}
|
1506
|
-
<p
|
1511
|
+
<p class=\"flashNotice\"><%= notice if request.respond_to?(:flash) %></p>#{"
|
1507
1512
|
#{schema_options}" if schema_options}
|
1508
1513
|
<select id=\"tbl\">#{table_options}</select>
|
1509
1514
|
<h1>Orphans<%= \" for #\{}\" if false %></h1>
|
@@ -1550,7 +1555,7 @@ end
|
|
1550
1555
|
c23.141-70.188,89.141-120.906,167.063-120.906c97.25,0,176,78.813,176,176C511.828,227.078,404.391,119.641,271.844,119.641z\" />
|
1551
1556
|
</svg>
|
1552
1557
|
|
1553
|
-
<p
|
1558
|
+
<p class=\"flashNotice\"><%= notice if request.respond_to?(:flash) %></p>#{"
|
1554
1559
|
#{schema_options}" if schema_options}
|
1555
1560
|
<select id=\"tbl\">#{table_options}</select>
|
1556
1561
|
<table id=\"resourceName\"><td><h1><%= page_title %></h1></td>
|
@@ -1716,11 +1721,11 @@ end
|
|
1716
1721
|
if collection2.empty? %>
|
1717
1722
|
<tr><td>(none)</td></tr>
|
1718
1723
|
<% else
|
1719
|
-
collection2.each do
|
1720
|
-
<tr><td><%= br_descrip = #{hm_singular_name}.brick_descrip(
|
1721
|
-
descrip_cols&.first&.map { |col| #{hm_singular_name}.send(col.last) }
|
1724
|
+
collection2.each do |br_#{hm_singular_name}| %>
|
1725
|
+
<tr><td><%= br_descrip = br_#{hm_singular_name}.brick_descrip(
|
1726
|
+
descrip_cols&.first&.map { |col| br_#{hm_singular_name}.send(col.last) }
|
1722
1727
|
)
|
1723
|
-
link_to(br_descrip, #{hm.first.klass._brick_index(:singular)}_path(slashify(#{obj_pk}))) %></td></tr>
|
1728
|
+
link_to(br_descrip, #{hm.first.klass._brick_index(:singular)}_path(slashify(br_#{obj_pk}))) %></td></tr>
|
1724
1729
|
<% end %>
|
1725
1730
|
<% end %>
|
1726
1731
|
</table>"
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -254,7 +254,7 @@ module Brick
|
|
254
254
|
next
|
255
255
|
end
|
256
256
|
else
|
257
|
-
if !a.options.key?(:as) && a.klass.column_names.exclude?(a.foreign_key)
|
257
|
+
if !a.options.key?(:as) && a.klass.column_names.exclude?(a.foreign_key.to_s)
|
258
258
|
options = ", #{a.options.map { |k, v| "#{k.inspect} => #{v.inspect}" }.join(', ')}" if a.options.present?
|
259
259
|
puts "WARNING: Model #{model.name} has this association:
|
260
260
|
has_many :#{a.name}#{options}
|
@@ -922,11 +922,19 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
922
922
|
end
|
923
923
|
end
|
924
924
|
|
925
|
-
if ::Brick.config.add_status &&
|
926
|
-
|
925
|
+
if ::Brick.config.add_status && (status_as = "#{controller_prefix.tr('/', '_')}brick_status".to_sym)
|
926
|
+
(
|
927
|
+
!(status_route = instance_variable_get(:@set).named_routes.find { |route| route.first == status_as }&.last) ||
|
928
|
+
!status_route.ast.to_s.include?("/#{controller_prefix}brick_status/")
|
929
|
+
)
|
930
|
+
get("/#{controller_prefix}brick_status", to: 'brick_gem#status', as: status_as.to_s)
|
927
931
|
end
|
928
932
|
|
929
|
-
if ::Brick.config.add_orphans &&
|
933
|
+
if ::Brick.config.add_orphans && (orphans_as = "#{controller_prefix.tr('/', '_')}brick_orphans".to_sym)
|
934
|
+
(
|
935
|
+
!(orphans_route = instance_variable_get(:@set).named_routes.find { |route| route.first == orphans_as }&.last) ||
|
936
|
+
!orphans_route.ast.to_s.include?("/#{controller_prefix}brick_orphans/")
|
937
|
+
)
|
930
938
|
get("/#{controller_prefix}brick_orphans", to: 'brick_gem#orphans', as: 'brick_orphans')
|
931
939
|
end
|
932
940
|
|
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.139
|
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-05-
|
11
|
+
date: 2023-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|