Sha256: 22377d3e7a9aca29a4095d9bb4d948510f5862b488fb9f4f80cce639c2e31dfa

Contents?: true

Size: 1.65 KB

Versions: 4

Compression:

Stored size: 1.65 KB

Contents

module CmpaAuth
  
  # Constrói uma lista de modelos que já existem na aplicação.
  implemented_klasses = Authentication::CLASS_NAMES.select do |klass|
    File.exists? File.join(Rails.root, 'app', 'models', klass.underscore + '.rb')
  end
  
  # Este bloco será executado de duas formas distintas:
  #   * Em desenvolvimento será executado cada vez que a aplicação for recarregada (a cada novo request)
  #   * Em produção será chamado somente uma vez para cada um dos modelos (assim que a aplicação for inicializada)
  ::ActionController::Dispatcher.to_prepare do
    Authentication::CLASS_NAMES.each do |klass|
      
      # Módulo correspondente a classe em questão. e.g.: classe Pessoa, módulo CmpaAuth::Models::Pessoa.
      module_const = "CmpaAuth::Models::#{klass}".constantize
      
      if implemented_klasses.include? klass
        klass.constantize.send(:include, module_const)
        
      # O modelo não foi definido na aplicação, então deve-se criá-lo dinamicamente.
      else
        # Descobre qual a superclasse do modelo. Funcionário e Estagiário tem como superclasse a classe Pessoa.
        superclass = %w[Estagiario Funcionario].include?(klass) ? ::Pessoa : ActiveRecord::Base
        
        klass_const = Class.new(superclass)
        
        # Para se evitar warnings no console no ambiente de desenvolvimento, remove-se o "nome"
        # da classe antes de setá-la novamente.
        Object.send(:remove_const, klass) if Object.const_defined?(klass)
        Object.const_set(klass, klass_const).send(:include, module_const)
      end
    end
  end
end

::ActionController::Base.send(:include, CmpaAuth::RailsHelpers)

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
cmpa_auth-1.0.6 lib/cmpa_auth/extensions.rb
cmpa_auth-1.0.5 lib/cmpa_auth/extensions.rb
cmpa_auth-1.0.4 lib/cmpa_auth/extensions.rb
cmpa_auth-1.0.3 lib/cmpa_auth/extensions.rb