Sha256: 7b28709e906ac1c0d2dd91c3b6d5dfd60a7b54d20be0597c3bcffa47a733bcf4
Contents?: true
Size: 1.61 KB
Versions: 3
Compression:
Stored size: 1.61 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 def initialize(app) @app = app end def call(env) self.class.require_records @app.call(env) end def self.model_files Dir.glob(Rails.root.join('app', 'models', '**', '*.rb')) end def self.require_direct_inheritance model_files.sort.map do |file| next unless File.read(file).match('DHS::Record') require_dependency file file.split('models/').last.gsub('.rb', '').classify end.compact end def self.require_inheriting_records(parents) 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 def self.require_records require_inheriting_records(require_direct_inheritance) end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dhs-1.0.2 | lib/dhs/concerns/autoload_records.rb |
dhs-1.0.1 | lib/dhs/concerns/autoload_records.rb |
dhs-1.0.0 | lib/dhs/concerns/autoload_records.rb |