Class: TurboCrud::Generators::FullScaffoldGenerator
- Inherits:
-
Rails::Generators::NamedBase
- Object
- Rails::Generators::NamedBase
- TurboCrud::Generators::FullScaffoldGenerator
- Defined in:
- lib/generators/turbo_crud/full_scaffold_generator.rb
Constant Summary collapse
- VALID_CONTAINERS =
%w[modal drawer both].freeze
Instance Method Summary collapse
- #generate_add_columns_migration ⇒ Object
- #generate_model ⇒ Object
- #generate_turbo_crud_scaffold ⇒ Object
- #generator_attribute_args ⇒ Object
- #inject_routes ⇒ Object
- #model_file_exists? ⇒ Boolean
- #run_migrations ⇒ Object
- #validate_options! ⇒ Object
Instance Method Details
#generate_add_columns_migration ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/generators/turbo_crud/full_scaffold_generator.rb', line 115 def generate_add_columns_migration if attributes.empty? say_status :identical, "model exists and no attributes provided; skipping migration generation", :blue return end migration_suffix = attributes.map(&:name).join("_and_") migration_name = "add_#{migration_suffix}_to_#{plural_name}" say_status :invoke, "rails g migration #{migration_name} ...", :green invoke "active_record:migration", [migration_name] + generator_attribute_args end |
#generate_model ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/generators/turbo_crud/full_scaffold_generator.rb', line 54 def generate_model return if [:skip_model] if model_file_exists? generate_add_columns_migration else say_status :invoke, "rails g model #{class_name} #{generator_attribute_args.join(' ')}", :green # Invoke the Rails model generator. invoke "active_record:model", [class_name] + generator_attribute_args end end |
#generate_turbo_crud_scaffold ⇒ Object
95 96 97 98 99 100 101 |
# File 'lib/generators/turbo_crud/full_scaffold_generator.rb', line 95 def generate_turbo_crud_scaffold say_status :invoke, "rails g turbo_crud:scaffold #{class_name} ...", :green # Invoke our own scaffold generator (the one that makes controller/views) invoke "turbo_crud:scaffold", [class_name] + attributes.map { |a| a.type ? "#{a.name}:#{a.type}" : a.name }, container: [:container] end |
#generator_attribute_args ⇒ Object
128 129 130 131 132 133 |
# File 'lib/generators/turbo_crud/full_scaffold_generator.rb', line 128 def generator_attribute_args attributes.map do |attr| type = (attr.type || :string).to_s "#{attr.name}:#{type}" end end |
#inject_routes ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/generators/turbo_crud/full_scaffold_generator.rb', line 66 def inject_routes return if [:skip_routes] route_line = "resources :#{plural_name}" routes_path = File.join(destination_root, "config/routes.rb") unless File.exist?(routes_path) say_status :warning, "config/routes.rb not found. Skipping routes injection.", :yellow return end routes_content = File.read(routes_path) if routes_content.include?(route_line) say_status :identical, "routes already include #{route_line}", :blue return end # Put routes near the top of the draw block. # If we can't find it, we just append at the end. if routes_content.match?(/Rails\.application\.routes\.draw do\n/m) inject_into_file "config/routes.rb", " #{route_line}\n", after: "Rails.application.routes.draw do\n" say_status :insert, "added #{route_line} to routes.rb", :green else append_to_file "config/routes.rb", "\n#{route_line}\n" say_status :append, "appended #{route_line} to routes.rb", :green end end |
#model_file_exists? ⇒ Boolean
111 112 113 |
# File 'lib/generators/turbo_crud/full_scaffold_generator.rb', line 111 def model_file_exists? File.exist?(File.join(destination_root, "app/models/#{file_name}.rb")) end |
#run_migrations ⇒ Object
103 104 105 106 107 108 109 |
# File 'lib/generators/turbo_crud/full_scaffold_generator.rb', line 103 def run_migrations return if [:skip_model] return unless [:migrate] say_status :invoke, "bin/rails db:migrate", :green rails_command "db:migrate" end |
#validate_options! ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/generators/turbo_crud/full_scaffold_generator.rb', line 46 def normalized = [:container].to_s.strip.downcase return if VALID_CONTAINERS.include?(normalized) raise Thor::Error, "Invalid --container=#{options[:container].inspect}. Expected one of: #{VALID_CONTAINERS.join(', ')}." end |