Class: Flickry::Photo

Inherits:
Base show all
Defined in:
lib/flickry/photo.rb

Instance Method Summary collapse

Methods inherited from Base

#attributes

Methods inherited from SuperStruct

#[], #[]=, #each, #each_pair, #members

Constructor Details

#initialize(flickr_id) ⇒ Photo

Returns a new instance of Photo.



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/flickry/photo.rb', line 3

def initialize(flickr_id)
  super(nil)
  foto = flickr.photos.getInfo(:photo_id => flickr_id)
  self.raw_photo = foto
  self.photo_id = flickr_id

  extract_attrs!(foto, [:dateuploaded, :description, :farm, :id, :isfavorite, :license,
    :media, :notes, :originalformat, :originalsecret, :rotation, :secret, :server, :tags,
    :title, :urls])
  extract_attrs_into_substructs!(foto, {
    :dates        => [:lastupdate, :posted, :taken, :takengranularity],
    :editability  => [:canaddmeta, :cancomment],
    :geoperms     => [:iscontact, :isfamily, :isfriend, :ispublic],
    :usage        => [:canblog, :candownload, :canprint],
    :visibility   => [:isfamily, :isfriend, :ispublic]
  })
  self.location = Flickry::Location.new(foto.respond_to?(:location) ? foto.location : nil)
  self.owner    = Flickry::Person.new(foto.respond_to?(:owner) ? foto.owner : nil)
  
  _tags = self.tags.dup
  self.tags = _tags.collect do |t|
    Flickry::Tag.new(t)
  end
end

Instance Method Details

#commentsObject

Lazily fetches the photo’s comments when called, memoizes so later calls are faster…



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/flickry/photo.rb', line 34

def comments
  return @comments if @comments
  
  if raw_photo.comments.to_i == 0
    @comments = []
  else
    @comments = []
    flickr_comments = flickr.photos.comments.getList(:photo_id => self.photo_id)
    flickr_comments.each do |comment|
      @comments << Flickry::Comment.new(comment)
    end
  end
  return @comments
end

#sizesObject

Lazily fetches the photo’s sizes when called, memoizes so later calls are faster…



29
30
31
# File 'lib/flickry/photo.rb', line 29

def sizes
  @sizes ||= Flickry::Sizes.new(flickr.photos.getSizes(:photo_id => self.photo_id))
end

#tag_list(separator = ', ') ⇒ Object

Join tags into a single string



50
51
52
# File 'lib/flickry/photo.rb', line 50

def tag_list(separator = ', ')
  self.tags.join(separator)
end

#visible_to_family?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/flickry/photo.rb', line 54

def visible_to_family?
  self.visibility.isfamily == 1
end

#visible_to_friends?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/flickry/photo.rb', line 58

def visible_to_friends?
  self.visibility.isfriend == 1
end

#visible_to_public?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/flickry/photo.rb', line 62

def visible_to_public?
  self.visibility.ispublic == 1
end