Skip to content

Commit c811173

Browse files
committed
Reorganize generators to follow Rails conventions
- Move each generator into its own subdirectory - Update source paths to work from new locations - Add table_name_for helper to handle namespaced models - Fix chat_ui generator to properly handle namespaced model table names - Place private methods in conventional location at end of class
1 parent ad036e1 commit c811173

File tree

4 files changed

+42
-30
lines changed

4 files changed

+42
-30
lines changed

lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,35 +38,39 @@ def parse_model_mappings
3838
@model_names ||= parse_model_mappings
3939
@model_names[type]
4040
end
41+
42+
define_method("#{type}_table_name") do
43+
table_name_for(send("#{type}_model_name"))
44+
end
4145
end
4246

4347
def create_views
4448
# Chat views
45-
template 'views/chats/index.html.erb', "app/views/#{chat_model_name.tableize}/index.html.erb"
46-
template 'views/chats/new.html.erb', "app/views/#{chat_model_name.tableize}/new.html.erb"
47-
template 'views/chats/show.html.erb', "app/views/#{chat_model_name.tableize}/show.html.erb"
49+
template 'views/chats/index.html.erb', "app/views/#{chat_table_name}/index.html.erb"
50+
template 'views/chats/new.html.erb', "app/views/#{chat_table_name}/new.html.erb"
51+
template 'views/chats/show.html.erb', "app/views/#{chat_table_name}/show.html.erb"
4852
template 'views/chats/_chat.html.erb',
49-
"app/views/#{chat_model_name.tableize}/_#{chat_model_name.underscore}.html.erb"
50-
template 'views/chats/_form.html.erb', "app/views/#{chat_model_name.tableize}/_form.html.erb"
53+
"app/views/#{chat_table_name}/_#{chat_model_name.underscore}.html.erb"
54+
template 'views/chats/_form.html.erb', "app/views/#{chat_table_name}/_form.html.erb"
5155

5256
# Message views
5357
template 'views/messages/_message.html.erb',
54-
"app/views/#{message_model_name.tableize}/_#{message_model_name.underscore}.html.erb"
55-
template 'views/messages/_form.html.erb', "app/views/#{message_model_name.tableize}/_form.html.erb"
58+
"app/views/#{message_table_name}/_#{message_model_name.underscore}.html.erb"
59+
template 'views/messages/_form.html.erb', "app/views/#{message_table_name}/_form.html.erb"
5660
template 'views/messages/create.turbo_stream.erb',
57-
"app/views/#{message_model_name.tableize}/create.turbo_stream.erb"
61+
"app/views/#{message_table_name}/create.turbo_stream.erb"
5862

5963
# Model views
60-
template 'views/models/index.html.erb', "app/views/#{model_model_name.tableize}/index.html.erb"
61-
template 'views/models/show.html.erb', "app/views/#{model_model_name.tableize}/show.html.erb"
64+
template 'views/models/index.html.erb', "app/views/#{model_table_name}/index.html.erb"
65+
template 'views/models/show.html.erb', "app/views/#{model_table_name}/show.html.erb"
6266
template 'views/models/_model.html.erb',
63-
"app/views/#{model_model_name.tableize}/_#{model_model_name.underscore}.html.erb"
67+
"app/views/#{model_table_name}/_#{model_model_name.underscore}.html.erb"
6468
end
6569

6670
def create_controllers
67-
template 'controllers/chats_controller.rb', "app/controllers/#{chat_model_name.tableize}_controller.rb"
68-
template 'controllers/messages_controller.rb', "app/controllers/#{message_model_name.tableize}_controller.rb"
69-
template 'controllers/models_controller.rb', "app/controllers/#{model_model_name.tableize}_controller.rb"
71+
template 'controllers/chats_controller.rb', "app/controllers/#{chat_table_name}_controller.rb"
72+
template 'controllers/messages_controller.rb', "app/controllers/#{message_table_name}_controller.rb"
73+
template 'controllers/models_controller.rb', "app/controllers/#{model_table_name}_controller.rb"
7074
end
7175

7276
def create_jobs
@@ -75,16 +79,16 @@ def create_jobs
7579

7680
def add_routes
7781
model_routes = <<~ROUTES.strip
78-
resources :#{model_model_name.tableize}, only: [:index, :show] do
82+
resources :#{model_table_name}, only: [:index, :show] do
7983
collection do
8084
post :refresh
8185
end
8286
end
8387
ROUTES
8488
route model_routes
8589
chat_routes = <<~ROUTES.strip
86-
resources :#{chat_model_name.tableize} do
87-
resources :#{message_model_name.tableize}, only: [:create]
90+
resources :#{chat_table_name} do
91+
resources :#{message_table_name}, only: [:create]
8892
end
8993
ROUTES
9094
route chat_routes
@@ -107,9 +111,17 @@ def display_post_install_message
107111
return unless behavior == :invoke
108112

109113
say "\n ✅ Chat UI installed!", :green
110-
say "\n Start your server and visit http://localhost:3000/#{chat_model_name.tableize}", :cyan
114+
say "\n Start your server and visit http://localhost:3000/#{chat_table_name}", :cyan
111115
say "\n"
112116
end
117+
118+
private
119+
120+
def table_name_for(model_name)
121+
# Convert namespaced model names to proper table names
122+
# e.g., "Assistant::Chat" -> "assistant_chats" (not "assistant/chats")
123+
model_name.underscore.pluralize.tr('/', '_')
124+
end
113125
end
114126
end
115127
end

lib/generators/ruby_llm/install_generator.rb renamed to lib/generators/ruby_llm/install/install_generator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class InstallGenerator < Rails::Generators::Base
1010

1111
namespace 'ruby_llm:install'
1212

13-
source_root File.expand_path('install/templates', __dir__)
13+
source_root File.expand_path('templates', __dir__)
1414

1515
argument :model_mappings, type: :array, default: [], banner: 'chat:ChatName message:MessageName ...'
1616

lib/generators/ruby_llm/upgrade_to_v1_7_generator.rb renamed to lib/generators/ruby_llm/upgrade_to_v1_7/upgrade_to_v1_7_generator.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ class UpgradeToV17Generator < Rails::Generators::Base # rubocop:disable Style/Do
88
include Rails::Generators::Migration
99

1010
namespace 'ruby_llm:upgrade_to_v1_7'
11-
source_root File.expand_path('upgrade_to_v1_7/templates', __dir__)
11+
source_root File.expand_path('templates', __dir__)
1212

1313
# Override source_paths to include install templates
1414
def self.source_paths
1515
[
16-
File.expand_path('upgrade_to_v1_7/templates', __dir__),
17-
File.expand_path('install/templates', __dir__)
16+
File.expand_path('templates', __dir__),
17+
File.expand_path('../install/templates', __dir__)
1818
]
1919
end
2020

@@ -45,12 +45,6 @@ def parse_model_mappings
4545
@model_names
4646
end
4747

48-
def table_name_for(model_name)
49-
# Convert namespaced model names to proper table names
50-
# e.g., "Assistant::Chat" -> "assistant_chats" (not "assistant/chats")
51-
model_name.underscore.pluralize.tr('/', '_')
52-
end
53-
5448
%i[chat message tool_call model].each do |type|
5549
define_method("#{type}_model_name") do
5650
@model_names ||= parse_model_mappings
@@ -155,6 +149,12 @@ def migration_version
155149
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
156150
end
157151

152+
def table_name_for(model_name)
153+
# Convert namespaced model names to proper table names
154+
# e.g., "Assistant::Chat" -> "assistant_chats" (not "assistant/chats")
155+
model_name.underscore.pluralize.tr('/', '_')
156+
end
157+
158158
def table_exists?(table_name)
159159
::ActiveRecord::Base.connection.table_exists?(table_name)
160160
rescue StandardError

spec/lib/generators/ruby_llm/install_generator_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
require 'rails_helper'
44
require 'fileutils'
5-
require 'generators/ruby_llm/install_generator'
5+
require 'generators/ruby_llm/install/install_generator'
66

77
RSpec.describe RubyLLM::InstallGenerator, type: :generator do
88
# Use the actual template directory
99
let(:template_dir) { File.join(__dir__, '../../../../lib/generators/ruby_llm/install/templates') }
10-
let(:generator_file) { File.join(__dir__, '../../../../lib/generators/ruby_llm/install_generator.rb') }
10+
let(:generator_file) { File.join(__dir__, '../../../../lib/generators/ruby_llm/install/install_generator.rb') }
1111

1212
describe 'migration templates' do
1313
let(:expected_migration_files) do

0 commit comments

Comments
 (0)