brick 1.0.178 → 1.0.180

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 888b7144102e5155a28f931b7b986a68a3eb781dee890990fae9f81ed8bf2e21
4
- data.tar.gz: c5fcc9dd02f6b45025d600e9a02a16011e93559568c63c24b4acde0f603a2540
3
+ metadata.gz: c5cc0c73d63cbebcbad81388f8ae444c72dafa57a38c1f2a95b3b7f5bd4a621a
4
+ data.tar.gz: 8670884c20ac46ee01d28c97fabe97694a2f3862761228e16c0422790a937cc8
5
5
  SHA512:
6
- metadata.gz: f8f32f40106be993ee33bac87ef4dad4558e7bcbae61f6f61658671b825eba6312586f75fdc329c22a3a2898a2d38e568c70e05ca173e9824637226ce28aaee3
7
- data.tar.gz: e3e0fa0646201059751ecf8fdd30860d582aa3e746ceeb3c6cac276aa831dcefe6a9fc8de34f6e4a720fcd5503842192e8cd8f33ceed37cb6087000d342223ee
6
+ metadata.gz: 62d010ea2765fe14369e18db8b123426f5ace62025b053b453656870223073b75f95add727e5cb2073f78d0f58a88cb293904bcbee08726b0ba09947c16f3709
7
+ data.tar.gz: 25dbb2878198256df74cc36934bb7fcaab24a3dfd0b9cac55de8d04e2fcfce8ff0158458cd2d76004e354020addd6b38de5001ab79bebecb9f8afaa1f3e5133f
@@ -1189,7 +1189,7 @@ if Object.const_defined?('ActionView')
1189
1189
  # not let Brick have any fun. So just call this right before any wildcard routes, and
1190
1190
  # you'll be in business!
1191
1191
  def mount_brick_routes
1192
- add_brick_routes unless ::Brick.routes_done
1192
+ add_brick_routes if !::Brick.routes_done && respond_to?(:add_brick_routes)
1193
1193
  end
1194
1194
  end
1195
1195
  end
@@ -1911,6 +1911,16 @@ class Object
1911
1911
  instance_variable_set(:@resources, ::Brick.get_status_of_resources)
1912
1912
  add_csp_hash
1913
1913
  end
1914
+ self.define_method :schema_create do
1915
+ if (base_class = (model = params['modelName']&.constantize).base_class) &&
1916
+ base_class.column_names.exclude?(col_name = params['colName'])
1917
+ ActiveRecord::Base.connection.add_column(base_class.table_name.to_sym, col_name, (col_type = params['colType']).to_sym)
1918
+ base_class.reset_column_information
1919
+ ::Brick.relations[base_class.table_name]&.fetch(:cols, nil)&.[]=(col_name, [col_type, nil, false, false])
1920
+ # instance_variable_set(:@schema, ::Brick.find_schema(::Brick.set_db_schema(params).first))
1921
+ add_csp_hash
1922
+ end
1923
+ end
1914
1924
  self.define_method :orphans do
1915
1925
  instance_variable_set(:@orphans, ::Brick.find_orphans(::Brick.set_db_schema(params).first))
1916
1926
  add_csp_hash
@@ -2581,7 +2591,7 @@ end.class_exec do
2581
2591
  if arca::AbstractAdapter.private_instance_methods.include?(:with_raw_connection)
2582
2592
  db_statements.define_method(:begin_db_transaction) do
2583
2593
  log("begin immediate transaction", "TRANSACTION") do
2584
- with_raw_connection(allow_retry: true, uses_transaction: false) do |conn|
2594
+ with_raw_connection(allow_retry: true, materialize_transactions: false) do |conn|
2585
2595
  conn.transaction(:immediate)
2586
2596
  end
2587
2597
  end
@@ -793,7 +793,7 @@ window.addEventListener(\"popstate\", linkSchemas);
793
793
  end.html_safe
794
794
  table_options << "<option value=\"#{prefix}brick_status\">(Status)</option>".html_safe if ::Brick.config.add_status
795
795
  table_options << "<option value=\"#{prefix}brick_orphans\">(Orphans)</option>".html_safe if is_orphans
796
- table_options << "<option value=\"#{prefix}brick_orphans\">(Crosstab)</option>".html_safe if is_crosstab
796
+ table_options << "<option value=\"#{prefix}brick_crosstab\">(Crosstab)</option>".html_safe if is_crosstab
797
797
  css = +"<style>
798
798
  #titleSticky {
799
799
  position: sticky;
@@ -1063,6 +1063,8 @@ document.querySelectorAll(\"input[type=submit][data-confirm]\").forEach(function
1063
1063
  }
1064
1064
  function doFetch(method, payload, success) {
1065
1065
  payload.authenticity_token = <%= session[:_csrf_token].inspect.html_safe %>;
1066
+ var action = payload._brick_action || location.href;
1067
+ delete payload._brick_action;
1066
1068
  if (!success) {
1067
1069
  success = function (p) {p.text().then(function (response) {
1068
1070
  var result = JSON.parse(response).result;
@@ -1071,7 +1073,7 @@ function doFetch(method, payload, success) {
1071
1073
  }
1072
1074
  var options = {method: method, headers: {\"Content-Type\": \"application/json\"}};
1073
1075
  if (payload) options.body = JSON.stringify(payload);
1074
- return fetch(location.href, options).then(success);
1076
+ return fetch(action, options).then(success);
1075
1077
  }
1076
1078
 
1077
1079
  // Cause descriptive text to use the same font as the resource
@@ -1088,7 +1090,8 @@ if (window.brickFontFamily) {
1088
1090
  end %>"
1089
1091
 
1090
1092
  erd_markup = if @_brick_model
1091
- "<div id=\"mermaidErd\" class=\"mermaid\">
1093
+ "<div id=\"mermaidErd\">
1094
+ <div id=\"mermaidDiagram\" class=\"mermaid\">
1092
1095
  erDiagram
1093
1096
  <% def sidelinks(shown_classes, klass)
1094
1097
  links = []
@@ -1168,6 +1171,40 @@ erDiagram
1168
1171
  # callback < %= cb_k % > erdClick
1169
1172
  @_brick_monetized_attributes = model.respond_to?(:monetized_attributes) ? model.monetized_attributes.values : {}
1170
1173
  %>
1174
+ </div>#{
1175
+ add_column = nil
1176
+ # Make into a server control with a javascript snippet
1177
+ # Have post back go to a common "brick_schema" endpoint, this one for add_column
1178
+ "
1179
+ <table style=\"position: relative; z-index: 2; border: 2px solid blue;\"><tr>
1180
+ <td rowspan=\"2\">Add<br>Column</td>
1181
+ <td style=\"padding-bottom: 0px\">Type</td><td style=\"padding-bottom: 0px\">Name</td>
1182
+ <td rowspan=\"2\"><input type=\"button\" id=\"btnAddCol\" value=\"+\"></td>
1183
+ </tr><tr><td style=\"padding-top: 0px\">
1184
+ <select id=\"ddlColType\">
1185
+ <option value=\"string\">String</option>
1186
+ <option value=\"text\">Text</option>
1187
+ <option value=\"integer\">Integer</option>
1188
+ <option value=\"bool\">Boolean</option>
1189
+ </select></td>
1190
+ <td style=\"padding-top: 0px\"><input id=\"txtColName\"></td>
1191
+ </tr></table>
1192
+ <script>
1193
+ var btnAddCol = document.getElementById(\"btnAddCol\");
1194
+ btnAddCol.addEventListener(\"click\", function () {
1195
+ var txtColName = document.getElementById(\"txtColName\");
1196
+ var ddlColType = document.getElementById(\"ddlColType\");
1197
+ doFetch(\"POST\", {modelName: \"#{@_brick_model.name}\",
1198
+ colName: txtColName.value, colType: ddlColType.value,
1199
+ _brick_action: \"/#{prefix}brick_schema\"},
1200
+ function () { // If it returns successfully, do a page refresh
1201
+ location.href = location.href;
1202
+ }
1203
+ );
1204
+ });
1205
+ </script>
1206
+ " unless add_column == false}
1207
+
1171
1208
  </div>
1172
1209
  "
1173
1210
  end
@@ -1766,7 +1803,7 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
1766
1803
  gErd.addEventListener(\"click\",
1767
1804
  function (evt) {
1768
1805
  location.href = changeout(changeout(
1769
- changeout(location.href, '_brick_order', null), // Remove any ordering
1806
+ changeout(location.href, \"_brick_order\", null), // Remove any ordering
1770
1807
  -1, cbs[this.id].replace(/^[\/]+/, \"\")), \"_brick_erd\", \"1\");
1771
1808
  }
1772
1809
  );
@@ -1774,6 +1811,7 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
1774
1811
  }}
1775
1812
  });
1776
1813
  mermaid.contentLoaded();
1814
+ window.history.replaceState({}, \"\", changeout(location.href, \"_brick_erd\", \"1\"));
1777
1815
  // Add <span> at the end
1778
1816
  var span = document.createElement(\"SPAN\");
1779
1817
  span.className = \"exclude\";
@@ -1782,7 +1820,7 @@ flatpickr(\".timepicker\", {enableTime: true, noCalendar: true});
1782
1820
  e.stopPropagation();
1783
1821
  imgErd.style.display = \"table-cell\";
1784
1822
  mermaidErd.style.display = \"none\";
1785
- window.history.pushState({}, '', changeout(location.href, '_brick_erd', null));
1823
+ window.history.replaceState({}, \"\", changeout(location.href, \"_brick_erd\", null));
1786
1824
  });
1787
1825
  mermaidErd.appendChild(span);
1788
1826
  }
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 178
8
+ TINY = 180
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
data/lib/brick.rb CHANGED
@@ -910,7 +910,7 @@ In config/initializers/brick.rb appropriate entries would look something like:
910
910
 
911
911
  object_name = k.split('.').last # Take off any first schema part
912
912
 
913
- full_schema_prefix = if (aps = v.fetch(:auto_prefixed_schema, nil))
913
+ full_schema_prefix = if (full_aps = aps = v.fetch(:auto_prefixed_schema, nil))
914
914
  aps = aps[0..-2] if aps[-1] == '_'
915
915
  (schema_prefix&.dup || +'') << "#{aps}."
916
916
  else
@@ -925,7 +925,7 @@ In config/initializers/brick.rb appropriate entries would look something like:
925
925
  else
926
926
  table_class_length = class_name.length if class_name.length > table_class_length
927
927
  tables
928
- end << [class_name, aps, k.tr('.', '/')]
928
+ end << [class_name, aps, k.tr('.', '/')[full_aps&.length || 0 .. -1]]
929
929
  end
930
930
 
931
931
  options = {}
@@ -1089,6 +1089,15 @@ In config/initializers/brick.rb appropriate entries would look something like:
1089
1089
  get("/#{controller_prefix}brick_status", to: 'brick_gem#status', as: status_as.to_s)
1090
1090
  end
1091
1091
 
1092
+ # ::Brick.config.add_schema &&
1093
+ if (schema_as = "#{controller_prefix.tr('/', '_')}brick_schema".to_sym)
1094
+ (
1095
+ !(schema_route = instance_variable_get(:@set).named_routes.find { |route| route.first == schema_as }&.last) ||
1096
+ !schema_route.ast.to_s.include?("/#{controller_prefix}brick_schema/")
1097
+ )
1098
+ post("/#{controller_prefix}brick_schema", to: 'brick_gem#schema_create', as: schema_as.to_s)
1099
+ end
1100
+
1092
1101
  if ::Brick.config.add_orphans && (orphans_as = "#{controller_prefix.tr('/', '_')}brick_orphans".to_sym)
1093
1102
  (
1094
1103
  !(orphans_route = instance_variable_get(:@set).named_routes.find { |route| route.first == orphans_as }&.last) ||
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'brick'
3
4
  require 'rails/generators'
4
5
  # require 'rails/generators/active_record'
5
6
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'brick'
3
4
  require 'rails/generators'
4
5
  require 'rails/generators/active_record'
5
6
  require 'fancy_gets'
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'brick'
3
4
  require 'rails/generators'
4
5
  require 'rails/generators/active_record'
5
6
  require 'fancy_gets'
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'brick'
3
4
  require 'rails/generators'
4
5
  require 'fancy_gets'
5
6
 
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.178
4
+ version: 1.0.180
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-10-02 00:00:00.000000000 Z
11
+ date: 2023-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -164,20 +164,6 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: 1.42.0
167
- - !ruby/object:Gem::Dependency
168
- name: rswag-ui
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: mysql2
183
169
  requirement: !ruby/object:Gem::Requirement