Skip to content

Commit

Permalink
Disable STI for reloading (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
Exterm1nate authored Sep 10, 2024
1 parent d734b45 commit 4a5a92b
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 32 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## [Unreleased]
- Added scaffold generator
- Disabled models reloading to prevent STI issues

## [1.0.0] - 2024-09-07
- Precision configuration for decimal fields
Expand Down
82 changes: 51 additions & 31 deletions lib/active_fields.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,62 @@
require_relative "active_fields/engine"

module ActiveFields
autoload :Config, "active_fields/config"
autoload :CustomizableConfig, "active_fields/customizable_config"
autoload :HasActiveFields, "active_fields/has_active_fields"
extend ActiveSupport::Autoload

class << self
def eager_load!
super
Casters.eager_load!
Validators.eager_load!
end
end

eager_autoload do
autoload :Config
autoload :CustomizableConfig
autoload :HasActiveFields
end

module Casters
autoload :BaseCaster, "active_fields/casters/base_caster"
autoload :BooleanCaster, "active_fields/casters/boolean_caster"
autoload :DateCaster, "active_fields/casters/date_caster"
autoload :DateArrayCaster, "active_fields/casters/date_array_caster"
autoload :DateTimeCaster, "active_fields/casters/date_time_caster"
autoload :DateTimeArrayCaster, "active_fields/casters/date_time_array_caster"
autoload :DecimalCaster, "active_fields/casters/decimal_caster"
autoload :DecimalArrayCaster, "active_fields/casters/decimal_array_caster"
autoload :EnumCaster, "active_fields/casters/enum_caster"
autoload :EnumArrayCaster, "active_fields/casters/enum_array_caster"
autoload :IntegerCaster, "active_fields/casters/integer_caster"
autoload :IntegerArrayCaster, "active_fields/casters/integer_array_caster"
autoload :TextCaster, "active_fields/casters/text_caster"
autoload :TextArrayCaster, "active_fields/casters/text_array_caster"
extend ActiveSupport::Autoload

eager_autoload do
autoload :BaseCaster
autoload :BooleanCaster
autoload :DateCaster
autoload :DateArrayCaster
autoload :DateTimeCaster
autoload :DateTimeArrayCaster
autoload :DecimalCaster
autoload :DecimalArrayCaster
autoload :EnumCaster
autoload :EnumArrayCaster
autoload :IntegerCaster
autoload :IntegerArrayCaster
autoload :TextCaster
autoload :TextArrayCaster
end
end

module Validators
autoload :BaseValidator, "active_fields/validators/base_validator"
autoload :BooleanValidator, "active_fields/validators/boolean_validator"
autoload :DateValidator, "active_fields/validators/date_validator"
autoload :DateArrayValidator, "active_fields/validators/date_array_validator"
autoload :DateTimeValidator, "active_fields/validators/date_time_validator"
autoload :DateTimeArrayValidator, "active_fields/validators/date_time_array_validator"
autoload :DecimalValidator, "active_fields/validators/decimal_validator"
autoload :DecimalArrayValidator, "active_fields/validators/decimal_array_validator"
autoload :EnumValidator, "active_fields/validators/enum_validator"
autoload :EnumArrayValidator, "active_fields/validators/enum_array_validator"
autoload :IntegerValidator, "active_fields/validators/integer_validator"
autoload :IntegerArrayValidator, "active_fields/validators/integer_array_validator"
autoload :TextValidator, "active_fields/validators/text_validator"
autoload :TextArrayValidator, "active_fields/validators/text_array_validator"
extend ActiveSupport::Autoload

eager_autoload do
autoload :BaseValidator
autoload :BooleanValidator
autoload :DateValidator
autoload :DateArrayValidator
autoload :DateTimeValidator
autoload :DateTimeArrayValidator
autoload :DecimalValidator
autoload :DecimalArrayValidator
autoload :EnumValidator
autoload :EnumArrayValidator
autoload :IntegerValidator
autoload :IntegerArrayValidator
autoload :TextValidator
autoload :TextArrayValidator
end
end

class << self
Expand Down
6 changes: 6 additions & 0 deletions lib/active_fields/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ module ActiveFields
class Engine < ::Rails::Engine
isolate_namespace ActiveFields

config.eager_load_namespaces << ActiveFields

# Disable models reloading to avoid STI issues.
# Reloading can prevent subclasses from recognizing the base class.
config.autoload_once_paths = %W[#{root}/app/models #{root}/app/models/concerns]

initializer "active_fields.active_record" do
ActiveSupport.on_load(:active_record) do
include HasActiveFields
Expand Down
2 changes: 1 addition & 1 deletion spec/dummy/config/routes.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

Rails.application.routes.draw do
mount ActiveFields::Engine => "/active_fields"
# mount ActiveFields::Engine => "/active_fields"

root to: "home#index"

Expand Down
34 changes: 34 additions & 0 deletions spec/dummy/config/storage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>

local:
service: Disk
root: <%= Rails.root.join("storage") %>

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
# amazon:
# service: S3
# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
# region: us-east-1
# bucket: your_own_bucket

# Remember not to checkin your GCS keyfile to a repository
# google:
# service: GCS
# project: your_project
# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
# bucket: your_own_bucket

# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
# microsoft:
# service: AzureStorage
# storage_account_name: your_account_name
# storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
# container: your_container_name

# mirror:
# service: Mirror
# primary: local
# mirrors: [ amazon, google, microsoft ]

0 comments on commit 4a5a92b

Please sign in to comment.