# frozen_string_literal: true # This custom inflector is needed because of our jobs directory structure. # Ideally, we should not prefix our jobs with a `Jobs` namespace but instead # have a `Job` suffix to follow the Rails conventions on naming. # # Based on: # https://github.com/rails/rails/blob/75e6c0ac/railties/lib/rails/autoloaders/inflector.rb#L7-L19 module DiscourseInflector @overrides = {} def self.camelize(basename, abspath) return basename.camelize if abspath.ends_with?("onceoff.rb") return 'Jobs' if abspath.ends_with?("jobs/base.rb") @overrides[basename] || basename.camelize end def self.inflect(overrides) @overrides.merge!(overrides) end end Rails.autoloaders.each do |autoloader| autoloader.inflector = DiscourseInflector # We have filenames that do not follow Zeitwerk's camelization convention. Maintain an inflections for these files # for now until we decide to fix them one day. autoloader.inflector.inflect( 'canonical_url' => 'CanonicalURL', 'clean_up_unmatched_ips' => 'CleanUpUnmatchedIPs', 'homepage_constraint' => 'HomePageConstraint', 'ip_addr' => 'IPAddr', 'onpdiff' => 'ONPDiff', 'pop3_polling_enabled_setting_validator' => 'POP3PollingEnabledSettingValidator', 'version' => 'Discourse', 'onceoff' => 'Jobs', 'regular' => 'Jobs', 'scheduled' => 'Jobs', 'google_oauth2_authenticator' => 'GoogleOAuth2Authenticator', 'omniauth_strategies' => 'OmniAuthStrategies', 'csrf_token_verifier' => 'CSRFTokenVerifier', 'html' => 'HTML', 'json' => 'JSON' ) end Rails.autoloaders.main.ignore("lib/tasks", "lib/generators", "lib/freedom_patches", "lib/i18n/backend", "lib/unicorn_logstash_patch.rb")