require "picasa/api/base" module Picasa module API class Comment < Base # Returns comment list - when album_id is not specified, list of user comments will be returned # # @param [Hash] options additional options included in request # @option options [String] :album_id retrieve comments for given album # @option options [String] :photo_id retrieve comments for given photo (album_id must be provided) # # @return [Presenter::CommentList] def list(options = {}) album_id = options.delete(:album_id) photo_id = options.delete(:photo_id) raise(ArgumentError, "You must specify album_id when providing photo_id") if photo_id && !album_id path = "/data/feed/api/user/#{user_id}" path << "/albumid/#{album_id}" if album_id path << "/photoid/#{photo_id}" if photo_id uri = URI.parse(path) response = Connection.new.get(:path => uri.path, :query => options.merge(:kind => "comment"), :headers => auth_header) Presenter::CommentList.new(MultiXml.parse(response.body)["feed"]) end # Creates a comment for a photo. # # @param [Hash] # @option options [String] :album_id id of album # @option options [String] :photo_id id of photo # @option options [String] :content name of tag # # @return [Presenter::Tag] def create(params = {}) album_id = params.delete(:album_id) || raise(ArgumentError, "You must specify album_id") photo_id = params.delete(:photo_id) || raise(ArgumentError, "You must specify photo_id") params[:content] || raise(ArgumentError, "You must specify content") path = "/data/feed/api/user/#{user_id}/albumid/#{album_id}/photoid/#{photo_id}" template = Template.new("new_comment", params) uri = URI.parse(path) response = Connection.new.post(:path => uri.path, :body => template.render, :headers => auth_header) Presenter::Comment.new(MultiXml.parse(response.body)["entry"]) end # Removes a comment from given photo. # # @param [String] comment_id comment id # @param [Hash] # @option options [String] :album_id id of album # @option options [String] :photo_id id of photo # # @return [true] def destroy(comment_id, params = {}) album_id = params.delete(:album_id) || raise(ArgumentError, "You must specify album_id") photo_id = params.delete(:photo_id) || raise(ArgumentError, "You must specify photo_id") uri = URI.parse("/data/entry/api/user/#{user_id}/albumid/#{album_id}/photoid/#{photo_id}/commentid/#{comment_id}") Connection.new.delete(:path => uri.path, :headers => auth_header) true end alias :delete :destroy end end end