Class: Supabase::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/supabase/install/install_generator.rb

Overview

‘rails g supabase:install` (FR-W12 / US-018).

Emits the host-app glue for ‘:web` mode: an `Authentication` concern that includes the gem’s module, five near-empty controllers that subclass the gem’s ‘Supabase::Rails::*Controller` base classes, a `Current` model, and a config initializer. Also patches `config/routes.rb` (adds `supabase_authentication_routes`) and `app/controllers/application_controller.rb` (adds `include Authentication`).

Idempotent — Thor’s ‘template` + `inject_into_file` skip writes when the target already matches the desired content, and prompt the user to overwrite when files diverge from the gem’s defaults.

Instance Method Summary collapse

Instance Method Details

#create_authentication_concernObject



30
31
32
33
# File 'lib/generators/supabase/install/install_generator.rb', line 30

def create_authentication_concern
  template "app/controllers/concerns/authentication.rb.tt",
           "app/controllers/concerns/authentication.rb"
end

#create_controllersObject



35
36
37
38
39
40
# File 'lib/generators/supabase/install/install_generator.rb', line 35

def create_controllers
  %w[sessions registrations passwords otp oauth].each do |name|
    template "app/controllers/#{name}_controller.rb.tt",
             "app/controllers/#{name}_controller.rb"
  end
end

#create_current_modelObject



42
43
44
# File 'lib/generators/supabase/install/install_generator.rb', line 42

def create_current_model
  template "app/models/current.rb.tt", "app/models/current.rb"
end

#create_initializerObject



46
47
48
49
# File 'lib/generators/supabase/install/install_generator.rb', line 46

def create_initializer
  template "config/initializers/supabase.rb.tt",
           "config/initializers/supabase.rb"
end

#patch_application_controllerObject



61
62
63
64
65
66
67
68
69
# File 'lib/generators/supabase/install/install_generator.rb', line 61

def patch_application_controller
  app_controller_path = "app/controllers/application_controller.rb"
  return unless File.exist?(File.expand_path(app_controller_path, destination_root))
  return if application_controller_already_patched?(app_controller_path)

  inject_into_class app_controller_path, "ApplicationController" do
    "  include Authentication\n"
  end
end

#patch_routesObject



51
52
53
54
55
56
57
58
59
# File 'lib/generators/supabase/install/install_generator.rb', line 51

def patch_routes
  routes_path = "config/routes.rb"
  return unless File.exist?(File.expand_path(routes_path, destination_root))
  return if routes_already_patched?(routes_path)

  inject_into_file routes_path,
                   "  supabase_authentication_routes\n",
                   after: "Rails.application.routes.draw do\n"
end