Class: RouteSchemerGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- RouteSchemerGenerator
- Defined in:
- lib/generators/route_schemer/route_schemer_generator.rb
Overview
A Rails generator that creates route schema files for controllers. This generator validates the existence of controllers and their methods, then generates both application-wide and controller-specific route schema files.
Instance Method Summary collapse
Instance Method Details
#create_route_schemer_file ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/generators/route_schemer/route_schemer_generator.rb', line 44 def create_route_schemer_file # Define the path based on the nested structure of `controller_name` schemer_directory = File.join("app", "route_schemers") # Create nested directories if they don't exist FileUtils.mkdir_p(schemer_directory) unless Dir.exist?(schemer_directory) # Generate the application route schemer file application_schemer_file = File.join("app", "route_schemers", "application_route_schemer.rb") unless File.exist?(application_schemer_file) template "application_route_schemer_template.rb.tt", application_schemer_file end # Generate the schemer file always override schemer_file = File.join(schemer_directory, "#{controller_name.demodulize.underscore}_route_schemer.rb") template "route_schemer_template.rb.tt", schemer_file end |
#validate_controller ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/generators/route_schemer/route_schemer_generator.rb', line 22 def validate_controller # Ensure controller_name is properly formatted (e.g., Foo or Foo::Bar) controller_path = File.join("app", "controllers", "#{controller_name.underscore}_controller.rb") unless File.exist?(controller_path) raise ArgumentError, "Controller #{controller_name} does not exist at #{controller_path}" end # Attempt to constantize the controller name begin @controller_class = "#{controller_name}Controller".constantize rescue NameError raise ArgumentError, "Controller class #{controller_name} could not be found. Ensure it is defined correctly." end # Validate each method in the controller class methods.each do |method| unless @controller_class.instance_methods.include?(method.to_sym) raise ArgumentError, "Method #{method} is not defined in #{controller_name}" end end end |