Skip to content
Browse files

rails2 backup files

  • Loading branch information...
1 parent 9b4583b commit 501c651937658df5ecf93734043c05d23a585ee6 @jlapier committed Oct 28, 2010
Showing with 2,229 additions and 0 deletions.
  1. +19 −0 .gitignore.rails2
  2. +158 −0 app/controllers/application_controller.rb.rails2
  3. +113 −0 app/helpers/application_helper.rb.rails2
  4. +22 −0 config/database.yml.rails2
  5. +75 −0 config/environment.rb.rails2
  6. +17 −0 config/environments/development.rb.rails2
  7. +21 −0 config/environments/production.rb.rails2
  8. +38 −0 config/routes.rb.rails2
  9. +2 −0 doc/README_FOR_APP.rails2
  10. +41 −0 test/test_helper.rb.rails2
  11. +20 −0 vendor/plugins/rails_upgrade/MIT-LICENSE
  12. +20 −0 vendor/plugins/rails_upgrade/README
  13. +22 −0 vendor/plugins/rails_upgrade/Rakefile
  14. +2 −0 vendor/plugins/rails_upgrade/init.rb
  15. +38 −0 vendor/plugins/rails_upgrade/install.rb
  16. +472 −0 vendor/plugins/rails_upgrade/lib/application_checker.rb
  17. +95 −0 vendor/plugins/rails_upgrade/lib/gemfile_generator.rb
  18. +51 −0 vendor/plugins/rails_upgrade/lib/new_configuration_generator.rb
  19. 0 vendor/plugins/rails_upgrade/lib/rails_upgrade.rb
  20. +349 −0 vendor/plugins/rails_upgrade/lib/routes_upgrader.rb
  21. +78 −0 vendor/plugins/rails_upgrade/lib/tasks/rails_upgrade_tasks.rake
  22. +293 −0 vendor/plugins/rails_upgrade/test/application_checker_test.rb
  23. +72 −0 vendor/plugins/rails_upgrade/test/gemfile_generator_test.rb
  24. +63 −0 vendor/plugins/rails_upgrade/test/new_configuration_generator_test.rb
  25. +142 −0 vendor/plugins/rails_upgrade/test/routes_upgrader_test.rb
  26. +5 −0 vendor/plugins/rails_upgrade/test/test_helper.rb
  27. +1 −0 vendor/plugins/rails_upgrade/uninstall.rb
View
19 .gitignore.rails2
@@ -0,0 +1,19 @@
+log/*.log
+tmp/**/*
+.DS_Store
+config/database.yml
+db/schema.rb
+db/*.sqlite3
+db/development_structure.sql
+*~
+cache
+.*.swp
+.*.swo
+nbproject/
+spec/spec.opts.netbeans
+public/content_page_assets/
+public/wiki_page_assets/
+public/user_assets/
+public/themes
+public/images/favorite.png
+coverage/
View
158 app/controllers/application_controller.rb.rails2
@@ -0,0 +1,158 @@
+# Filters added to this controller apply to all controllers in the application.
+# Likewise, all the methods added will be available for all controllers.
+
+class ApplicationController < ActionController::Base
+ include ExceptionNotifiable
+
+ helper :all
+ helper_method :current_user_session, :current_user
+ filter_parameter_logging :password, :password_confirmation
+
+ before_filter :get_menus, :get_layout
+
+
+ # checks to see if user is a member of a given access group - if not,
+ # redirect to account controller
+ # for multiple groups, if user is in any of the given groups, they have access
+ def require_group_access(group_access_list)
+ if require_user
+ group_access_list = [group_access_list] unless group_access_list.is_a? Array
+ in_a_group = group_access_list.inject(false) { |n,m| n or current_user.has_group_access?(m) }
+ unless in_a_group
+ store_location
+ flash[:notice] = "You must be a member of one of a group with access of: #{group_access_list.join(" or ")}."
+ redirect_to account_url
+ end
+ return in_a_group
+ else
+ return false
+ end
+ end
+
+ def require_forum_read_access
+ if require_user
+ unless current_user.has_read_access_to?(@forum)
+ flash[:notice] = "You do not have permission to view that forum."
+ redirect_to forums_url
+ end
+ else
+ return false
+ end
+ end
+
+ def require_forum_write_access
+ if require_user
+ unless current_user.has_write_access_to?(@forum)
+ flash[:notice] = "You do not have post or edit in that forum."
+ redirect_to forums_url
+ end
+ else
+ return false
+ end
+ end
+
+ def require_wiki_read_access
+ if require_user
+ unless current_user.has_read_access_to?(@wiki)
+ flash[:notice] = "You do not have permission to view that wiki."
+ redirect_to wikis_url
+ end
+ else
+ return false
+ end
+ end
+
+ def require_wiki_write_access
+ if require_user
+ unless current_user.has_write_access_to?(@wiki)
+ flash[:notice] = "You do not have permission to edit that wiki."
+ redirect_to wikis_url
+ end
+ else
+ return false
+ end
+ end
+
+ private
+ def get_menus
+ @side_menu = ContentPage.get_side_menu
+ @top_menu = ContentPage.get_top_menu
+ end
+
+ def get_layout
+ @theme_base = SiteSetting.read_or_write_default_setting 'theme base', 'default'
+ @theme_layout = SiteSetting.read_or_write_default_setting 'theme layout', 'default'
+ @layout_file = File.join(RAILS_ROOT, "/themes/layouts/#{@theme_layout}.html.erb")
+ @theme_colors = SiteSetting.read_or_write_default_setting 'theme colors', 'black and white'
+ @custom_colors_timestamp = SiteSetting.read_or_write_default_setting 'custom colors timestamp', nil
+ @css_override = SiteSetting.read_or_write_default_setting 'css override', nil
+ @css_override_timestamp = SiteSetting.read_or_write_default_setting 'css override timestamp', nil
+ end
+
+ def current_user_session
+ return @current_user_session if defined?(@current_user_session)
+ @current_user_session = UserSession.find
+ end
+
+ def current_user
+ return @current_user if defined?(@current_user)
+ @current_user = current_user_session && current_user_session.record
+ end
+
+ def require_user
+ if current_user
+ true
+ else
+ store_location
+ flash[:warning] = "You must be logged in to access this page."
+ redirect_to login_path
+ false
+ end
+ end
+
+ def require_admin_user
+ unless current_user and current_user.is_admin?
+ flash[:error] = "You do not have permission to access that page."
+ redirect_to login_path
+ return false
+ end
+ end
+
+ def require_moderator_user
+ get_forum
+ unless current_user and current_user.is_moderator_for_forum?(@forum)
+ flash[:error] = "You do not have permission to access that page."
+ redirect_to '/'
+ return false
+ end
+ end
+
+ def require_no_user
+ if current_user
+ store_location
+ flash[:warning] = "You must be logged out to access this page."
+ redirect_to account_url
+ return false
+ end
+ end
+
+ def store_location
+ session[:return_to] = request.request_uri
+ end
+
+ def redirect_back_or_default(default)
+ redirect_to(session[:return_to] || default)
+ session[:return_to] = nil
+ end
+
+ # takes a file upload object and the relative directory to save it to
+ # returns the relative location of the uploaded file
+ def write_file(uploaded_file, rel_dir)
+ file_name = uploaded_file.original_filename
+ actual_dir = File.join(RAILS_ROOT, 'public', rel_dir)
+ FileUtils.mkdir_p actual_dir
+ File.open(File.join(actual_dir, file_name), 'wb') do |f|
+ f.write(uploaded_file.read)
+ end
+ end
+end
View
113 app/helpers/application_helper.rb.rails2
@@ -0,0 +1,113 @@
+# Methods added to this helper will be available to all templates in the application.
+module ApplicationHelper
+
+ def top_menu
+ @top_menu ? @top_menu.body_for_display : "TODO: create the top menu"
+ end
+
+ def side_menu
+ @side_menu ? @side_menu.body_for_display : "TODO: create the side menu"
+ end
+
+ def logo_image
+ image_tag(site_logo)
+ end
+
+ def site_title
+ @site_title ||= SiteSetting.read_setting('site title') || "A Site"
+ end
+
+ def page_title
+ pre = case action_name
+ when "edit" then "Editing "
+ when "new" then "Creating "
+ else
+ ""
+ end
+ if @content_page
+ "#{pre}#{@content_page.name}"
+ elsif @category
+ "#{pre}Category: #{@category.name}"
+ elsif @wiki_page
+ "#{pre}Wiki Page: #{@wiki_page.title}"
+ elsif @wiki_tag
+ "#{pre}Wiki Tag: #{@wiki_tag.name}"
+ elsif @wiki
+ "#{pre}Wiki: #{@wiki.name}"
+ elsif @message_post
+ "#{pre}Message Post: #{@message_post.subject}"
+ elsif @forum
+ "#{pre}Forum: #{@forum.title}"
+ elsif @user
+ "#{pre}User: #{@user.login}"
+ elsif @user_group
+ "#{pre}User Group: #{@user_group.name}"
+ else
+ controller_name.titleize
+ end
+ end
+
+ def site_logo
+ @site_logo ||= SiteSetting.read_setting('site logo') || "GenericLogo.png"
+ end
+
+ def site_footer
+ @site_footer ||= SiteSetting.read_setting('site footer') ||
+ "Content on this site is the copyright of the owners of #{request.host} and is provided as-is without warranty."
+ end
+
+ def user_box
+ #out = "#{pluralize User.logged_in.count, 'user'} currently logged in<br />\n"
+ out = ""
+
+ if current_user
+ out += "Welcome, #{current_user.first_name}!<br />\n"
+ out += link_to("My Account", account_path) + " | " +
+ link_to("Logout", user_session_path, :method => :delete,
+ :confirm => "Are you sure you want to logout?")
+ out += "<br/>"
+ other_links = []
+ other_links << link_to('Site Admin', admin_site_settings_path) if current_user.is_admin?
+ if current_user.has_access_to_any_wikis?
+ if current_user.wikis.size == 1
+ other_links << link_to('Wiki', current_user.wikis.first)
+ else
+ other_links << link_to('Wikis', wikis_path)
+ end
+ end
+ if current_user.has_access_to_any_forums?
+ if current_user.forums.size == 1
+ other_links << link_to('Forum', current_user.forums.first)
+ else
+ other_links << link_to('Forums', forums_path)
+ end
+ end
+ out += other_links.join(' | ')
+ else
+ out += link_to("Register", new_account_path) + " | " +
+ link_to( "Log In", new_user_session_path)
+ end
+ out
+ end
+
+ def images_list
+ Dir[File.join(RAILS_ROOT, 'public', 'images', "*.{png,jpg,gif}")].map { |f| File.basename f }.sort
+ end
+
+ def theme_layouts_list
+ Dir[File.join(RAILS_ROOT, 'themes', 'layouts', "*.html.erb")].map { |f| File.basename(f, '.html.erb') }.sort
+ end
+
+ def is_admin?
+ current_user and current_user.is_admin?
+ end
+
+ # TODO: change this to use the zoned plugin or something
+ def post_time(time)
+ if (Time.now - time) > 2600000
+ time.strftime "on %b %d, %Y"
+ else
+ time_ago_in_words(time) + " ago"
+ end
+ end
+end
View
22 config/database.yml.rails2
@@ -0,0 +1,22 @@
+# SQLite version 3.x
+# gem install sqlite3-ruby (not necessary on OS X Leopard)
+development:
+ adapter: sqlite3
+ database: db/development.sqlite3
+ pool: 5
+ timeout: 5000
+
+# Warning: The database defined as "test" will be erased and
+# re-generated from your development database when you run "rake".
+# Do not set this db to the same as development or production.
+test:
+ adapter: sqlite3
+ database: db/test.sqlite3
+ pool: 5
+ timeout: 5000
+
+production:
+ adapter: sqlite3
+ database: db/production.sqlite3
+ pool: 5
+ timeout: 5000
View
75 config/environment.rb.rails2
@@ -0,0 +1,75 @@
+# Be sure to restart your server when you modify this file
+
+# Uncomment below to force Rails into production mode when
+# you don't control web/app server and can't set it the proper way
+# ENV['RAILS_ENV'] ||= 'production'
+
+# Specifies gem version of Rails to use when vendor/rails is not present
+RAILS_GEM_VERSION = '2.3.8' unless defined? RAILS_GEM_VERSION
+
+# Bootstrap the Rails environment, frameworks, and default configuration
+require File.join(File.dirname(__FILE__), 'boot')
+
+Rails::Initializer.run do |config|
+ # Settings in config/environments/* take precedence over those specified here.
+ # Application configuration should go into files in config/initializers
+ # -- all .rb files in that directory are automatically loaded.
+ # See Rails::Configuration for more options.
+
+ # Skip frameworks you're not going to use. To use Rails without a database
+ # you must remove the Active Record framework.
+ # config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
+
+ # Specify gems that this application depends on.
+ # They can then be installed with "rake gems:install" on new installations.
+ # config.gem "bj"
+ # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
+ # config.gem "aws-s3", :lib => "aws/s3"
+ config.gem "RedCloth"
+ config.gem "authlogic"
+ config.gem "authlogic-oid", :lib => "authlogic_openid"
+ config.gem "ruby-openid", :lib => "openid"
+ config.gem "rspec", :lib => false, :version => ">= 1.2.0"
+ config.gem "rspec-rails", :lib => false, :version => ">= 1.2.0"
+ config.gem 'will_paginate', :version => '~> 2.3.11', :source => 'http://gemcutter.org'
+ config.gem "factory_girl", :source => "http://gemcutter.org", :version => '>= 1.2.4'
+
+ # Only load the plugins named here, in the order given. By default, all plugins
+ # in vendor/plugins are loaded in alphabetical order.
+ # :all can be used as a placeholder for all plugins not explicitly named
+ # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
+
+ # Add additional load paths for your own custom dirs
+ # config.load_paths += %W( #{RAILS_ROOT}/extras )
+
+ # Force all environments to use the same logger level
+ # (by default production uses :info, the others :debug)
+ # config.log_level = :debug
+
+ # Make Time.zone default to the specified zone, and make Active Record store time values
+ # in the database in UTC, and return them converted to the specified local zone.
+ # Run "rake -D time" for a list of tasks for finding time zone names. Comment line to use default local time.
+ config.time_zone = 'UTC'
+
+ # Your secret key for verifying cookie session data integrity.
+ # If you change this key, all old sessions will become invalid!
+ # Make sure the secret is at least 30 characters and all random,
+ # no regular words or you'll be exposed to dictionary attacks.
+ config.action_controller.session = {
+ :key => '_site_on_rails_session',
+ :secret => '42b1a00f9cc222749e00675885e0ff4a2de996cd1586e15cfcb7fa34a76a8e8423f8217986b675df3f1c28c056455fc63d6f98eee85c176b377988b5b72ef15d'
+ }
+
+ # Use the database for sessions instead of the cookie-based default,
+ # which shouldn't be used to store highly confidential information
+ # (create the session table with "rake db:sessions:create")
+ #config.action_controller.session_store = :active_record_store
+
+ # Use SQL instead of Active Record's schema dumper when creating the test database.
+ # This is necessary if your schema can't be completely dumped by the schema dumper,
+ # like if you have constraints or database-specific column types
+ # config.active_record.schema_format = :sql
+
+ # Activate observers that should always be running
+ config.active_record.observers = [:wiki_page_observer, :user_observer]
+end
View
17 config/environments/development.rb.rails2
@@ -0,0 +1,17 @@
+# Settings specified here will take precedence over those in config/environment.rb
+
+# In the development environment your application's code is reloaded on
+# every request. This slows down response time but is perfect for development
+# since you don't have to restart the webserver when you make code changes.
+config.cache_classes = false
+
+# Log error messages when you accidentally call methods on nil.
+config.whiny_nils = true
+
+# Show full error reports and disable caching
+config.action_controller.consider_all_requests_local = true
+config.action_view.debug_rjs = true
+config.action_controller.perform_caching = true
+
+# Don't care if the mailer can't send
+config.action_mailer.raise_delivery_errors = false
View
21 config/environments/production.rb.rails2
@@ -0,0 +1,21 @@
+# Settings specified here will take precedence over those in config/environment.rb
+
+# The production environment is meant for finished, "live" apps.
+# Code is not reloaded between requests
+config.cache_classes = true
+
+# Use a different logger for distributed setups
+# config.logger = SyslogLogger.new
+
+# Full error reports are disabled and caching is turned on
+config.action_controller.consider_all_requests_local = false
+config.action_controller.perform_caching = true
+
+# Use a different cache store in production
+# config.cache_store = :mem_cache_store
+
+# Enable serving of images, stylesheets, and javascripts from an asset server
+# config.action_controller.asset_host = "http://assets.example.com"
+
+# Disable delivery errors, bad email addresses will be ignored
+# config.action_mailer.raise_delivery_errors = false
View
38 config/routes.rb.rails2
@@ -0,0 +1,38 @@
+ActionController::Routing::Routes.draw do |map|
+ map.resources :wikis, :member => { :tagcloud => :get, :tag_index => :get } do |wiki|
+ wiki.resources :wiki_pages, :member => { :upload_handler => :post, :page_link_handler => :get, :delete_asset => :post,
+ :un_edit => :post, :history => :get }, :collection => { :search => :get, :live_search => :post }
+ wiki.resources :wiki_comments, :collection => { :daily => :get, :weekly => :get }
+ end
+
+ map.wiki_pages_show_by_title '/wikis/:wiki_id/page/:title', :controller => 'wiki_pages', :action => 'show_by_title'
+ map.wiki_tag '/wikis/:id/tag/:tag_name', :controller => 'wikis', :action => 'list_by_tag'
+
+ map.connect 'themes/:action', :controller => 'themes'
+ map.connect 'themes/:action/:name.:format', :controller => 'themes'
+
+ map.resources :site_settings, :collection => { :update_site_settings => :post, :admin => :get }
+
+ map.resources :content_pages, :member => { :upload_handler => :post, :delete_asset => :post,
+ :un_edit => :post }, :collection => { :search => :get }
+
+ map.resources :categories
+
+ map.connect '/tagcloud.:format', :controller => 'wiki_pages', :action => 'tagcloud'
+
+
+ map.resources :forums, :member => { :search => :get } do |forum|
+ forum.resources :message_posts
+ end
+
+ map.resource :account, :controller => "users"
+ map.resources :users, :collection => { :reg_pass_required => :get }, :member => { :upload_handler => :post }
+ map.resources :user_groups, :member => { :drop_user => :post, :add_members => :get, :add_users => :post },
+ :collection => { :emails => :get }
+ map.resource :user_session
+ map.resources :password_resets
+
+ map.register '/register', :controller => 'users', :action => 'new'
+ map.login '/login', :controller => 'user_sessions', :action => "new"
+ map.root :controller => 'content_pages', :action => 'home'
+end
View
2 doc/README_FOR_APP.rails2
@@ -0,0 +1,2 @@
+Use this README file to introduce your application and point to useful places in the API for learning more.
+Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
View
41 test/test_helper.rb.rails2
@@ -0,0 +1,41 @@
+ENV["RAILS_ENV"] = "test"
+require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
+require 'test_help'
+require 'authlogic/test_case'
+
+class ActiveSupport::TestCase
+ # Transactional fixtures accelerate your tests by wrapping each test method
+ # in a transaction that's rolled back on completion. This ensures that the
+ # test database remains unchanged so your fixtures don't have to be reloaded
+ # between every test method. Fewer database queries means faster tests.
+ #
+ # Read Mike Clark's excellent walkthrough at
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
+ #
+ # Every Active Record database supports transactions except MyISAM tables
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
+ # is recommended.
+ #
+ # The only drawback to using transactional fixtures is when you actually
+ # need to test transactions. Since your test is bracketed by a transaction,
+ # any transactions started in your code will be automatically rolled back.
+ self.use_transactional_fixtures = true
+
+ # Instantiated fixtures are slow, but give you @david where otherwise you
+ # would need people(:david). If you don't want to migrate your existing
+ # test cases which use the @david style and don't mind the speed hit (each
+ # instantiated fixtures translates to a database query per test method),
+ # then set this back to true.
+ self.use_instantiated_fixtures = false
+
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
+ #
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
+ # -- they do not yet inherit this setting
+ fixtures :all
+end
+
+class ActionController::TestCase
+ setup :activate_authlogic
+end
View
20 vendor/plugins/rails_upgrade/MIT-LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2010 Jeremy McAnally
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
View
20 vendor/plugins/rails_upgrade/README
@@ -0,0 +1,20 @@
+= rails-upgrade
+
+A simple battery of scripts for upgrading Rails app/checking them for required updates. This application should work on Rails 2.x and 3.0, with a focus on upgrading to 3.0.
+
+== Usage
+
+ # Check your app for required upgrades
+ rake rails:upgrade:check
+
+ # Backup your likely modified files that might be overwritten by the generator
+ rake rails:upgrade:backup
+
+ # Generate a new route file
+ rake rails:upgrade:routes
+
+ # Generate a Gemfile from your config.gem directives
+ rake rails:upgrade:gems
+
+ # Generate code for a new config/application.rb from your environment.rb
+ rake rails:upgrade:configuration
View
22 vendor/plugins/rails_upgrade/Rakefile
@@ -0,0 +1,22 @@
+require 'rake'
+require 'rake/testtask'
+require 'rake/rdoctask'
+
+desc 'Default: run unit tests.'
+task :default => :test
+
+Rake::TestTask.new do |t|
+ t.libs << 'lib'
+ t.libs << 'test'
+ t.test_files = FileList['test/*_test.rb']
+ t.verbose = true
+end
+
+desc 'Generate documentation for the rails_upgrade plugin.'
+Rake::RDocTask.new(:rdoc) do |rdoc|
+ rdoc.rdoc_dir = 'rdoc'
+ rdoc.title = 'Rails-upgrade'
+ rdoc.options << '--line-numbers' << '--inline-source'
+ rdoc.rdoc_files.include('README')
+ rdoc.rdoc_files.include('lib/**/*.rb')
+end
View
2 vendor/plugins/rails_upgrade/init.rb
@@ -0,0 +1,2 @@
+# Get long stack traces for easier debugging; you'll thank me later.
+Rails.backtrace_cleaner.remove_silencers!
View
38 vendor/plugins/rails_upgrade/install.rb
@@ -0,0 +1,38 @@
+puts "Thanks for installing the Rails upgrade plugin. This is a set of generators and analysis tools to help you upgrade your application to Rails 3. It consists of three tasks...
+
+To get a feel for what you'll need to change to get your app running, run the application analysis:
+
+ rake rails:upgrade:check
+
+This should give you an idea of the manual changes that need to be done, but you'll probably want to upgrade some of those automatically. The fastest way to do this is to run 'rails .', which will simply generate a new app on top of your existing code. But this generation also has the effect of replacing some existing files, some of which you might not want to replace. To back those up, first run:
+
+ rake rails:upgrade:backup
+
+That will backup files you've probably edited that will be replaced in the upgrade; if you finish the upgrade and find that you don't need the old copies, just delete them. Otherwise, copy their contents back into the new files or run one of the following upgraders...
+
+Routes upgrader
+===============
+
+To generate a new routes file from your existing routes file, simply run the following Rake task:
+
+ rake rails:upgrade:routes
+
+This will output a new routes file that you can copy and paste or pipe into a new, Rails 3 compatible config/routes.rb.
+
+Gemfile generator
+=================
+
+Creating a new Gemfile is as simple as running:
+
+ rake rails:upgrade:gems
+
+This task will extract your config.gem calls and generate code you can put into a bundler compatible Gemfile.
+
+Configuration generator
+=======================
+
+Much of the configuration information that lived in environment.rb now belongs in a new file named config/application.rb; use the following task to generate code you can put into config/application.rb from your existing config/environment.rb:
+
+ rake rails:upgrade:configuration
+
+"
View
472 vendor/plugins/rails_upgrade/lib/application_checker.rb
@@ -0,0 +1,472 @@
+require 'open3'
+
+module Rails
+ module Upgrading
+ class ApplicationChecker
+ def initialize
+ @issues = []
+
+ raise NotInRailsAppError unless in_rails_app?
+ end
+
+ def in_rails_app?
+ File.exist?("config/environment.rb")
+ end
+
+ # Run all the check methods
+ def run
+ # Ruby 1.8 returns method names as strings whereas 1.9 uses symbols
+ the_methods = (self.public_methods - Object.methods) - [:run, :initialize, "run", "initialize"]
+
+ the_methods.each {|m| send m }
+ end
+
+ # Check for deprecated ActiveRecord calls
+ def check_ar_methods
+ files = []
+ ["find(:all", "find(:first", "find.*:conditions =>", ":joins =>"].each do |v|
+ lines = grep_for(v, "app/")
+ files += extract_filenames(lines) || []
+ end
+
+ unless files.empty?
+ alert(
+ "Soon-to-be-deprecated ActiveRecord calls",
+ "Methods such as find(:all), find(:first), finds with conditions, and the :joins option will soon be deprecated.",
+ "http://m.onkey.org/2010/1/22/active-record-query-interface",
+ files
+ )
+ end
+
+ lines = grep_for("named_scope", "app/models/")
+ files = extract_filenames(lines)
+
+ if files
+ alert(
+ "named_scope is now just scope",
+ "The named_scope method has been renamed to just scope.",
+ "http://github.com/rails/rails/commit/d60bb0a9e4be2ac0a9de9a69041a4ddc2e0cc914",
+ files
+ )
+ end
+ end
+
+ def check_validation_on_methods
+ files = []
+
+ ["validate_on_create", "validate_on_update"].each do |v|
+ lines = grep_for(v, "app/models/")
+ files += extract_filenames(lines) || []
+ end
+
+ unless files.empty?
+ alert(
+ "Updated syntax for validate_on_* methods",
+ "Validate-on-callback methods (validate_on_create/validate_on_destroy) have been changed to validate :x, :on => :create",
+ "https://rails.lighthouseapp.com/projects/8994/tickets/3880-validate_on_create-and-validate_on_update-no-longer-seem-to-exist",
+ files
+ )
+ end
+ end
+
+ def check_before_validation_on_methods
+ files = []
+
+ %w(before_validation_on_create before_validation_on_update).each do |v|
+ lines = grep_for(v, "app/models/")
+ files += extract_filenames(lines) || []
+ end
+
+ unless files.empty?
+ alert(
+ "Updated syntax for before_validation_on_* methods",
+ "before_validation_on_* methods have been changed to before_validation(:on => :create/:update) { ... }",
+ "https://rails.lighthouseapp.com/projects/8994/tickets/4699-before_validation_on_create-and-before_validation_on_update-doesnt-exist",
+ files
+ )
+ end
+ end
+
+ # Check for deprecated router syntax
+ def check_routes
+ lines = ["map\\.", "ActionController::Routing::Routes", "\\.resources"].map do |v|
+ grep_for(v, "config/routes.rb").empty? ? nil : true
+ end.compact
+
+ unless lines.empty?
+ alert(
+ "Old router API",
+ "The router API has totally changed.",
+ "http://yehudakatz.com/2009/12/26/the-rails-3-router-rack-it-up/",
+ "config/routes.rb"
+ )
+ end
+ end
+
+ # Check for deprecated test_help require
+ def check_test_help
+ files = []
+
+ # Hate to duplicate code, but we have to double quote this one...
+ lines = grep_for("\'test_help\'", "test/", true)
+ files += extract_filenames(lines) || []
+
+ lines = grep_for("\"test_help\"", "test/")
+ files += extract_filenames(lines) || []
+
+ files.uniq!
+
+ unless files.empty?
+ alert(
+ "Deprecated test_help path",
+ "You now must require 'rails/test_help' not just 'test_help'.",
+ "http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices",
+ files
+ )
+ end
+ end
+
+ # Check for old (pre-application.rb) environment.rb file
+ def check_environment
+ unless File.exist?("config/application.rb")
+ alert(
+ "New file needed: config/application.rb",
+ "You need to add a config/application.rb.",
+ "http://omgbloglol.com/post/353978923/the-path-to-rails-3-approaching-the-upgrade",
+ "config/application.rb"
+ )
+ end
+
+ lines = grep_for("config.", "config/environment.rb")
+
+ unless lines.empty?
+ alert(
+ "Old environment.rb",
+ "environment.rb doesn't do what it used to; you'll need to move some of that into application.rb.",
+ "http://omgbloglol.com/post/353978923/the-path-to-rails-3-approaching-the-upgrade",
+ "config/environment.rb"
+ )
+ end
+ end
+
+ # Check for deprecated constants
+ def check_deprecated_constants
+ files = []
+ ["RAILS_ENV", "RAILS_ROOT", "RAILS_DEFAULT_LOGGER"].each do |v|
+ lines = grep_for(v, "app/")
+ files += extract_filenames(lines) || []
+
+ lines = grep_for(v, "lib/")
+ files += extract_filenames(lines) || []
+ end
+
+ unless files.empty?
+ alert(
+ "Deprecated constant(s)",
+ "Constants like RAILS_ENV, RAILS_ROOT, and RAILS_DEFAULT_LOGGER are now deprecated.",
+ "http://litanyagainstfear.com/blog/2010/02/03/the-rails-module/",
+ files.uniq
+ )
+ end
+ end
+
+ # Check for old-style config.gem calls
+ def check_gems
+ lines = grep_for("config.gem ", "config/*.rb")
+ files = extract_filenames(lines)
+
+ if files
+ alert(
+ "Old gem bundling (config.gems)",
+ "The old way of bundling is gone now. You need a Gemfile for bundler.",
+ "http://omgbloglol.com/post/353978923/the-path-to-rails-3-approaching-the-upgrade",
+ files
+ )
+ end
+ end
+
+ # Checks for old mailer syntax in both mailer classes and those
+ # classes utilizing the mailers
+ def check_mailers
+ lines = grep_for("deliver_", "app/models/ #{base_path}app/controllers/ #{base_path}app/observers/")
+ files = extract_filenames(lines)
+
+ if files
+ alert(
+ "Deprecated ActionMailer API",
+ "You're using the old ActionMailer API to send e-mails in a controller, model, or observer.",
+ "http://lindsaar.net/2010/1/26/new-actionmailer-api-in-rails-3",
+ files
+ )
+ end
+
+ files = []
+ ["recipients ", "attachment(?!s) ", "(?<!:)subject ", "(?<!:)from "].each do |v|
+ lines = grep_for_with_perl_regex(v, "app/models/")
+ files += extract_filenames(lines) || []
+ end
+
+ unless files.empty?
+ alert(
+ "Old ActionMailer class API",
+ "You're using the old API in a mailer class.",
+ "http://lindsaar.net/2010/1/26/new-actionmailer-api-in-rails-3",
+ files
+ )
+ end
+ end
+
+ # Checks for old-style generators
+ def check_generators
+ generators = Dir.glob(base_path + "vendor/plugins/**/generators/**/")
+
+ unless generators.empty?
+ files = generators.reject do |g|
+ grep_for("def manifest", g).empty?
+ end.compact
+
+ if !files.empty?
+ alert(
+ "Old Rails generator API",
+ "A plugin in the app is using the old generator API (a new one may be available at http://github.com/trydionel/rails3-generators).",
+ "http://blog.plataformatec.com.br/2010/01/discovering-rails-3-generators/",
+ files
+ )
+ end
+ end
+ end
+
+ # Checks a list of known broken plugins and gems
+ def check_plugins
+ # This list is off the wiki; will need to be updated often, esp. since RSpec is working on it
+ bad_plugins = ["rspec", "rspec-rails", "hoptoad", "authlogic", "nifty-generators",
+ "restful_authentication", "searchlogic", "cucumber", "cucumber-rails", "devise",
+ "inherited_resources"]
+
+ bad_plugins = bad_plugins.map do |p|
+ p if File.exist?("#{base_path}vendor/plugins/#{p}") || !Dir.glob("#{base_path}vendor/gems/#{p}-*").empty?
+ end.compact
+
+ unless bad_plugins.empty?
+ alert(
+ "Known broken plugins",
+ "At least one plugin in your app is broken (according to the wiki). Most of project maintainers are rapidly working towards compatability, but do be aware you may encounter issues.",
+ "http://wiki.rubyonrails.org/rails/version3/plugins_and_gems",
+ bad_plugins
+ )
+ end
+ end
+
+ # Checks for old-style ERb helpers
+ def check_old_helpers
+
+ lines = grep_for("<% .*content_tag.* do.*%>", "app/views/**/*")
+ lines += grep_for("<% .*javascript_tag.* do.*%>", "app/views/**/*")
+ lines += grep_for("<% .*form_for.* do.*%>", "app/views/**/*")
+ lines += grep_for("<% .*form_tag.* do.*%>", "app/views/**/*")
+ lines += grep_for("<% .*fields_for.* do.*%>", "app/views/**/*")
+ lines += grep_for("<% .*field_set_tag.* do.*%>", "app/views/**/*")
+
+ files = extract_filenames(lines)
+
+ if files
+ alert(
+ "Deprecated ERb helper calls",
+ "Block helpers that use concat (e.g., form_for) should use <%= instead of <%. The current form will continue to work for now, but you will get deprecation warnings since this form will go away in the future.",
+ "http://weblog.rubyonrails.org/",
+ files
+ )
+ end
+ end
+
+ # Checks for old-style AJAX helpers
+ def check_old_ajax_helpers
+ files = []
+ ['link_to_remote','form_remote_tag','remote_form_for'].each do |type|
+ lines = grep_for(type, "app/views/**/*")
+ inner_files = extract_filenames(lines)
+ files += inner_files unless inner_files.nil?
+ end
+
+ unless files.empty?
+ alert(
+ "Deprecated AJAX helper calls",
+ "AJAX javascript helpers have been switched to be unobtrusive and use :remote => true instead of having a seperate function to handle remote requests.",
+ "http://www.themodestrubyist.com/2010/02/24/rails-3-ujs-and-csrf-meta-tags/",
+ files
+ )
+ end
+ end
+
+ # Checks for old cookie secret settings
+ def check_old_cookie_secret
+ lines = grep_for("ActionController::Base.cookie_verifier_secret = ", "config/**/*")
+ files = extract_filenames(lines)
+
+ if files
+ alert(
+ "Deprecated cookie secret setting",
+ "Previously, cookie secret was set directly on ActionController::Base; it's now config.secret_token.",
+ "http://lindsaar.net/2010/4/7/rails_3_session_secret_and_session_store",
+ files
+ )
+ end
+ end
+
+ def check_old_session_secret
+ lines = grep_for("ActionController::Base.session = {", "config/**/*")
+ files = extract_filenames(lines)
+
+ if files
+ alert(
+ "Deprecated session secret setting",
+ "Previously, session secret was set directly on ActionController::Base; it's now config.secret_token.",
+ "http://lindsaar.net/2010/4/7/rails_3_session_secret_and_session_store",
+ files
+ )
+ end
+ end
+
+ # Checks for old session settings
+ def check_old_session_setting
+ lines = grep_for("ActionController::Base.session_store", "config/**/*")
+ files = extract_filenames(lines)
+
+ if files
+ alert(
+ "Old session store setting",
+ "Previously, session store was set directly on ActionController::Base; it's now config.session_store :whatever.",
+ "http://lindsaar.net/2010/4/7/rails_3_session_secret_and_session_store",
+ files
+ )
+ end
+ end
+
+ private
+ def grep_for_with_perl_regex(text, where = "./", double_quote = false)
+ grep_for(text, where, double_quote, true)
+ end
+
+ # Find a string in a set of files; calls +find_with_grep+ and +find_with_rak+
+ # depending on platform.
+ #
+ # TODO: Figure out if this works on Windows.
+ def grep_for(text, where = "./", double_quote = false, perl_regex = false)
+ # If they're on Windows, they probably don't have grep.
+ @probably_has_grep ||= (Config::CONFIG['host_os'].downcase =~ /mswin|windows|mingw/).nil?
+
+ # protect against double root paths in Rails 3
+ where.gsub!(Regexp.new(base_path),'')
+
+ lines = if @probably_has_grep
+ find_with_grep(text, base_path + where, double_quote, perl_regex)
+ else
+ find_with_rak(text, base_path + where, double_quote)
+ end
+
+ # ignore comments
+ lines.gsub /^(\/[^:]+:)?\s*#.+$/m, ""
+ end
+
+ # Sets a base path for finding files; mostly for testing
+ def base_path
+ Dir.pwd + "/"
+ end
+
+ # Use the grep utility to find a string in a set of files
+ def find_with_grep(text, where, double_quote, perl_regex = false)
+ value = ""
+ # Specifically double quote for finding 'test_help'
+ command = if double_quote
+ "grep -r #{"-P" if perl_regex} --exclude=\*.svn\* \"#{text}\" #{where}"
+ else
+ "grep -r #{"-P" if perl_regex} --exclude=\*.svn\* '#{text}' #{where}"
+ end
+
+ Open3.popen3(command) do |stdin, stdout, stderr|
+ value = stdout.read
+ end
+ value
+ end
+
+ # Use the rak gem to grep the files (not yet implemented)
+ def find_with_rak(text, where, double_quote)
+ value = ""
+ Open3.popen3("rak --nogroup -l '#{Regexp.escape(text)}' #{where}") do |stdin, stdout, stderr|
+ value = stdout.read
+ end
+ value
+ end
+
+ # Extract the filenames from the grep output
+ def extract_filenames(output)
+ if @probably_has_grep
+ extract_filenames_from_grep(output)
+ else
+ extract_filenames_from_rak(output)
+ end
+ end
+
+ def extract_filenames_from_grep(output)
+ return nil if output.empty?
+
+ output.split("\n").map do |fn|
+ if m = fn.match(/^(.+?):/)
+ m[1]
+ end
+ end.compact.uniq
+ end
+
+ def extract_filenames_from_rak(output)
+ return nil if output.empty?
+
+ output.split("\n").uniq
+ end
+
+ # Terminal colors, borrowed from Thor
+ CLEAR = "\e[0m"
+ BOLD = "\e[1m"
+ RED = "\e[31m"
+ YELLOW = "\e[33m"
+ CYAN = "\e[36m"
+ WHITE = "\e[37m"
+
+ # Show an upgrade alert to the user
+ def alert(title, text, more_info_url, culprits)
+ if Config::CONFIG['host_os'].downcase =~ /mswin|windows|mingw/
+ basic_alert(title, text, more_info_url, culprits)
+ else
+ color_alert(title, text, more_info_url, culprits)
+ end
+ end
+
+ # Show an upgrade alert to the user. If we're on Windows, we can't
+ # use terminal colors, hence this method.
+ def basic_alert(title, text, more_info_url, culprits)
+ puts "** " + title
+ puts text
+ puts "More information: #{more_info_url}"
+ puts
+ puts "The culprits: "
+ Array(culprits).each do |c|
+ puts "\t- #{c}"
+ end
+ puts
+ end
+
+ # Show a colorful alert to the user
+ def color_alert(title, text, more_info_url, culprits)
+ puts "#{RED}#{BOLD}#{title}#{CLEAR}"
+ puts "#{WHITE}#{text}"
+ puts "#{BOLD}More information:#{CLEAR} #{CYAN}#{more_info_url}"
+ puts
+ puts "#{WHITE}The culprits: "
+ Array(culprits).each do |c|
+ puts "#{YELLOW}\t- #{c}"
+ end
+ ensure
+ puts "#{CLEAR}"
+ end
+ end
+ end
+end
View
95 vendor/plugins/rails_upgrade/lib/gemfile_generator.rb
@@ -0,0 +1,95 @@
+module Rails
+ module Upgrading
+ class GemfileGenerator
+ def generate_new_gemfile
+ if has_environment?
+ generate_gemfile
+ else
+ raise FileNotFoundError, "Can't find environment.rb [config/environment.rb]!"
+ end
+ end
+
+ def has_environment?
+ File.exists?("config/environment.rb")
+ end
+
+ def environment_code
+ File.open("config/environment.rb").read
+ end
+
+ def generate_gemfile
+ environment_file = environment_code
+
+ # Get each line that starts with config.gem
+ gem_lines = environment_file.split("\n").select {|l| l =~ /^\s*config\.gem/}
+
+ # Toss those lines to a generator class; the lines are evaluated in the
+ # context of that instance.
+ config = GemfileGenerator.new
+ config.instance_eval(gem_lines.join("\n"))
+
+ config.output
+ end
+ end
+
+ class GemfileGenerator
+ # Creates a target for the config.gem calls
+ def config
+ self
+ end
+
+ def initialize
+ @gems = []
+ end
+
+ # Receive a call to add a gem to the list
+ def gem(name, options={})
+ data = {}
+
+ # Add new keys from old keys
+ data[:require] = options[:lib] if options[:lib]
+ data[:source] = options[:source] if options[:source]
+
+ version = options[:version]
+ @gems << [name, version, data]
+ end
+
+ # Generate the Gemfile output
+ def output
+ # Generic preamble, taken from Yehuda Katz's blog
+ preamble = <<STR
+# Edit this Gemfile to bundle your application's dependencies.
+# This preamble is the current preamble for Rails 3 apps; edit as needed.
+source 'http://rubygems.org'
+
+gem 'rails', '3.0.0.beta3'
+
+STR
+ preamble + generate_upgraded_code
+ end
+
+ # Get Gemfile call for all the gems
+ def generate_upgraded_code
+ code = @gems.map do |name, version, data|
+ version_string = (version ? "'#{version}'" : nil)
+ source = data.delete(:source)
+
+ data_string = nil
+ unless data.empty?
+ data_string = data.to_a.map {|k, v| ":#{k} => '#{v}'"}.join(", ")
+ end
+
+ # If we have a source, generate a call to +source+ then output the
+ # gem call. Otherwise, just generate the gem requirement.
+ if source
+ str = ["'#{name}'", version_string, data_string].compact.join(", ")
+ "source '#{source}'\ngem #{str}"
+ else
+ str = ["'#{name}'", version_string, data_string].compact.join(", ")
+ "gem #{str}"
+ end
+ end.join("\n")
+ end
+ end
+ end
+end
View
51 vendor/plugins/rails_upgrade/lib/new_configuration_generator.rb
@@ -0,0 +1,51 @@
+module Rails
+ module Upgrading
+ class NewConfigurationGenerator
+ def generate_new_configurations
+ if has_environment?
+ generate_new_application_rb
+ else
+ raise FileNotFoundError, "Can't find environment.rb [config/environment.rb]!"
+ end
+ end
+
+ def has_environment?
+ File.exists?("config/environment.rb")
+ end
+
+ def environment_code
+ File.open("config/environment.rb").read
+ end
+
+ def generate_new_application_rb
+ environment_file = environment_code
+
+ initializer_code = ""
+ if matches = environment_file.match(/Rails\:\:Initializer\.run do \|config\|\n(.*)\nend/m)
+ initializer_code = matches[1]
+ else
+ raise "There doesn't seem to be a real environment.rb in your app. Are you sure config/environment.rb has the right contents?"
+ end
+
+ frame = "# Put this in config/application.rb
+require File.expand_path('../boot', __FILE__)
+
+module #{app_name.classify}
+ class Application < Rails::Application
+%s
+ end
+end"
+
+ frame % [indent(initializer_code)]
+ end
+
+ def indent(text)
+ text.split("\n").map {|l| " #{l}"}.join("\n")
+ end
+
+ def app_name
+ File.basename(Dir.pwd)
+ end
+ end
+ end
+end
View
0 vendor/plugins/rails_upgrade/lib/rails_upgrade.rb
No changes.
View
349 vendor/plugins/rails_upgrade/lib/routes_upgrader.rb
@@ -0,0 +1,349 @@
+# TODO: Fix formatting on member/collection methods
+
+module Rails
+ module Upgrading
+ module FakeRouter
+ module ActionController
+ module Routing
+ class Routes
+ def self.setup
+ @redrawer = Rails::Upgrading::RouteRedrawer.new
+ end
+
+ def self.redrawer
+ @redrawer
+ end
+
+ def self.draw
+ yield @redrawer
+ end
+ end
+ end
+ end
+ end
+
+ class RoutesUpgrader
+ def generate_new_routes
+ if has_routes_file?
+ upgrade_routes
+ else
+ raise FileNotFoundError, "Can't find your routes file [config/routes.rb]!"
+ end
+ end
+
+ def has_routes_file?
+ File.exists?("config/routes.rb")
+ end
+
+ def routes_code
+ File.read("config/routes.rb")
+ end
+
+ def upgrade_routes
+ FakeRouter::ActionController::Routing::Routes.setup
+
+ # Read and eval the file; our fake route mapper will capture
+ # the calls to draw routes and generate new route code
+ FakeRouter.module_eval(routes_code)
+
+ # Give the route set to the code generator and get its output
+ generator = RouteGenerator.new(FakeRouter::ActionController::Routing::Routes.redrawer.routes)
+ generator.generate
+ end
+ end
+
+ class RouteRedrawer
+ attr_accessor :routes
+
+ def self.stack
+ @stack
+ end
+
+ def self.stack=(val)
+ @stack = val
+ end
+
+ def initialize
+ @routes = []
+
+ # The old default route was actually two routes; we generate the new style
+ # one only if we haven't generated it for the first old default route.
+ @default_route_generated = false
+
+ # Setup the stack for parents; used use proper indentation
+ self.class.stack = [@routes]
+ end
+
+ def root(options)
+ debug "mapping root"
+ @routes << FakeRoute.new("/", options)
+ end
+
+ def connect(path, options={})
+ debug "connecting #{path}"
+
+ if (path == ":controller/:action/:id.:format" || path == ":controller/:action/:id")
+ if !@default_route_generated
+ current_parent << FakeRoute.new("/:controller(/:action(/:id))", {:default_route => true})
+
+ @default_route_generated = true
+ end
+ else
+ current_parent << FakeRoute.new(path, options)
+ end
+ end
+
+ def resources(*args)
+ if block_given?
+ parent = FakeResourceRoute.new(args.shift)
+ debug "mapping resources #{parent.name} with block"
+
+ parent = stack(parent) do
+ yield(self)
+ end
+
+ current_parent << parent
+ else
+ if args.last.is_a?(Hash)
+ current_parent << FakeResourceRoute.new(args.shift, args.pop)
+ debug "mapping resources #{current_parent.last.name} w/o block with args"
+ else
+ args.each do |a|
+ current_parent << FakeResourceRoute.new(a)
+ debug "mapping resources #{current_parent.last.name}"
+ end
+ end
+ end
+ end
+
+ def resource(*args)
+ if block_given?
+ parent = FakeSingletonResourceRoute.new(args.shift)
+ debug "mapping resource #{parent.name} with block"
+
+ parent = stack(parent) do
+ yield(self)
+ end
+
+ current_parent << parent
+ else
+ if args.last.is_a?(Hash)
+ current_parent << FakeSingletonResourceRoute.new(args.shift, args.pop)
+ debug "mapping resources #{current_parent.last.name} w/o block with args"
+ else
+ args.each do |a|
+ current_parent << FakeSingletonResourceRoute.new(a)
+ debug "mapping resources #{current_parent.last.name}"
+ end
+ end
+ end
+ end
+
+ def namespace(name)
+ debug "mapping namespace #{name}"
+ namespace = FakeNamespace.new(name)
+
+ namespace = stack(namespace) do
+ yield(self)
+ end
+
+ current_parent << namespace
+ end
+
+ def method_missing(m, *args)
+ debug "named route: #{m}"
+ current_parent << FakeRoute.new(args.shift, args.pop, m.to_s)
+ end
+
+ def self.indent
+ ' ' * ((stack.length) * 2)
+ end
+
+ private
+ def debug(txt)
+ puts txt if ENV['DEBUG']
+ end
+
+ def stack(obj)
+ self.class.stack << obj
+ yield
+ self.class.stack.pop
+ end
+
+ def current_parent
+ self.class.stack.last
+ end
+ end
+
+ class RouteObject
+ def indent_lines(code_lines)
+ if code_lines.length > 1
+ code_lines.flatten.map {|l| "#{@indent}#{l.chomp}"}.join("\n") + "\n"
+ else
+ "#{@indent}#{code_lines.shift}"
+ end
+ end
+
+ def opts_to_string(opts)
+ opts.is_a?(Hash) ? opts.map {|k, v|
+ ":#{k} => " + (v.is_a?(Hash) ? ('{ ' + opts_to_string(v) + ' }') : "#{value_to_string(v)}")
+ }.join(", ") : opts.to_s
+ end
+
+ def value_to_string(value)
+ case value
+ when Regexp then value.inspect
+ when String then "'" + value.to_s + "'"
+ else value.to_s
+ end
+ end
+ end
+
+ class FakeNamespace < RouteObject
+ attr_accessor :routes, :name
+
+ def initialize(name)
+ @routes = []
+ @name = name
+ @indent = RouteRedrawer.indent
+ end
+
+ def to_route_code
+ lines = ["namespace :#{@name} do", @routes.map {|r| r.to_route_code}, "end"]
+
+ indent_lines(lines)
+ end
+
+ def <<(val)
+ @routes << val
+ end
+
+ def last
+ @routes.last
+ end
+ end
+
+ class FakeRoute < RouteObject
+ attr_accessor :name, :path, :options
+
+ def initialize(path, options, name = "")
+ @path = path
+ @options = options || {}
+ @name = name
+ @indent = RouteRedrawer.indent
+ end
+
+ def to_route_code
+ if @options[:default_route]
+ indent_lines ["match '#{@path}'"]
+ else
+ base = "match '%s' => '%s#%s'"
+ extra_options = []
+
+ if not name.empty?
+ extra_options << ":as => :#{name}"
+ end
+
+ if @options[:requirements]
+ @options[:constraints] = @options.delete(:requirements)
+ end
+
+ if @options[:conditions]
+ @options[:via] = @options.delete(:conditions).delete(:method)
+ end
+
+ @options ||= {}
+ base = (base % [@path, @options.delete(:controller), (@options.delete(:action) || "index")])
+ opts = opts_to_string(@options)
+
+ route_pieces = ([base] + extra_options + [opts])
+ route_pieces.delete("")
+
+ indent_lines [route_pieces.join(", ")]
+ end
+ end
+ end
+
+ class FakeResourceRoute < RouteObject
+ attr_accessor :name, :children
+
+ def initialize(name, options = {})
+ @name = name
+ @children = []
+ @options = options
+ @indent = RouteRedrawer.indent
+ end
+
+ def to_route_code
+
+ if !@children.empty? || @options.has_key?(:collection) || @options.has_key?(:member)
+ prefix = ["#{route_method} :#{@name} do"]
+ lines = prefix + custom_methods + [@children.map {|r| r.to_route_code}.join("\n"), "end"]
+
+ indent_lines(lines)
+ else
+ base = "#{route_method} :%s"
+ indent_lines [base % [@name]]
+ end
+ end
+
+ def custom_methods
+ collection_code = generate_custom_methods_for(:collection)
+ member_code = generate_custom_methods_for(:member)
+ [collection_code, member_code]
+ end
+
+ def generate_custom_methods_for(group)
+ return "" unless @options[group]
+
+ method_code = []
+
+ RouteRedrawer.stack << self
+ @options[group].each do |k, v|
+ method_code << "#{v} :#{k}"
+ end
+ RouteRedrawer.stack.pop
+
+ indent_lines ["#{group} do", method_code, "end"].flatten
+ end
+
+ def route_method
+ "resources"
+ end
+
+ def <<(val)
+ @children << val
+ end
+
+ def last
+ @children.last
+ end
+ end
+
+ class FakeSingletonResourceRoute < FakeResourceRoute
+ def route_method
+ "resource"
+ end
+ end
+
+ class RouteGenerator
+ def initialize(routes)
+ @routes = routes
+ @new_code = ""
+ end
+
+ def generate
+ @new_code = @routes.map do |r|
+ r.to_route_code
+ end.join("\n")
+
+ "#{app_name.underscore.classify}::Application.routes.draw do\n#{@new_code}\nend\n"
+ end
+
+ private
+ def app_name
+ File.basename(Dir.pwd)
+ end
+ end
+ end
+end
View
78 vendor/plugins/rails_upgrade/lib/tasks/rails_upgrade_tasks.rake
@@ -0,0 +1,78 @@
+$:.unshift(File.dirname(__FILE__) + "/../../lib")
+require 'routes_upgrader'
+require 'gemfile_generator'
+require 'application_checker'
+require 'new_configuration_generator'
+
+require 'fileutils'
+
+namespace :rails do
+ namespace :upgrade do
+ desc "Runs a battery of checks on your Rails 2.x app and generates a report on required upgrades for Rails 3"
+ task :check do
+ checker = Rails::Upgrading::ApplicationChecker.new
+ checker.run
+ end
+
+ desc "Generates a Gemfile for your Rails 3 app out of your config.gem directives"
+ task :gems do
+ generator = Rails::Upgrading::GemfileGenerator.new
+ new_gemfile = generator.generate_new_gemfile
+
+ puts new_gemfile
+ end
+
+ desc "Create a new, upgraded route file from your current routes.rb"
+ task :routes do
+ upgrader = Rails::Upgrading::RoutesUpgrader.new
+ new_routes = upgrader.generate_new_routes
+
+ puts new_routes
+ end
+
+ desc "Extracts your configuration code so you can create a new config/application.rb"
+ task :configuration do
+ upgrader = Rails::Upgrading::NewConfigurationGenerator.new
+ new_config = upgrader.generate_new_application_rb
+
+ puts new_config
+ end
+
+ CLEAR = "\e[0m"
+ CYAN = "\e[36m"
+ WHITE = "\e[37m"
+
+ desc "Backs up your likely modified files so you can run the Rails 3 generator on your app with little risk"
+ task :backup do
+ files = [".gitignore",
+ "app/controllers/application_controller.rb",
+ "app/helpers/application_helper.rb",
+ "config/routes.rb",
+ "config/environment.rb",
+ "config/environments/development.rb",
+ "config/environments/production.rb",
+ "config/environments/staging.rb",
+ "config/database.yml",
+ "config.ru",
+ "doc/README_FOR_APP",
+ "test/test_helper.rb"]
+
+ puts
+ files.each do |f|
+ if File.exist?(f)
+ puts "#{CYAN}* #{CLEAR}backing up #{WHITE}#{f}#{CLEAR} to #{WHITE}#{f}.rails2#{CLEAR}"
+ FileUtils.cp(f, "#{f}.rails2")
+ end
+ end
+
+ puts
+ puts "This is a list of the files analyzed and backed up (if they existed);\nyou will probably not want the generator to replace them since\nyou probably modified them (but now they're safe if you accidentally do!)."
+ puts
+
+ files.each do |f|
+ puts "#{CYAN}- #{CLEAR}#{f}"
+ end
+ puts
+ end
+ end
+end
View
293 vendor/plugins/rails_upgrade/test/application_checker_test.rb
@@ -0,0 +1,293 @@
+require 'test_helper'
+require 'application_checker'
+require 'fileutils'
+
+tmp_dir = "#{File.dirname(__FILE__)}/fixtures/tmp"
+
+if defined? BASE_ROOT
+ BASE_ROOT.replace tmp_dir
+else
+ BASE_ROOT = tmp_dir
+end
+FileUtils.mkdir_p BASE_ROOT
+
+# Stub out methods on upgrader class
+module Rails
+ module Upgrading
+ class ApplicationChecker
+ attr_reader :alerts
+
+ def base_path
+ BASE_ROOT + "/"
+ end
+
+ def in_rails_app?
+ true
+ end
+
+ def initialize
+ @alerts = {}
+ end
+
+ def alert(title, text, more_info_url, culprits)
+ @alerts[title] = [text, more_info_url, culprits]
+ end
+ end
+ end
+end
+
+class ApplicationCheckerTest < ActiveSupport::TestCase
+ def setup
+ @checker = Rails::Upgrading::ApplicationChecker.new
+ @old_dir = Dir.pwd
+
+ Dir.chdir(BASE_ROOT)
+ end
+
+ def test_check_ar_methods_in_controller
+ make_file("app/controllers", "post_controller.rb", "Post.find(:all)")
+ @checker.check_ar_methods
+
+ assert @checker.alerts.has_key?("Soon-to-be-deprecated ActiveRecord calls")
+ end
+
+ def test_check_ar_methods_in_models
+ make_file("app/models", "post.rb", "Post.find(:all)")
+ @checker.check_ar_methods
+
+ assert @checker.alerts.has_key?("Soon-to-be-deprecated ActiveRecord calls")
+ end
+
+ def test_check_validation_on_methods
+ make_file("app/models", "post.rb", "validate_on_create :comments_valid?")
+ @checker.check_validation_on_methods
+
+ assert @checker.alerts.has_key?("Updated syntax for validate_on_* methods")
+ end
+
+ def test_check_before_validation_on_methods
+ make_file("app/models", "post.rb", "before_validation_on_create :comments_valid?")
+ @checker.check_before_validation_on_methods
+
+ assert @checker.alerts.has_key?("Updated syntax for before_validation_on_* methods")
+ end
+
+ def test_named_scope_left_over
+ make_file("app/models", "post.rb", "named_scope :failure")
+ @checker.check_ar_methods
+
+ assert @checker.alerts.has_key?("named_scope is now just scope")
+ end
+
+ def test_check_routes
+ make_file("config/", "routes.rb", " map.connect 'fail'")
+ @checker.check_routes
+
+ assert @checker.alerts.has_key?("Old router API")
+ end
+
+ def test_check_for_old_test_help
+ make_file("test/", "test_helper.rb", " require 'test_help'")
+ @checker.check_test_help
+
+ assert @checker.alerts.has_key?("Deprecated test_help path")
+ end
+
+ def test_check_for_old_test_help_with_double_quotes
+ make_file("test/", "test_helper.rb", " require \"test_help\"")
+ @checker.check_test_help
+
+ assert @checker.alerts.has_key?("Deprecated test_help path")
+ end
+
+ def test_check_for_old_test_help_doesnt_see_test_helper
+ make_file("test/", "test_helper.rb", " require 'test_helper'")
+ @checker.check_test_help
+
+ assert !@checker.alerts.has_key?("Deprecated test_help path")
+ end
+
+ def test_check_lack_of_app_dot_rb
+ @checker.check_environment
+
+ assert @checker.alerts.has_key?("New file needed: config/application.rb")
+ end
+
+ def test_check_environment_syntax
+ make_file("config/", "environment.rb", "config.frameworks = []")
+ @checker.check_environment
+
+ assert @checker.alerts.has_key?("Old environment.rb")
+ end
+
+ def test_check_gems
+ make_file("config/", "environment.rb", "config.gem 'rails'")
+ @checker.check_gems
+
+ assert @checker.alerts.has_key?("Old gem bundling (config.gems)")
+ end
+
+ def test_check_mailer_syntax
+ make_file("app/models/", "notifications.rb", "def signup\nrecipients @users\n end")
+ @checker.check_mailers
+
+ assert @checker.alerts.has_key?("Old ActionMailer class API")
+ end
+
+ def test_check_mailer_syntax_from
+ make_file("app/models/", "notifications.rb", "def signup\nfrom @user\n end")
+ @checker.check_mailers
+
+ assert @checker.alerts.has_key?("Old ActionMailer class API")
+ end
+
+ def test_check_mailer_syntax_subject
+ make_file("app/models/", "notifications.rb", "def signup\nsubject @subject\n end")
+ @checker.check_mailers
+
+ assert @checker.alerts.has_key?("Old ActionMailer class API")
+ end
+
+ def test_check_mailer_syntax_attachment
+ make_file("app/models/", "notifications.rb", "def signup\nattachment 'application/pdf' do |a|\n end")
+ @checker.check_mailers
+
+ assert @checker.alerts.has_key?("Old ActionMailer class API")
+ end
+
+ def test_new_check_mailer_syntax_from
+ make_file("app/models/", "notifications.rb", "def signup\n:from => @users\n end")
+ @checker.check_mailers
+
+ assert ! @checker.alerts.has_key?("Old ActionMailer class API")
+ end
+
+ def test_new_check_mailer_syntax_subject
+ make_file("app/models/", "notifications.rb", "def signup\n:subject => @users\n end")
+ @checker.check_mailers
+
+ assert ! @checker.alerts.has_key?("Old ActionMailer class API")
+ end
+
+ def test_new_check_mailer_syntax_attachments
+ make_file("app/models/", "notifications.rb", "def signup\nattachments['an-image.jp'] = File.read('an-image.jpg')\n end")
+ @checker.check_mailers
+
+ assert ! @checker.alerts.has_key?("Old ActionMailer class API")
+ end
+
+ def test_check_mailer_api
+ make_file("app/controllers/", "thing_controller.rb", "def signup\n Notifications.deliver_signup\n end")
+ @checker.check_mailers
+
+ assert @checker.alerts.has_key?("Deprecated ActionMailer API")
+ end
+
+ def test_check_generators
+ make_file("vendor/plugins/thing/generators/thing/", "thing_generator.rb", "def manifest\n m.whatever\n end")
+ @checker.check_generators
+
+ assert @checker.alerts.has_key?("Old Rails generator API")
+ end
+
+ def test_check_plugins
+ make_file("vendor/plugins/rspec-rails/", "whatever.rb", "def rspec; end")
+ @checker.check_plugins
+
+ assert @checker.alerts.has_key?("Known broken plugins")
+ end
+
+ def test_ignoring_comments
+ make_file("config/", "routes.rb", "# map.connect 'fail'")
+ @checker.check_routes
+
+ assert !@checker.alerts.has_key?("Old router API")
+ end
+
+ def test_check_deprecated_constants_in_app_code
+ make_file("app/controllers/", "thing_controller.rb", "class ThingController; THING = RAILS_ENV; end;")
+ @checker.check_deprecated_constants
+
+ assert @checker.alerts.has_key?("Deprecated constant(s)")
+ end
+
+ def test_check_deprecated_constants_in_lib
+ make_file("lib/", "extra_thing.rb", "class ExtraThing; THING = RAILS_ENV; end;")
+ @checker.check_deprecated_constants
+
+ assert @checker.alerts.has_key?("Deprecated constant(s)")
+ end
+
+ def test_check_deprecated_cookie_settings
+ make_file("config/initializers/", "more_settings.rb", "ActionController::Base.cookie_verifier_secret = 'OMG'")
+ @checker.check_old_cookie_secret
+
+ assert @checker.alerts.has_key?("Deprecated cookie secret setting")
+ end
+
+ def test_check_deprecated_session_secret
+ make_file("config/initializers/", "more_settings.rb", "ActionController::Base.session = {\n:whatever => 'woot'\n}")
+ @checker.check_old_session_secret
+
+ assert @checker.alerts.has_key?("Deprecated session secret setting")
+ end
+
+ def test_check_deprecated_session_settings
+ make_file("config/initializers/", "more_settings.rb", "ActionController::Base.session_store = :cookie\nthings.awesome(:whatever)")
+ @checker.check_old_session_setting
+
+ assert @checker.alerts.has_key?("Old session store setting")
+ end
+
+ def test_check_helpers
+ make_file("app/views/users/", "test.html.erb", "<b>blah blah blah</b><% form_for(:thing) do |f| %> <label>doo dah</label> <%= f.whatever %> <% end %>")
+ @checker.check_old_helpers
+
+ assert @checker.alerts.has_key?("Deprecated ERb helper calls")
+
+ end
+
+ def test_check_old_helpers_lets_regular_blocks_pass
+ make_file("app/views/users/", "another_test.html.erb", "<b>blah blah blah</b><% @some_items.each do |item| %> <label>doo dah</label> <%= item %> <% end %>")
+ @checker.check_old_helpers
+
+ assert_equal @checker.alerts.has_key?("Deprecated ERb helper calls"), false
+ end
+
+ def test_check_old_helpers_lets_regular_blocks_pass
+ make_file("app/views/users/", "another_test.html.erb", "<b>blah blah blah</b><% @some_items.each do |item| %> <label>doo dah</label> <%= item %> <% end %>")
+ @checker.check_old_helpers
+
+ assert_equal @checker.alerts.has_key?("Deprecated ERb helper calls"), false
+ end
+
+ def test_check_old_ajax_helpers
+ make_file("app/views/sections", "section.js", "<%= link_to_remote 'section-', :update => 'sections', :url => {:action => :destroy, :controller => 'sections', :id => @section.id } %>")
+ @checker.check_old_ajax_helpers
+
+ assert @checker.alerts.has_key?("Deprecated AJAX helper calls")
+ end
+
+ def test_check_old_ajax_helpers_empty
+ @checker.check_old_ajax_helpers
+
+ assert ! @checker.alerts.has_key?("Deprecated AJAX helper calls")
+ end
+
+ def teardown
+ clear_files
+
+ Dir.chdir(@old_dir)
+ end
+
+ def make_file(where, name=nil, contents=nil)
+ FileUtils.mkdir_p "#{BASE_ROOT}/#{where}"
+ File.open("#{BASE_ROOT}/#{where}/#{name}", "w+") do |f|
+ f.write(contents)
+ end if name
+ end
+
+ def clear_files
+ FileUtils.rm_rf(Dir.glob("#{BASE_ROOT}/*"))
+ end
+end
View
72 vendor/plugins/rails_upgrade/test/gemfile_generator_test.rb
@@ -0,0 +1,72 @@
+require 'test_helper'
+require 'gemfile_generator'
+
+# Stub out methods on upgrader class
+module Rails
+ module Upgrading
+ class GemfileGenerator
+ attr_writer :environment_code
+
+ def has_environment?
+ true
+ end
+
+ def environment_code
+ @environment_code
+ end
+ end
+ end
+end
+
+class GemfileGeneratorTest < ActiveSupport::TestCase
+ PREAMBLE = <<STR
+# Edit this Gemfile to bundle your application's dependencies.
+# This preamble is the current preamble for Rails 3 apps; edit as needed.
+source 'http://rubygems.org'
+
+gem 'rails', '3.0.0.beta3'
+
+STR
+
+ def test_generates_with_no_gems
+ generator = Rails::Upgrading::GemfileGenerator.new
+ generator.environment_code = ""
+
+ assert_equal PREAMBLE, generator.generate_gemfile
+ end
+
+ def test_generates_with_gem
+ generator = Rails::Upgrading::GemfileGenerator.new
+ generator.environment_code = "config.gem 'camping'"
+
+ assert_equal PREAMBLE + "gem 'camping'", generator.generate_gemfile
+ end
+
+ def test_generates_with_version
+ generator = Rails::Upgrading::GemfileGenerator.new
+ generator.environment_code = "config.gem 'camping', :version => '2.1.1'"
+
+ assert_equal PREAMBLE + "gem 'camping', '2.1.1'", generator.generate_gemfile
+ end
+
+ def test_can_add_sources
+ generator = Rails::Upgrading::GemfileGenerator.new
+ generator.environment_code = "config.gem 'camping', :source => 'http://code.whytheluckystiff.net'"
+
+ assert_equal PREAMBLE + "source 'http://code.whytheluckystiff.net'\ngem 'camping'", generator.generate_gemfile
+ end
+
+ def test_changes_lib_to_new_key
+ generator = Rails::Upgrading::GemfileGenerator.new
+ generator.environment_code = "config.gem 'camping', :lib => 'kamping'"
+
+ assert_equal PREAMBLE + "gem 'camping', :require => 'kamping'", generator.generate_gemfile
+ end
+
+ def test_generates_with_all_options
+ generator = Rails::Upgrading::GemfileGenerator.new
+ generator.environment_code = "config.gem 'camping', :lib => 'kamping', :source => 'http://code.whytheluckystiff.net', :version => '2.1.1'"
+
+ assert_equal PREAMBLE + "source 'http://code.whytheluckystiff.net'\ngem 'camping', '2.1.1', :require => 'kamping'", generator.generate_gemfile
+ end
+end
View
63 vendor/plugins/rails_upgrade/test/new_configuration_generator_test.rb
@@ -0,0 +1,63 @@
+require 'test_helper'
+require 'new_configuration_generator'
+
+# Stub out methods on upgrader class
+module Rails
+ module Upgrading
+ class NewConfigurationGenerator
+ attr_writer :environment_code
+
+ def has_environment?
+ true
+ end
+
+ def environment_code
+ @environment_code
+ end
+
+ def app_name
+ "my_application"
+ end
+ end
+ end
+end
+
+class NewConfigurationGeneratorTest < ActiveSupport::TestCase
+ FRAME = "# Put this in config/application.rb
+require File.expand_path('../boot', __FILE__)
+
+module MyApplication
+ class Application < Rails::Application
+%s
+ end
+end"
+
+ CONFIG = " config.what_have_you = 'thing'
+ config.action_controller = 'what'"
+
+ CODE = "require 'w/e'
+
+this_happens_before_the(code)
+more_before_the_code!
+
+Rails::Initializer.run do |config|
+%s
+end
+
+this_is_after_the_code
+"
+
+ def test_raises_error_with_no_code
+ generator = Rails::Upgrading::NewConfigurationGenerator.new
+ generator.environment_code = ""
+
+ assert_raises(RuntimeError) { generator.generate_new_application_rb }
+ end
+
+ def test_generates_with_code
+ generator = Rails::Upgrading::NewConfigurationGenerator.new
+ generator.environment_code = CODE % [CONFIG]
+
+ assert_equal FRAME % [generator.indent(CONFIG)], generator.generate_new_application_rb
+ end
+end
View
142 vendor/plugins/rails_upgrade/test/routes_upgrader_test.rb
@@ -0,0 +1,142 @@
+require 'test_helper'
+require 'routes_upgrader'
+
+# Stub out methods on upgrader class
+module Rails
+ module Upgrading
+ class RoutesUpgrader
+ attr_writer :routes_code
+
+ def has_routes_file?
+ true
+ end
+
+ def routes_code
+ @routes_code
+ end
+ end
+
+ class RouteGenerator
+ def app_name
+ "MyApplication"
+ end
+ end
+ end
+end
+
+class RoutesUpgraderTest < ActiveSupport::TestCase
+ def setup
+ Rails::Upgrading::RouteRedrawer.stack = []
+ end
+
+ def test_generates_routes_file
+ routes_code = "
+ ActionController::Routing::Routes.draw do |map|
+ map.connect '/home', :controller => 'home', :action => 'index'
+ map.login '/login', :controller => 'sessions', :action => 'new'
+
+ map.resources :hats
+ map.resource :store
+ end
+ "
+
+ new_routes_code = "MyApplication::Application.routes.draw do
+ match '/home' => 'home#index'
+ match '/login' => 'sessions#new', :as => :login
+ resources :hats
+ resource :store
+end
+"
+
+ upgrader = Rails::Upgrading::RoutesUpgrader.new
+ upgrader.routes_code = routes_code
+
+ result = upgrader.generate_new_routes
+
+ assert_equal new_routes_code, result
+ end
+
+ def test_generates_code_for_regular_route
+ route = Rails::Upgrading::FakeRoute.new("/about", {:controller => 'static', :action => 'about'})
+ assert_equal "match '/about' => 'static#about'", route.to_route_code
+ end
+
+ def test_generates_code_for_named_route
+ route = Rails::Upgrading::FakeRoute.new("/about", {:controller => 'static', :action => 'about'}, "about")
+ assert_equal "match '/about' => 'static#about', :as => :about", route.to_route_code
+ end
+
+ def test_generates_code_for_namespace
+ ns = Rails::Upgrading::FakeNamespace.new("static")
+ # Add a route to the namespace
+ ns << Rails::Upgrading::FakeRoute.new("/about", {:controller => 'static', :action => 'about'})
+
+ assert_equal "namespace :static do\nmatch '/about' => 'static#about'\nend\n", ns.to_route_code
+ end
+
+ def test_generates_code_for_resources
+ route = Rails::Upgrading::FakeResourceRoute.new("hats")
+ assert_equal "resources :hats", route.to_route_code
+ end
+
+ def test_generates_code_for_resources
+ route = Rails::Upgrading::FakeSingletonResourceRoute.new("hat")
+ assert_equal "resource :hat", route.to_route_code
+ end
+
+ def test_generates_code_for_resources_with_special_methods
+ route = Rails::Upgrading::FakeResourceRoute.new("hats", {:member => {:wear => :get}, :collection => {:toss => :post}})
+ assert_equal "resources :hats do\ncollection do\npost :toss\nend\nmember do\nget :wear\nend\n\nend\n", route.to_route_code
+ end
+
+ def test_generates_code_for_route_with_extra_params
+ route = Rails::Upgrading::FakeRoute.new("/about", {:controller => 'static', :action => 'about', :something => 'extra'})
+ assert_equal "match '/about' => 'static#about', :something => 'extra'", route.to_route_code
+ end
+
+ def test_generates_code_for_route_with_requirements
+ route = Rails::Upgrading::FakeRoute.new("/foo", {:controller => 'foo', :action => 'bar', :requirements => {:digit => /%d/}})
+ assert_equal "match '/foo' => 'foo#bar', :constraints => { :digit => /%d/ }", route.to_route_code
+ end
+
+ def test_generates_code_for_root
+ routes_code = "
+ ActionController::Routing::Routes.draw do |map|
+ map.root :controller => 'home', :action => 'index'
+ end
+ "
+
+ new_routes_code = "MyApplication::Application.routes.draw do
+ match '/' => 'home#index'
+end
+"
+
+ upgrader = Rails::Upgrading::RoutesUpgrader.new
+ upgrader.routes_code = routes_code
+
+ result = upgrader.generate_new_routes
+
+ assert_equal new_routes_code, result
+ end
+
+ def test_generates_code_for_default_route
+ routes_code = "
+ ActionController::Routing::Routes.draw do |map|
+ map.connect ':controller/:action/:id.:format'
+ map.connect ':controller/:action/:id'
+ end
+ "
+
+ new_routes_code = "MyApplication::Application.routes.draw do
+ match '/:controller(/:action(/:id))'
+end
+"
+
+ upgrader = Rails::Upgrading::RoutesUpgrader.new
+ upgrader.routes_code = routes_code
+
+ result = upgrader.generate_new_routes
+
+ assert_equal new_routes_code, result
+ end
+end
View
5 vendor/plugins/rails_upgrade/test/test_helper.rb
@@ -0,0 +1,5 @@
+require 'test/unit'
+
+require 'rubygems'
+require 'active_support'
+require 'active_support/test_case'
View
1 vendor/plugins/rails_upgrade/uninstall.rb
@@ -0,0 +1 @@
+# Uninstall hook code here

0 comments on commit 501c651

Please sign in to comment.
Something went wrong with that request. Please try again.