brick 1.0.17 → 1.0.18
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 +1 -1
- data/lib/brick/extensions.rb +32 -7
- data/lib/brick/frameworks/rails/engine.rb +70 -20
- data/lib/brick/version_number.rb +1 -1
- 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: add7e232024e140e2fb089ef158600e2a2a955efd787dc986769b43b4b1f6d24
|
4
|
+
data.tar.gz: a45d187a7b739f90b1fede46dfc9f63a2057a3410d052e0ad57322f4741ebfee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0897e041c617f0e1e695d0402784184ce2f7ec575d9b0e7a7b1b59b2efbcb40a4de28bcbe2eb124f576dddb8e7371f572c67ee3b19120cd281bf3358249b4508'
|
7
|
+
data.tar.gz: fc7a4a93a7d2409f4aa82fb3dbf23710aaad45a1dca1193c8cbcefa86d5d9061a773214c8fe0dd02375660bfb6e5a9856df3a202f57a73990e79d23850918f9b
|
data/lib/brick/config.rb
CHANGED
data/lib/brick/extensions.rb
CHANGED
@@ -454,7 +454,7 @@ class Object
|
|
454
454
|
|
455
455
|
if model.primary_key
|
456
456
|
code << " def show\n"
|
457
|
-
code << " @#{singular_table_name} = #{model.name}.find(params[:id].split(','))\n"
|
457
|
+
code << (find_by_id = " @#{singular_table_name} = #{model.name}.find(params[:id].split(','))\n")
|
458
458
|
code << " end\n"
|
459
459
|
self.define_method :show do
|
460
460
|
::Brick.set_db_schema(params)
|
@@ -463,9 +463,36 @@ class Object
|
|
463
463
|
end
|
464
464
|
|
465
465
|
# By default, views get marked as read-only
|
466
|
-
unless (relation = relations[model.table_name]).key?(:isView)
|
467
|
-
code << " # (Define :new, :create
|
468
|
-
|
466
|
+
unless false # model.readonly # (relation = relations[model.table_name]).key?(:isView)
|
467
|
+
code << " # (Define :new, :create)\n"
|
468
|
+
|
469
|
+
if model.primary_key
|
470
|
+
is_need_params = true
|
471
|
+
# code << " # (Define :edit, and :destroy)\n"
|
472
|
+
code << " def update\n"
|
473
|
+
code << find_by_id
|
474
|
+
params_name = "#{singular_table_name}_params"
|
475
|
+
code << " @#{singular_table_name}.update(#{params_name})\n"
|
476
|
+
code << " end\n"
|
477
|
+
self.define_method :update do
|
478
|
+
::Brick.set_db_schema(params)
|
479
|
+
instance_variable_set("@#{singular_table_name}".to_sym, (obj = model.find(params[:id].split(','))))
|
480
|
+
obj = obj.first if obj.is_a?(Array)
|
481
|
+
obj.send(:update, send(params_name = params_name.to_sym))
|
482
|
+
end
|
483
|
+
end
|
484
|
+
|
485
|
+
if is_need_params
|
486
|
+
code << "private\n"
|
487
|
+
code << " def params\n"
|
488
|
+
code << " params.require(:#{singular_table_name}).permit(#{model.columns_hash.keys.map { |c| c.to_sym.inspect }.join(', ')})\n"
|
489
|
+
code << " end\n"
|
490
|
+
self.define_method(params_name) do
|
491
|
+
params.require(singular_table_name.to_sym).permit(model.columns_hash.keys)
|
492
|
+
end
|
493
|
+
private params_name
|
494
|
+
# Get column names for params from relations[model.table_name][:cols].keys
|
495
|
+
end
|
469
496
|
end
|
470
497
|
code << "end # #{class_name}\n\n"
|
471
498
|
end # class definition
|
@@ -629,14 +656,12 @@ module ActiveRecord::ConnectionHandling
|
|
629
656
|
puts "\nClasses that can be built from views:"
|
630
657
|
views.keys.each { |k| puts ActiveSupport::Inflector.singularize(k).camelize }
|
631
658
|
end
|
659
|
+
|
632
660
|
# Try to load the initializer pretty danged early
|
633
661
|
if File.exist?(brick_initialiser = Rails.root.join('config/initializers/brick.rb'))
|
634
662
|
load brick_initialiser
|
635
663
|
::Brick.load_additional_references
|
636
664
|
end
|
637
|
-
|
638
|
-
# relations.keys.each { |k| ActiveSupport::Inflector.singularize(k).camelize.constantize }
|
639
|
-
# Layout table describes permissioned hierarchy throughout
|
640
665
|
end
|
641
666
|
end
|
642
667
|
|
@@ -89,7 +89,8 @@ module Brick
|
|
89
89
|
end
|
90
90
|
|
91
91
|
schema_options = ::Brick.db_schemas.each_with_object(+'') { |v, s| s << "<option value=\"#{v}\">#{v}</option>" }.html_safe
|
92
|
-
table_options = ::Brick.relations.keys
|
92
|
+
table_options = (::Brick.relations.keys - ::Brick.config.exclude_tables)
|
93
|
+
.each_with_object(+'') { |v, s| s << "<option value=\"#{v}\">#{v}</option>" }.html_safe
|
93
94
|
hms_columns = +'' # Used for 'index'
|
94
95
|
hms_headers = hms.each_with_object([]) do |hm, s|
|
95
96
|
next if exclude_hms.key?((hm_assoc = hm.last).name)
|
@@ -163,6 +164,23 @@ a.big-arrow {
|
|
163
164
|
font-size: 2.5em;
|
164
165
|
text-decoration: none;
|
165
166
|
}
|
167
|
+
.wide-input {
|
168
|
+
display: block;
|
169
|
+
overflow: hidden;
|
170
|
+
}
|
171
|
+
.wide-input input[type=text] {
|
172
|
+
width: 100%;
|
173
|
+
}
|
174
|
+
.dimmed {
|
175
|
+
background-color: #C0C0C0;
|
176
|
+
}
|
177
|
+
input[type=submit] {
|
178
|
+
background-color: #004998;
|
179
|
+
color: #FFF;
|
180
|
+
}
|
181
|
+
.right {
|
182
|
+
text-align: right;
|
183
|
+
}
|
166
184
|
</style>
|
167
185
|
<% def is_bcrypt?(val)
|
168
186
|
val.is_a?(String) && val.length == 60 && val.start_with?('$2a$')
|
@@ -173,8 +191,9 @@ end %>"
|
|
173
191
|
|
174
192
|
script = "<script>
|
175
193
|
var schemaSelect = document.getElementById(\"schema\");
|
194
|
+
var brickSchema;
|
176
195
|
if (schemaSelect) {
|
177
|
-
|
196
|
+
brickSchema = changeout(location.href, \"_brick_schema\");
|
178
197
|
if (brickSchema) {
|
179
198
|
[... document.getElementsByTagName(\"A\")].forEach(function (a) { a.href = changeout(a.href, \"_brick_schema\", brickSchema); });
|
180
199
|
}
|
@@ -184,6 +203,17 @@ if (schemaSelect) {
|
|
184
203
|
location.href = changeout(location.href, \"_brick_schema\", this.value);
|
185
204
|
});
|
186
205
|
}
|
206
|
+
[... document.getElementsByTagName(\"FORM\")].forEach(function (form) {
|
207
|
+
if (brickSchema)
|
208
|
+
form.action = changeout(form.action, \"_brick_schema\", brickSchema);
|
209
|
+
form.addEventListener('submit', function (ev) {
|
210
|
+
[... ev.target.getElementsByTagName(\"SELECT\")].forEach(function (select) {
|
211
|
+
if (select.value === \"^^^brick_NULL^^^\")
|
212
|
+
select.value = null;
|
213
|
+
});
|
214
|
+
return true;
|
215
|
+
});
|
216
|
+
});
|
187
217
|
|
188
218
|
var tblSelect = document.getElementById(\"tbl\");
|
189
219
|
if (tblSelect) {
|
@@ -265,14 +295,18 @@ function changeout(href, param, value) {
|
|
265
295
|
|
266
296
|
#{"<hr><%= link_to \"New #{obj_name}\", new_#{obj_name}_path %>" unless @_brick_model.is_view?}
|
267
297
|
#{script}"
|
268
|
-
when 'show'
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
298
|
+
when 'show', 'update'
|
299
|
+
"#{css}
|
300
|
+
<p style=\"color: green\"><%= notice %></p>#{"
|
301
|
+
<select id=\"schema\">#{schema_options}</select>" if ::Brick.db_schemas.length > 1}
|
302
|
+
<select id=\"tbl\">#{table_options}</select>
|
303
|
+
<h1>#{model_name}: <%= (obj = @#{obj_name}&.first)&.brick_descrip || controller_name %></h1>
|
304
|
+
<%= link_to '(See all #{obj_name.pluralize})', #{table_name}_path %>
|
305
|
+
<% if obj %>
|
306
|
+
<%= # path_options = [obj.#{pk}]
|
307
|
+
# path_options << { '_brick_schema': } if
|
308
|
+
# url = send(:#{model_name.underscore}_path, obj.#{pk})
|
309
|
+
form_for(obj) do |f| %>
|
276
310
|
<table>
|
277
311
|
<% bts = { #{bts.each_with_object([]) { |v, s| s << "#{v.first.inspect} => [#{v.last.first.inspect}, #{v.last[1].name}, #{v.last[1].primary_key.inspect}]"}.join(', ')} }
|
278
312
|
@#{obj_name}.first.attributes.each do |k, val| %>
|
@@ -281,25 +315,40 @@ function changeout(href, param, value) {
|
|
281
315
|
<th class=\"show-field\">
|
282
316
|
<% if (bt = bts[k])
|
283
317
|
# Add a final member in this array with descriptive options to be used in <select> drop-downs
|
318
|
+
bt_name = bt[1].name
|
284
319
|
# %%% Only do this if the user has permissions to edit this bt field
|
285
|
-
|
286
|
-
|
320
|
+
if bt.length < 4
|
321
|
+
bt << (option_detail = [[\"(No #\{bt_name\} chosen)\", '^^^brick_NULL^^^']])
|
322
|
+
bt[1].order(:#{pk}).each { |obj| option_detail << [obj.brick_descrip, obj.#{pk}] }
|
323
|
+
end %>
|
324
|
+
BT <%= \"#\{bt.first\}-\" unless bt_name.underscore == bt.first.to_s %><%= bt_name %>
|
287
325
|
<% else %>
|
288
326
|
<%= k %>
|
289
327
|
<% end %>
|
290
328
|
</th>
|
291
329
|
<td>
|
292
|
-
<% if (bt = bts[k]) # bt_obj.brick_descrip
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
<%=
|
297
|
-
<% else
|
298
|
-
|
330
|
+
<% if (bt = bts[k]) # bt_obj.brick_descrip
|
331
|
+
html_options = { prompt: \"Select #\{bt_name\}\" }
|
332
|
+
html_options[:class] = 'dimmed' unless val %>
|
333
|
+
<%= f.select k.to_sym, bt[3], { value: val || '^^^brick_NULL^^^' }, html_options %>
|
334
|
+
<%= bt_obj = bt[1].find_by(bt[2] => val); link_to('⇛', send(\"#\{bt_obj_class = bt_name.underscore\}_path\".to_sym, bt_obj.send(bt[1].primary_key.to_sym)), { class: 'show-arrow' }) if bt_obj %>
|
335
|
+
<% else case #{model_name}.column_for_attribute(k).type
|
336
|
+
when :string, :text %>
|
337
|
+
<% if is_bcrypt?(val) # || .readonly? %>
|
338
|
+
<%= hide_bcrypt(val) %>
|
339
|
+
<% else %>
|
340
|
+
<div class=\"wide-input\"><%= f.text_field k.to_sym %></div>
|
341
|
+
<% end %>
|
342
|
+
<% when :boolean %>
|
343
|
+
<%= f.check_box k.to_sym %>
|
344
|
+
<% when :integer, :date, :datetime, :decimal %>
|
345
|
+
<%= val %>
|
346
|
+
<% end %>
|
299
347
|
<% end %>
|
300
348
|
</td>
|
301
349
|
</tr>
|
302
|
-
|
350
|
+
<% end %>
|
351
|
+
<tr><td colspan=\"2\" class=\"right\"><%= f.submit %></td></tr>
|
303
352
|
</table>
|
304
353
|
<% end %>
|
305
354
|
|
@@ -317,6 +366,7 @@ function changeout(href, param, value) {
|
|
317
366
|
<% end %>
|
318
367
|
<% end %>
|
319
368
|
</table>" end.join}
|
369
|
+
<% end %>
|
320
370
|
#{script}"
|
321
371
|
|
322
372
|
end
|
data/lib/brick/version_number.rb
CHANGED