Created
September 15, 2011 19:37
-
-
Save mikewadhera/1220254 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class FileOrganizer | |
def initialize(roots, home, debug=false) | |
@roots = roots | |
@home = home | |
@debug = debug | |
end | |
def organize_by_class_lineage(klass, current_path, lineage=[]) | |
if @roots.include? klass | |
new_dir = File.join(@home, *lineage[0...-1]) | |
new_path = File.join(new_dir, File.basename(current_path)) | |
mkdir_p new_dir | |
mv current_path, new_path | |
else | |
organize_by_class_lineage(klass.superclass, current_path, lineage.unshift(klass.to_s.underscore)) | |
end | |
end | |
protected | |
def mkdir_p(path) | |
@debug ? puts(" mkdir -p #{path}") : `mkdir -p #{path}` | |
end | |
def mv(a,b) | |
@debug ? puts(" mv #{a} -> #{b}") : `mv #{a} #{b}` | |
end | |
end | |
if $0 == __FILE__ | |
# Organize all models by their class lineage | |
organizer = FileOrganizer.new([ActiveRecord::Base, ActiveRecord::BaseWithoutTable, Object], "#{Rails.root}/app/models", true) | |
for path in Dir["#{Rails.root}/app/models/**/*"] | |
next unless File.basename(path) =~ /(.*).rb$/ | |
begin | |
puts "Doing: #{model = $1.camelcase}" | |
organizer.organize_by_class_lineage(eval(model), path) | |
rescue LoadError => e | |
puts "LOAD ERROR: #{path}" | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Doing: BitlyProvider | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models/short_url_provider | |
mv /Users/mikewadhera/code/involver-rails/app/models/url_providers/bitly_provider.rb -> /Users/mikewadhera/code/involver-rails/app/models/short_url_provider/bitly_provider.rb | |
Doing: ShortUrlProvider | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models | |
mv /Users/mikewadhera/code/involver-rails/app/models/url_providers/short_url_provider.rb -> /Users/mikewadhera/code/involver-rails/app/models/short_url_provider.rb | |
Doing: User | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models | |
mv /Users/mikewadhera/code/involver-rails/app/models/user.rb -> /Users/mikewadhera/code/involver-rails/app/models/user.rb | |
Doing: UserError | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models | |
mv /Users/mikewadhera/code/involver-rails/app/models/user_error.rb -> /Users/mikewadhera/code/involver-rails/app/models/user_error.rb | |
Doing: UserProfile | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models | |
mv /Users/mikewadhera/code/involver-rails/app/models/user_profile.rb -> /Users/mikewadhera/code/involver-rails/app/models/user_profile.rb | |
Doing: Version | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models | |
mv /Users/mikewadhera/code/involver-rails/app/models/version.rb -> /Users/mikewadhera/code/involver-rails/app/models/version.rb | |
Doing: Video | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models | |
mv /Users/mikewadhera/code/involver-rails/app/models/video.rb -> /Users/mikewadhera/code/involver-rails/app/models/video.rb | |
Doing: VideoEncoding | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models | |
mv /Users/mikewadhera/code/involver-rails/app/models/video_encoding.rb -> /Users/mikewadhera/code/involver-rails/app/models/video_encoding.rb | |
Doing: VideoThumbnail | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models/image | |
mv /Users/mikewadhera/code/involver-rails/app/models/video_thumbnail.rb -> /Users/mikewadhera/code/involver-rails/app/models/image/video_thumbnail.rb | |
Doing: VideoUpload | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models/file_upload | |
mv /Users/mikewadhera/code/involver-rails/app/models/video_upload.rb -> /Users/mikewadhera/code/involver-rails/app/models/file_upload/video_upload.rb | |
Doing: ViewerUser | |
mkdir -p /Users/mikewadhera/code/involver-rails/app/models/user | |
mv /Users/mikewadhera/code/involver-rails/app/models/viewer_user.rb -> /Users/mikewadhera/code/involver-rails/app/models/user/viewer_user.rb |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment