brick 1.0.11 → 1.0.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 513e7f88a3dc5ac0f198308e3d82b6f3990af72d5b7b628d83863d887ab50ee2
4
- data.tar.gz: 845340d554fcfad33d1d841a3098fcf93aaae96dd426c17256cefbe103dd1997
3
+ metadata.gz: f7c3e4032e5e9f111839b7ff6e6378e4937edeabeb0edcf480cf6c50e79e599a
4
+ data.tar.gz: 1a1e5b096a3f6fff0f2c49c6be6abcfbe012f3e24fccf0ea6b307b58d9cbc076
5
5
  SHA512:
6
- metadata.gz: 87f4c91911e83770c025c36945bec40c191b73a539a94bf5188738b01b516df0347f20f3710d9cca8f392dfcc32b2df68413309edddedc13dfff8d47ca99efa6
7
- data.tar.gz: e357a73bd2f5d6371a3d92344cd5635f458f332b2027d66851e068cd3f833f7fffd3ff6dc2a51d48bc2b9b9696d14a5ff999ea5a626341d14ff90286b4a19836
6
+ metadata.gz: 4dbd885a2c4dc9666378a69423179ca2085c89b6b6120d21ef8d3274f229a88306f54868b8a18aad8e55a37a71bc9b78dff073263bb86fd89d5b982acf8d5210
7
+ data.tar.gz: 952f94f89445170f26fad10357ede0df7c9053d034ddb552b1e9cba884cbdf0325325cb29a2248fac4e9de3bd8c41619fc9612d44435e6ccb808a16fd018d8dc
@@ -137,7 +137,26 @@ module ActiveRecord
137
137
  alias _brick_find_sti_class find_sti_class
138
138
  def find_sti_class(type_name)
139
139
  ::Brick.sti_models[type_name] = { base: self } unless type_name.blank?
140
- _brick_find_sti_class(type_name)
140
+ module_prefixes = type_name.split('::')
141
+ module_prefixes.unshift('') unless module_prefixes.first.blank?
142
+ candidate_file = Rails.root.join('app/models' + module_prefixes.map(&:underscore).join('/') + '.rb')
143
+ if File.exists?(candidate_file)
144
+ # Find this STI class normally
145
+ _brick_find_sti_class(type_name)
146
+ else
147
+ # Build missing prefix modules if they don't yet exist
148
+ this_module = Object
149
+ module_prefixes[1..-2].each do |module_name|
150
+ mod = if this_module.const_defined?(module_name)
151
+ this_module.const_get(module_name)
152
+ else
153
+ this_module.const_set(module_name.to_sym, Module.new)
154
+ end
155
+ end
156
+ # Build missing prefix modules if they don't yet exist
157
+ this_module.const_set(module_prefixes.last.to_sym, klass = Class.new(self))
158
+ klass
159
+ end
141
160
  end
142
161
  end
143
162
  end
@@ -161,7 +180,8 @@ class Object
161
180
  return Object._brick_const_missing(*args) if ActiveSupport::Dependencies.search_for_file(class_name.underscore)
162
181
 
163
182
  relations = ::Brick.instance_variable_get(:@relations)[ActiveRecord::Base.connection_pool.object_id] || {}
164
- result = if ::Brick.enable_controllers? && class_name.end_with?('Controller') && (plural_class_name = class_name[0..-11]).length.positive?
183
+ is_controllers_enabled = Rails.development? || ::Brick.enable_controllers?
184
+ result = if is_controllers_enabled && class_name.end_with?('Controller') && (plural_class_name = class_name[0..-11]).length.positive?
165
185
  # Otherwise now it's up to us to fill in the gaps
166
186
  if (model = ActiveSupport::Inflector.singularize(plural_class_name).constantize)
167
187
  # if it's a controller and no match or a model doesn't really use the same table name, eager load all models and try to find a model class of the right name.
@@ -8,9 +8,9 @@ module Brick
8
8
  config.brick = ActiveSupport::OrderedOptions.new
9
9
  ActiveSupport.on_load(:before_initialize) do |app|
10
10
  ::Brick.enable_models = app.config.brick.fetch(:enable_models, true)
11
- ::Brick.enable_controllers = app.config.brick.fetch(:enable_controllers, true)
12
- ::Brick.enable_views = app.config.brick.fetch(:enable_views, true)
13
- ::Brick.enable_routes = app.config.brick.fetch(:enable_routes, true)
11
+ ::Brick.enable_controllers = app.config.brick.fetch(:enable_controllers, false)
12
+ ::Brick.enable_views = app.config.brick.fetch(:enable_views, false)
13
+ ::Brick.enable_routes = app.config.brick.fetch(:enable_routes, false)
14
14
  ::Brick.skip_database_views = app.config.brick.fetch(:skip_database_views, false)
15
15
 
16
16
  # Specific database tables and views to omit when auto-creating models
@@ -37,7 +37,7 @@ module Brick
37
37
  # ====================================
38
38
  # Dynamically create generic templates
39
39
  # ====================================
40
- if ::Brick.enable_views?
40
+ if Rails.development? || ::Brick.enable_views?
41
41
  ActionView::LookupContext.class_exec do
42
42
  alias :_brick_template_exists? :template_exists?
43
43
  def template_exists?(*args, **options)
@@ -209,7 +209,11 @@ function changeout(href, param, value) {
209
209
  <% next if k == '#{pk}' || ::Brick.config.metadata_columns.include?(k) %>
210
210
  <td>
211
211
  <% if (bt = bts[k]) %>
212
- <%= bt_obj = bt[1].find_by(bt.last => val); link_to(bt_obj.brick_descrip, bt_obj) if bt_obj %>
212
+ <%# Instead of just 'bt_obj we have to put in all of this junk:
213
+ # send(\"#\{bt_obj_class = bt[1].name.underscore\}_path\".to_sym, bt_obj.send(bt[1].primary_key.to_sym))
214
+ # Otherwise we get stuff like:
215
+ # ActionView::Template::Error (undefined method `vehicle_path' for #<ActionView::Base:0x0000000033a888>) %>
216
+ <%= bt_obj = bt[1].find_by(bt.last => val); link_to(bt_obj.brick_descrip, send(\"#\{bt_obj_class = bt[1].name.underscore\}_path\".to_sym, bt_obj.send(bt[1].primary_key.to_sym))) if bt_obj %>
213
217
  <% else %>
214
218
  <%= val %>
215
219
  <% end %>
@@ -244,7 +248,7 @@ function changeout(href, param, value) {
244
248
  </th>
245
249
  <td>
246
250
  <% if (bt = bts[k]) %>
247
- <%= bt_obj = bt[1].find_by(bt.last => val); link_to(bt_obj.brick_descrip, bt_obj) if bt_obj %>
251
+ <%= bt_obj = bt[1].find_by(bt.last => val); link_to(bt_obj.brick_descrip, send(\"#\{bt_obj_class = bt[1].name.underscore\}_path\".to_sym, bt_obj.send(bt[1].primary_key.to_sym))) if bt_obj %>
248
252
  <% else %>
249
253
  <%= val %>
250
254
  <% end %>
@@ -279,7 +283,7 @@ function changeout(href, param, value) {
279
283
  end
280
284
  end
281
285
 
282
- if ::Brick.enable_routes?
286
+ if Rails.development? || ::Brick.enable_routes?
283
287
  ActionDispatch::Routing::RouteSet.class_exec do
284
288
  alias _brick_finalize_routeset! finalize!
285
289
  def finalize!(*args, **options)
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 11
8
+ TINY = 12
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
@@ -80,11 +80,13 @@ module Brick
80
80
  # # Settings for the Brick gem
81
81
  # # (By default this auto-creates models, controllers, views, and routes on-the-fly.)
82
82
 
83
- # # Normally these all start out as being enabled, but can be selectively disabled:
84
- # Brick.enable_routes = false
83
+ # # Normally all are enabled in development mode, and for security reasons only models are enabled in production
84
+ # # and test. This allows you to either (a) turn off models entirely, or (b) enable controllers, views, and routes
85
+ # # in production.
86
+ # Brick.enable_routes = true # Setting this to \"false\" will disable routes in development
85
87
  # Brick.enable_models = false
86
- # Brick.enable_controllers = false
87
- # Brick.enable_views = false
88
+ # Brick.enable_controllers = true # Setting this to \"false\" will disable controllers in development
89
+ # Brick.enable_views = true # Setting this to \"false\" will disable views in development
88
90
 
89
91
  # # By default models are auto-created for database views, and set to be read-only. This can be skipped.
90
92
  # Brick.skip_database_views = true
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.11
4
+ version: 1.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-22 00:00:00.000000000 Z
11
+ date: 2022-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord