Class: Supabase::Generators::UserModelGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
Rails::Generators::Migration
Defined in:
lib/generators/supabase/user_model/user_model_generator.rb

Overview

‘rails g supabase:user_model` (FR-W14 / US-025).

Opt-in shadow ‘User` ActiveRecord model. Emits a `users` migration with a UUID primary key matching Supabase’s ‘user.id`, an AR model with a `from_supabase(claims)` upsert helper, and patches the `config/initializers/supabase.rb` to set `config.supabase.user_model = “User”` so the Authentication concern (US-016) substitutes the AR record for `Current.user`.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(_dirname) ⇒ Object

Rails’ built-in timestamp for migration filenames. Mirrors what ‘ActiveRecord::Generators::Migration#next_migration_number` does so the generator works standalone (without ActiveRecord loaded).



34
35
36
# File 'lib/generators/supabase/user_model/user_model_generator.rb', line 34

def self.next_migration_number(_dirname)
  Time.now.utc.strftime("%Y%m%d%H%M%S")
end

Instance Method Details

#create_migration_fileObject



38
39
40
41
# File 'lib/generators/supabase/user_model/user_model_generator.rb', line 38

def create_migration_file
  migration_template "db/migrate/create_supabase_users.rb.tt",
                     "db/migrate/create_supabase_users.rb"
end

#create_user_modelObject



43
44
45
# File 'lib/generators/supabase/user_model/user_model_generator.rb', line 43

def create_user_model
  template "app/models/user.rb.tt", "app/models/user.rb"
end

#patch_initializerObject



47
48
49
50
51
52
53
54
# File 'lib/generators/supabase/user_model/user_model_generator.rb', line 47

def patch_initializer
  initializer_path = "config/initializers/supabase.rb"
  return unless File.exist?(File.expand_path(initializer_path, destination_root))
  return if initializer_already_patched?(initializer_path)

  append_to_file initializer_path,
                 %(\nRails.application.config.supabase.user_model = "User"\n)
end