fixing login_generator

February 26, 2010

in software, web

The login_generator script seems to be broken with rails > 2.0.1, at least at login_generator gem version 1.2.2. It’s due to the fact that the login_generator script uses the older “.rhtml” extension, rather than the newer “.html.erb”, so you’ll get errors like this if you try and script/generate login:

No such file or directory - /usr/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml

You just have to edit the login_generator gem script, replacing the .rhtml’s to .html.erb’s, and it should work fine. Some would recommend doing it in a local copy rather than directly in your local gem repository, but I haven’t run into any issues so far. Here’s the modified script:

class LoginGenerator < Rails::Generator::NamedBase
  def manifest
    record do |m|
 
      # Login module, controller class, functional test, and helper.
      m.template "login_system.rb", "lib/login_system.rb"
      m.template "controller.rb", File.join("app/controllers", class_path, "#{file_name}_controller.rb")
      m.template "controller_test.rb", File.join("test/functional", class_path, "#{file_name}_controller_test.rb")
      m.template "helper.rb", File.join("app/helpers", class_path, "#{file_name}_helper.rb")
 
      # Model class, unit test, fixtures, and example schema.
      m.template "user.rb", "app/models/user.rb"
      m.template "user_test.rb", "test/unit/user_test.rb"
      m.template "users.yml", "test/fixtures/users.yml"
 
      # Layout and stylesheet.
      m.template "scaffold:layout.html.erb", "app/views/layouts/scaffold.html.erb"
      m.template "scaffold:style.css", "public/stylesheets/scaffold.css"
 
      # Views. 
      m.directory File.join("app/views", class_path, file_name)
      login_views.each do |action|
        m.template "view_#{action}.rhtml",
          File.join("app/views", class_path, file_name, "#{action}.html.erb")
      end
 
      m.template "README", "README_LOGIN"
    end
  end
 
  attr_accessor :controller_class_name
 
  def login_views
    %w(welcome login logout signup)
  end
end

cheers

Leave a Comment

Previous post:

Next post: