Skip to content

Instantly share code, notes, and snippets.

@mikewadhera
Created September 15, 2011 07:47
Show Gist options
  • Save mikewadhera/1218766 to your computer and use it in GitHub Desktop.
Save mikewadhera/1218766 to your computer and use it in GitHub Desktop.
class FileOrganizer
def initialize(root, home, debug=false)
@root = root
@home = home
@debug = debug
end
def organize_by_class_lineage(klass, current_path, lineage=[])
case klass.parent
when @root
mkdir_p File.join(@home, *lineage[0..-2])
mv File.join(@home, *(lineage + File.basename(current_path)))
else
organize_by_class_lineage(klass.parent, 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
organizer = FileOrganizer.new(ActiveRecord::Base, "#{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.constantize}"
organizer.organize_by_class_lineage(model, path)
rescue LoadError => e
puts "LOAD ERROR: #{path}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment