-
Notifications
You must be signed in to change notification settings - Fork 2.9k
/
photo.rb
72 lines (56 loc) · 1.73 KB
/
photo.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3. See
# the COPYRIGHT file.
class Photo < Post
require 'carrierwave/orm/mongomapper'
include MongoMapper::Document
mount_uploader :image, ImageUploader
xml_accessor :remote_photo
xml_accessor :caption
xml_reader :album_id
key :album_id, ObjectId
key :caption, String
key :remote_photo_path
key :remote_photo_name
belongs_to :album, :class_name => 'Album'
timestamps!
validates_presence_of :album
validates_true_for :album_id, :logic => lambda {self.validate_album_person}
before_destroy :ensure_user_picture
def self.instantiate(params = {})
image_file = params[:user_file]
params.delete :user_file
photo = Photo.new(params)
photo.image.store! image_file
photo.save
photo
end
def validate_album_person
album.person_id == person_id
end
def remote_photo
image.url.nil? ? (remote_photo_path + '/' + remote_photo_name) : image.url
end
def remote_photo= remote_path
name_start = remote_path.rindex '/'
self.remote_photo_path = remote_path.slice(0, name_start )
self.remote_photo_name = remote_path.slice(name_start + 1, remote_path.length)
end
def url(name = nil)
if remote_photo_path
name = name.to_s + "_" if name
person.url.chop + remote_photo_path + "/" + name.to_s + remote_photo_name
else
image.url name
end
end
def ensure_user_picture
users = Person.all('profile.image_url' => image.url(:thumb_medium) )
users.each{ |user|
user.profile.update_attributes!(:image_url => nil)
}
end
def thumb_hash
{:thumb_url => url(:thumb_medium), :id => id, :album_id => album_id}
end
end