Class: Flame::DeviseGenerator

Inherits:
Generators::Base show all
Defined in:
lib/flame/generators/devise_generator.rb

Constant Summary collapse

APP_CONTROLLER =
<<~RUBY
  before_action :authenticate_user!, only: [:current]
  protect_from_forgery with: :exception, unless: :json_request?

  def current
    render json: current_user
  end


  private

  def json_request?
    request.format.json?
  end
RUBY
SESSION_CONTROLLER =
<<~RUBY
  class SessionsController < Devise::SessionsController
    respond_to :json
  
    private
  
    def respond_with(resource, _opts = {})
      render json: resource
    end
  
    def respond_to_on_destroy
      head :no_content
    end
  end
RUBY

Instance Method Summary collapse

Methods inherited from Generators::Base

source_root

Instance Method Details

#add_timeoutableObject



42
43
44
45
46
47
48
# File 'lib/flame/generators/devise_generator.rb', line 42

def add_timeoutable
  gsub_file(
    "app/models/user.rb",
    /^\s*devise\s*:[a-z_]+(?:,\s*:[a-z_]+)*\s*$/,
    "  devise :database_authenticatable, :registerable, :timeoutable, timeout_in: 1.day"
  )
end

#generate_session_controllerObject



50
51
52
53
54
55
# File 'lib/flame/generators/devise_generator.rb', line 50

def generate_session_controller
  create_file(
    "app/controllers/sessions_controller.rb",
    SESSION_CONTROLLER
  )
end

#insert_secret_keyObject



80
81
82
83
84
85
86
# File 'lib/flame/generators/devise_generator.rb', line 80

def insert_secret_key
  inject_into_file(
    "config/initializers/devise.rb",
    "  config.secret_key = Rails.application.credentials.secret_key_base\n",
    after: "Devise.setup do |config|\n"
  )
end

#installObject



37
38
39
40
# File 'lib/flame/generators/devise_generator.rb', line 37

def install
  generate("devise:install")
  generate("devise", "User")
end

#modify_app_controllerObject



72
73
74
75
76
77
78
# File 'lib/flame/generators/devise_generator.rb', line 72

def modify_app_controller
  inject_into_class(
    "app/controllers/application_controller.rb",
    "ApplicationController",
    APP_CONTROLLER
  )
end

#modify_session_routeObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/flame/generators/devise_generator.rb', line 57

def modify_session_route
  gsub_file(
    "config/routes.rb",
    /devise_for\s*:\s*users/,
    <<~RUBY
      devise_for :users, defaults: {format: :json}, controllers: {sessions: "sessions"}
      get "/users/current", to: "application#current", defaults: {format: :json}

      get "*path", to: "pages#index", constraints: ->(request) do
        !request.xhr? && request.format.html?
      end
    RUBY
  )
end