require 'RMagick'
class Profile < ActiveRecord::Base
belongs_to :user
#image = the image passed from params[:image]
#file_type = the confirmed filetype from the controller
#current_user = various information about the current user
def self.upload(image, file_type, current_user)
#set default cols and rows for our two images that will be created from the uploaded user image
img_size = {:main =>{:cols => 250,:rows => 375},
:thumb =>{:cols =>80, :rows =>120}
}
#set base directory for the users image
imgDir = "#{RAILS_ROOT}/public/images/user_images"
#set the base name for our userimage
userImg = " #{current_user.login}-#{current_user.id}"
#loop through the image dir and delete any old user images
Dir.foreach(imgDir){|file|
if file.to_s.include?(userImg)
File.unlink("#{imgDir}/#{file}")
end
}
#read the image from the string
imgs = Magick::Image.from_blob(image.read)
#change the geometry of the image to suit our predefined size
main_image = imgs.first.change_geometry!("#{img_size[:main][:cols]}x#{img_size[:main][:rows]}") { |cols, rows, img|
#if the cols or rows are smaller then our predefined sizes we build a white background and center the image in it
if cols < img_size[:main][:cols] || rows < img_size[:main][:rows]
#resize our image
img.resize!(cols, rows)
#build the white background
bg = Magick::Image.new(img_size[:main][:cols],img_size[:main][:rows]){self.background_color = "white"}
#center the image on our new white background
bg.composite(img, Magick::CenterGravity, Magick::OverCompositeOp)
else
#in the unlikely event that the new geometry cols and rows match our predefined size we will not set a white bg
img.resize!(cols, rows)
end
}
main_image.write "#{imgDir}/#{userImg}.#{file_type}"
thumb = imgs.first.change_geometry!("#{img_size[:thumb][:cols]}x#{img_size[:thumb][:rows]}") { |cols, rows, img|
if cols < img_size[:thumb][:cols] || rows < img_size[:thumb][:rows]
img.resize!(cols, rows)
bg = Magick::Image.new(img_size[:thumb][:cols],img_size[:thumb][:rows]){self.background_color = "white"}
bg.composite(img, Magick::CenterGravity, Magick::OverCompositeOp)
else
img.resize!(cols, rows)
end
}
thumb.write "#{imgDir}/#{userImg}-thumb.#{file_type}"
if FileTest.exist?("#{imgDir}/#{userImg}.#{file_type}")
return "The file was written and its name is #{userImg}.#{file_type}"
else
return false
end
end
end
####################################
#Models
####################################
#Create a Model
$ ruby script/generate model ClassName attribute_name:attribute_type attribute_name:attribute_type
####################################
#Controllers
####################################
#Create a Controller
$ ruby script/generate controller ClassName action1 action2
#Remove a Controller
$ ruby script/destroy controller ClassName action1 action2
####################################
#Server
####################################
#Start an application
$ script/server
####################################
#Migrations
####################################
#Migrate does these 3 things
#1. Checks the database for the unique number of the migration is most recent
#2. It steps through the migrations that have not yet been applied, one at a time.
#3. The Self.up method is executed for each migration
$ rake db:migrate
#Rollback a Migration
$ rake db:migrate VERSION=n
#Retrieving Records by ID, not recommended but at times helpful
ModelName = (Most likely TableName)
IRB>> ModelName.find(#id)
IRB>> ModelName.find(:all)
#Retrive the Last Record
IRB>> ModelName.find(:all).last (Resource Intensive)
IRB>> ModelName.find(:first, :order => 'id DESC') (Resource Efficient)