site_perso_app/app/models/portfolio_image.rb
2013-02-08 01:40:18 +01:00

66 lines
1.3 KiB
Ruby

class PortfolioImage < ActiveRecord::Base
attr_accessible :description, :photo, :shoot_at, :title, :portfolio_ids
mount_uploader :photo, ImageUploader
has_many :portfolios, :through => :portfolio_portfolio_images
has_many :portfolio_portfolio_images
scope :after, lambda {|time| {:conditions => ["shoot_at > ?", time]}}
def position(portfolio)
portfolio.images.after(self.shoot_at).count+1
end
def page(portfolio)
per_page = portfolio.content_type || 1
(self.position(portfolio)/(per_page*1.0)).ceil
end
def width
self.photo.geometry[:width]
end
def height
self.photo.geometry[:height]
end
def rotate(degrees=90)
versions = [self.photo.path, self.photo.large.path, self.photo.thumb.path]
versions.each do |v|
image = Magick::ImageList.new(v)
image = image.rotate(degrees)
image.write(v)
end
self.updated_at = Time.now
self.save
end
def exif
EXIFR::JPEG.new(self.photo.path)
end
def ratio
img = Magick::Image::read(self.photo.path).first
return ((img.columns*1.00) / (img.rows*1.00))
end
before_create do
if self.exif.date_time
self.shoot_at = self.exif.date_time
else
self.shoot_at = Time.now
end
end
end