Skip to content

Instantly share code, notes, and snippets.

@mikewadhera
Created September 15, 2011 19:37
Show Gist options
  • Save mikewadhera/1220254 to your computer and use it in GitHub Desktop.
Save mikewadhera/1220254 to your computer and use it in GitHub Desktop.
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
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