brick 1.0.26 → 1.0.27
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/config.rb +8 -0
- data/lib/brick/extensions.rb +8 -3
- data/lib/brick/frameworks/rails/engine.rb +17 -11
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +7 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '097fb194c2b1323cd051669f362d86492d9c768f1cbccf06c2fdc45a7f266e1e'
|
4
|
+
data.tar.gz: 72746f153d073256b8be063e90c28da85a50e11865250f2570d501ff320431b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83d0c40c0af17d314d6b4cd7ab0e312bce1c8d57bdd0992da1b54fa8a3e829852c6fd800c34f3bd35f3a3306bda736dc99d14af19009926bf65971a5d4904717
|
7
|
+
data.tar.gz: c82b9c31ffe3a00e701e22a3f69c85e7b60e0b3b6d24e95df7fe3f8afb85b00ab7515e0befab7dd37e8a25924274e663127b953dab8eb64041d834aa39de4bc1
|
data/lib/brick/config.rb
CHANGED
@@ -130,6 +130,14 @@ module Brick
|
|
130
130
|
@mutex.synchronize { @schema_to_analyse = schema }
|
131
131
|
end
|
132
132
|
|
133
|
+
def default_route_fallback
|
134
|
+
@mutex.synchronize { @default_route_fallback }
|
135
|
+
end
|
136
|
+
|
137
|
+
def default_route_fallback=(resource_name)
|
138
|
+
@mutex.synchronize { @default_route_fallback = resource_name }
|
139
|
+
end
|
140
|
+
|
133
141
|
def skip_database_views
|
134
142
|
@mutex.synchronize { @skip_database_views }
|
135
143
|
end
|
data/lib/brick/extensions.rb
CHANGED
@@ -385,7 +385,8 @@ module ActiveRecord
|
|
385
385
|
else
|
386
386
|
fk_col = hm.foreign_key
|
387
387
|
poly_type = hm.inverse_of.foreign_type if hm.options.key?(:as)
|
388
|
-
hm.klass.primary_key
|
388
|
+
pk = hm.klass.primary_key
|
389
|
+
(pk.is_a?(Array) ? pk.first : pk) || '*'
|
389
390
|
end
|
390
391
|
tbl_alias = "_br_#{hm.name}"
|
391
392
|
pri_tbl = hm.active_record
|
@@ -779,11 +780,15 @@ class Object
|
|
779
780
|
|
780
781
|
if model.primary_key
|
781
782
|
code << " def show\n"
|
782
|
-
code << (find_by_id = "
|
783
|
+
code << (find_by_id = " id = params[:id]&.split(/[\\/,_]/)
|
784
|
+
id = id.first if id.is_a?(Array) && id.length == 1
|
785
|
+
@#{singular_table_name} = #{model.name}.find(id)\n")
|
783
786
|
code << " end\n"
|
784
787
|
self.define_method :show do
|
785
788
|
::Brick.set_db_schema(params)
|
786
|
-
|
789
|
+
id = params[:id]&.split(/[\/,_]/)
|
790
|
+
id = id.first if id.is_a?(Array) && id.length == 1
|
791
|
+
instance_variable_set("@#{singular_table_name}".to_sym, model.find(id))
|
787
792
|
end
|
788
793
|
end
|
789
794
|
|
@@ -112,7 +112,7 @@ module Brick
|
|
112
112
|
"<%= obj = #{obj_name}.#{hm.first}; link_to(obj.brick_descrip, obj) if obj %>\n"
|
113
113
|
end
|
114
114
|
elsif args.first == 'show'
|
115
|
-
hm_stuff << "<%= link_to '#{assoc_name}', #{hm_assoc.klass.name.underscore.pluralize}_path({ #{path_keys(hm_assoc, hm_fk_name, "@#{obj_name}
|
115
|
+
hm_stuff << "<%= link_to '#{assoc_name}', #{hm_assoc.klass.name.underscore.pluralize}_path({ #{path_keys(hm_assoc, hm_fk_name, "@#{obj_name}", pk)} }) %>\n"
|
116
116
|
end
|
117
117
|
s << hm_stuff
|
118
118
|
end
|
@@ -444,7 +444,7 @@ function changeout(href, param, value) {
|
|
444
444
|
<p style=\"color: green\"><%= notice %></p>#{"
|
445
445
|
<select id=\"schema\">#{schema_options}</select>" if ::Brick.db_schemas.length > 1}
|
446
446
|
<select id=\"tbl\">#{table_options}</select>
|
447
|
-
<h1>#{model_name}: <%= (obj = @#{obj_name}
|
447
|
+
<h1>#{model_name}: <%= (obj = @#{obj_name})&.brick_descrip || controller_name %></h1>
|
448
448
|
<%= link_to '(See all #{obj_name.pluralize})', #{table_name}_path %>
|
449
449
|
<% if obj %>
|
450
450
|
<%= # path_options = [obj.#{pk}]
|
@@ -453,7 +453,7 @@ function changeout(href, param, value) {
|
|
453
453
|
form_for(obj.becomes(#{model_name})) do |f| %>
|
454
454
|
<table>
|
455
455
|
<% has_fields = false
|
456
|
-
@#{obj_name}.
|
456
|
+
@#{obj_name}.attributes.each do |k, val| %>
|
457
457
|
<tr>
|
458
458
|
<%# %%% Accommodate composite keys %>
|
459
459
|
<% next if k == '#{pk}' || ::Brick.config.metadata_columns.include?(k) %>
|
@@ -464,10 +464,15 @@ function changeout(href, param, value) {
|
|
464
464
|
bt_name = bt[1].map { |x| x.first.name }.join('/')
|
465
465
|
# %%% Only do this if the user has permissions to edit this bt field
|
466
466
|
if bt[2] # Polymorphic?
|
467
|
-
poly_class_name = @#{obj_name}.
|
468
|
-
bt_pair =
|
467
|
+
poly_class_name = @#{obj_name}.send(\"#\{bt.first\}_type\")
|
468
|
+
bt_pair = nil
|
469
|
+
loop do
|
470
|
+
bt_pair = bt[1].find { |pair| pair.first.name == poly_class_name }
|
471
|
+
# Acxommodate any valid STI by going up the chain of inheritance
|
472
|
+
break unless bt_pair.nil? && poly_class_name = ::Brick.existing_stis[poly_class_name]
|
473
|
+
end
|
469
474
|
# descrips = @_brick_bt_descrip[bt.first][bt_class]
|
470
|
-
poly_id = @#{obj_name}.
|
475
|
+
poly_id = @#{obj_name}.send(\"#\{bt.first\}_id\")
|
471
476
|
# bt_class.order(obj_pk = bt_class.primary_key).each { |obj| option_detail << [obj.brick_descrip(nil, obj_pk), obj.send(obj_pk)] }
|
472
477
|
else # No polymorphism, so just get the first one
|
473
478
|
bt_pair = bt[1].first
|
@@ -520,16 +525,17 @@ function changeout(href, param, value) {
|
|
520
525
|
|
521
526
|
#{hms_headers.each_with_object(+'') do |hm, s|
|
522
527
|
if (pk = hm.first.klass.primary_key)
|
523
|
-
|
528
|
+
hm_singular_name = (hm_name = hm.first.name.to_s).singularize.underscore
|
529
|
+
obj_pk = (pk.is_a?(Array) ? pk : [pk]).each_with_object([]) { |pk_part, s| s << "#{hm_singular_name}.#{pk_part}" }.join(', ')
|
530
|
+
s << "<table id=\"#{hm_name}\">
|
524
531
|
<tr><th>#{hm[3]}</th></tr>
|
525
|
-
<% collection = @#{obj_name}
|
532
|
+
<% collection = @#{obj_name}.#{hm_name}
|
526
533
|
collection = collection.is_a?(ActiveRecord::Associations::CollectionProxy) ? collection.order(#{pk.inspect}) : [collection]
|
527
534
|
if collection.empty? %>
|
528
535
|
<tr><td>(none)</td></tr>
|
529
536
|
<% else %>
|
530
|
-
<% collection.uniq.each do |#{hm_singular_name
|
531
|
-
|
532
|
-
<tr><td><%= link_to(#{hm_singular_name}.brick_descrip, #{hm.first.klass.name.underscore}_path(#{hm_singular_name}.#{pk})) %></td></tr>
|
537
|
+
<% collection.uniq.each do |#{hm_singular_name}| %>
|
538
|
+
<tr><td><%= link_to(#{hm_singular_name}.brick_descrip, #{hm.first.klass.name.underscore}_path([#{obj_pk}])) %></td></tr>
|
533
539
|
<% end %>
|
534
540
|
<% end %>
|
535
541
|
</table>"
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -291,6 +291,10 @@ module Brick
|
|
291
291
|
Brick.config.schema_to_analyse = schema
|
292
292
|
end
|
293
293
|
|
294
|
+
def default_route_fallback=(resource_name)
|
295
|
+
Brick.config.default_route_fallback = resource_name
|
296
|
+
end
|
297
|
+
|
294
298
|
# Load additional references (virtual foreign keys)
|
295
299
|
# This is attempted early if a brick initialiser file is found, and then again as a failsafe at the end of our engine's initialisation
|
296
300
|
# %%% Maybe look for differences the second time 'round and just add new stuff instead of entirely deferring
|
@@ -381,6 +385,9 @@ In config/initializers/brick.rb appropriate entries would look something like:
|
|
381
385
|
def finalize!
|
382
386
|
existing_controllers = routes.each_with_object({}) { |r, s| c = r.defaults[:controller]; s[c] = nil if c }
|
383
387
|
::Rails.application.routes.append do
|
388
|
+
unless ::Brick.config.default_route_fallback.blank? || ::Rails.application.routes.named_routes.send(:routes)[:root]
|
389
|
+
send(:root, "#{::Brick.config.default_route_fallback}#index")
|
390
|
+
end
|
384
391
|
# %%% TODO: If no auto-controllers then enumerate the controllers folder in order to build matching routes
|
385
392
|
# If auto-controllers and auto-models are both enabled then this makes sense:
|
386
393
|
::Brick.relations.each do |k, v|
|