Class: A2A::Rails::Generators::MigrationGenerator
- Inherits:
-
ActiveRecord::Generators::Base
- Object
- ActiveRecord::Generators::Base
- A2A::Rails::Generators::MigrationGenerator
- Defined in:
- lib/a2a/rails/generators/migration_generator.rb
Instance Method Summary collapse
- #create_indexes_migration ⇒ Object
- #create_models ⇒ Object
- #create_push_notifications_migration ⇒ Object
- #create_tasks_migration ⇒ Object
- #format_column_options(options) ⇒ Object private
-
#id_column_definition ⇒ Object
private
Generate appropriate column definitions based on database adapter.
- #json_column_definition(name, **options) ⇒ Object private
-
#json_column_type ⇒ Object
private
Helper methods for templates.
- #migration_version ⇒ Object private
- #model_class_name(base_name) ⇒ Object private
- #model_file_name(base_name) ⇒ Object private
- #mysql? ⇒ Boolean private
- #postgresql? ⇒ Boolean private
- #push_notification_configs_table_name ⇒ Object private
- #show_post_generation_instructions ⇒ Object
- #sqlite? ⇒ Boolean private
- #table_prefix ⇒ Object private
- #tasks_table_name ⇒ Object private
- #text_column_type ⇒ Object private
- #uuid_column_definition(name, **options) ⇒ Object private
- #uuid_column_type ⇒ Object private
- #with_indexes? ⇒ Boolean private
Instance Method Details
#create_indexes_migration ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 57 def create_indexes_migration return unless [:with_indexes] migration_template "add_a2a_indexes.rb", "db/migrate/add_#{table_prefix}indexes.rb", migration_version: migration_version say "Created indexes migration", :green end |
#create_models ⇒ Object
67 68 69 70 71 72 73 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 67 def create_models template "task_model.rb", "app/models/#{table_prefix}task.rb" template "push_notification_config_model.rb", "app/models/#{table_prefix}push_notification_config.rb" say "Created A2A models", :green end |
#create_push_notifications_migration ⇒ Object
47 48 49 50 51 52 53 54 55 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 47 def create_push_notifications_migration return if [:skip_push_notifications] migration_template "create_a2a_push_notification_configs.rb", "db/migrate/create_#{table_prefix}push_notification_configs.rb", migration_version: migration_version say "Created push notification configs migration", :green end |
#create_tasks_migration ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 37 def create_tasks_migration return if [:skip_tasks] migration_template "create_a2a_tasks.rb", "db/migrate/create_#{table_prefix}tasks.rb", migration_version: migration_version say "Created tasks migration", :green end |
#format_column_options(options) ⇒ Object (private)
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 213 def () return "" if .empty? = .map do |key, value| case value when String "#{key}: '#{value}'" when Symbol "#{key}: :#{value}" else "#{key}: #{value}" end end ", #{formatted_options.join(', ')}" end |
#id_column_definition ⇒ Object (private)
Generate appropriate column definitions based on database adapter
193 194 195 196 197 198 199 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 193 def id_column_definition if postgresql? "t.uuid :id, primary_key: true, default: 'gen_random_uuid()'" else "t.string :id, primary_key: true, limit: 36" end end |
#json_column_definition(name, **options) ⇒ Object (private)
209 210 211 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 209 def json_column_definition(name, **) "t.#{json_column_type} :#{name}#{format_column_options(options)}" end |
#json_column_type ⇒ Object (private)
Helper methods for templates
138 139 140 141 142 143 144 145 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 138 def json_column_type # Use jsonb for PostgreSQL, json for others if postgresql? "jsonb" else "json" end end |
#migration_version ⇒ Object (private)
105 106 107 108 109 110 111 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 105 def migration_version if ::Rails.version >= "5.0" "[#{::Rails::VERSION::MAJOR}.#{::Rails::VERSION::MINOR}]" else "" end end |
#model_class_name(base_name) ⇒ Object (private)
129 130 131 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 129 def model_class_name(base_name) "#{table_prefix.classify}#{base_name.classify}" end |
#model_file_name(base_name) ⇒ Object (private)
133 134 135 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 133 def model_file_name(base_name) "#{table_prefix}#{base_name.underscore}" end |
#mysql? ⇒ Boolean (private)
171 172 173 174 175 176 177 178 179 180 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 171 def mysql? return false unless defined?(ActiveRecord::Base) begin adapter_name = ActiveRecord::Base.connection.adapter_name.downcase adapter_name.include?("mysql") || adapter_name.include?("trilogy") rescue StandardError false end end |
#postgresql? ⇒ Boolean (private)
160 161 162 163 164 165 166 167 168 169 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 160 def postgresql? # Try to detect PostgreSQL adapter return false unless defined?(ActiveRecord::Base) begin ActiveRecord::Base.connection.adapter_name.downcase.include?("postgresql") rescue StandardError false end end |
#push_notification_configs_table_name ⇒ Object (private)
121 122 123 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 121 def push_notification_configs_table_name "#{table_prefix}push_notification_configs" end |
#show_post_generation_instructions ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 75 def show_post_generation_instructions say "\n#{'=' * 60}", :green say "A2A database migrations generated successfully!", :green say "=" * 60, :green say "\nNext steps:", :yellow say "1. Review the generated migrations in db/migrate/" say "2. Run 'rails db:migrate' to create the tables" say "3. Customize the models in app/models/ if needed" say "\nGenerated tables:", :yellow say " #{table_prefix}tasks - Stores A2A task data" say " #{table_prefix}push_notification_configs - Stores push notification settings" if [:with_indexes] say "\nPerformance indexes will be created for:" say " - Task lookups by ID and context_id" say " - Task status filtering" say " - Push notification config lookups" end say "\nConfiguration:", :yellow say "Update config/initializers/a2a.rb to use database storage:" say " config.task_storage = :database" say "\nFor more information, visit: https://a2a-protocol.org/sdk/ruby/storage/", :blue end |
#sqlite? ⇒ Boolean (private)
182 183 184 185 186 187 188 189 190 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 182 def sqlite? return false unless defined?(ActiveRecord::Base) begin ActiveRecord::Base.connection.adapter_name.downcase.include?("sqlite") rescue StandardError false end end |
#table_prefix ⇒ Object (private)
113 114 115 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 113 def table_prefix [:table_prefix] end |
#tasks_table_name ⇒ Object (private)
117 118 119 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 117 def tasks_table_name "#{table_prefix}tasks" end |
#text_column_type ⇒ Object (private)
147 148 149 150 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 147 def text_column_type # Use text for larger content "text" end |
#uuid_column_definition(name, **options) ⇒ Object (private)
201 202 203 204 205 206 207 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 201 def uuid_column_definition(name, **) if postgresql? "t.uuid :#{name}#{format_column_options(options)}" else "t.string :#{name}, limit: 36#{format_column_options(options)}" end end |
#uuid_column_type ⇒ Object (private)
152 153 154 155 156 157 158 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 152 def uuid_column_type if postgresql? "uuid" else "string" end end |
#with_indexes? ⇒ Boolean (private)
125 126 127 |
# File 'lib/a2a/rails/generators/migration_generator.rb', line 125 def with_indexes? [:with_indexes] end |