Sha256: e6b383fdadea87093bb861185cdaa7c6092dddc3ce73f872beaaa4849be15f9b

Contents?: true

Size: 1.75 KB

Versions: 9

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

require 'active_support'

# Preload all the DHS::Records that are defined in app/models/*
# in order to collect record endpoints and to be able to identify records from hrefs
# and not only from model constant names (which is different to ActiveRecord)
module AutoloadRecords
  extend ActiveSupport::Concern

  included do
    class Engine < Rails::Engine
      initializer 'Load all DHS::Records from app/models/**' do |app|
        Middleware.require_records
        next if app.config.cache_classes

        app.config.middleware.use Middleware
      end

      class Middleware

        MODEL_FILES = 'app/models/**/*.rb'

        def initialize(app)
          @app = app
        end

        def call(env)
          self.class.require_records
          @app.call(env)
        end

        def self.require_direct_inheritance
          Rails.application.reloader.to_prepare do
            Dir.glob(Rails.root.join(MODEL_FILES)).each do |file|
              next unless File.read(file).match('DHS::Record')
              require_dependency file
              file.split('models/').last.gsub('.rb', '').classify
            end.compact
          end
        end

        def self.require_inheriting_records(parents)
          Rails.application.reloader.to_prepare do
            Dir.glob(Rails.root.join(MODEL_FILES)).each do |file|
              file_content = File.read(file)
              next if parents.none? { |parent| file_content.match(/\b#{parent}\b/) }
              next if file_content.match?('extend ActiveSupport::Concern')
              require_dependency file
            end
          end
        end

        def self.require_records
          require_inheriting_records(require_direct_inheritance)
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
dhs-1.6.0 lib/dhs/concerns/autoload_records.rb
dhs-1.5.0 lib/dhs/concerns/autoload_records.rb
dhs-1.4.2 lib/dhs/concerns/autoload_records.rb
dhs-1.4.1 lib/dhs/concerns/autoload_records.rb
dhs-1.4.0 lib/dhs/concerns/autoload_records.rb
dhs-1.3.0 lib/dhs/concerns/autoload_records.rb
dhs-1.2.0 lib/dhs/concerns/autoload_records.rb
dhs-1.1.0 lib/dhs/concerns/autoload_records.rb
dhs-1.0.3 lib/dhs/concerns/autoload_records.rb