Search code examples
ruby-on-railsdeviserails-console

How to print a controller as text in the rails console?


I'd like to view Devise::RegistrationsController (out of curiosity, as I'll inherit from it as shown here)

I tried the obvious rails c then puts Devise::RegistrationsController and a few variations (e.g. .to_s) but no luck..

Is it available somewhere for viewing, and can I print it to the rails console to view it?


Solution

  • Pry which is a replacement console for IRB has built in source browsing.

    Install the pry-rails gem and start the console with rails c and it will start up Pry instead of IRB.

    You can then use show-source to view the source code of the gem right from the console:

    max@pop-os ~/p/sandbox> rails c
    Running via Spring preloader in process 29286
    Loading development environment (Rails 6.0.2.1)
    [1] pry(main)> show-source Devise::RegistrationsController
    
    From: /home/linuxbrew/.linuxbrew/lib/ruby/gems/2.7.0/gems/devise-4.7.2/app/controllers/devise/registrations_controller.rb @ line 3:
    Class name: Devise::RegistrationsController
    Number of monkeypatches: 4. Use the `-a` option to display all available monkeypatches
    Number of lines: 166
    
    class Devise::RegistrationsController < DeviseController
      prepend_before_action :require_no_authentication, only: [:new, :create, :cancel]
      prepend_before_action :authenticate_scope!, only: [:edit, :update, :destroy]
      prepend_before_action :set_minimum_password_length, only: [:new, :edit]
    
      # GET /resource/sign_up
      def new
        build_resource
        yield resource if block_given?
        respond_with resource
      end
    
      # POST /resource
      def create
        build_resource(sign_up_params)
    
        resource.save
        yield resource if block_given?
        if resource.persisted?
          if resource.active_for_authentication?
            set_flash_message! :notice, :signed_up
            sign_up(resource_name, resource)
            respond_with resource, location: after_sign_up_path_for(resource)
          else
            set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
            expire_data_after_sign_in!
            respond_with resource, location: after_inactive_sign_up_path_for(resource)
          end
        else
          clean_up_passwords resource
          set_minimum_password_length
          respond_with resource
        end
      end
    :
    

    If you don't want to depend on Pry and stick with IRB you can cobble something together with Method#source_location and IO.readlines. But IMHO it seems like a waste of time