class Odnoklassniki::REST::Mediatopic::Photoalbum

Constants

ALBUM_CREATION_OPTIONS
ALBUM_NAME
COMMIT_PHOTO_METHOD
CREATE_ALBUM_METHOD
CreationError
Error
FindingError
GET_ALBUMS_METHOD
GET_ALBUM_UPLOAD_URL_METHOD
UploadingError

Attributes

params[RW]

Public Class Methods

new(options) click to toggle source

Options: account: { id: Identifier for account in OK,

type: :group/:personal }

client: Client for specified account

# File lib/odnoklassniki/rest/mediatopic/photoalbum.rb, line 30
def initialize(options)
  @options = Odnoklassniki::Utils._symbolize_keys(options)
  @account = @options[:account]
  @api = @options[:client]
end

Public Instance Methods

upload(photo) click to toggle source
# File lib/odnoklassniki/rest/mediatopic/photoalbum.rb, line 36
def upload(photo)
  upload_photoalbum_photo(photo)
end

Private Instance Methods

commit_uploaded_photo(photo_id, photo_token) click to toggle source
# File lib/odnoklassniki/rest/mediatopic/photoalbum.rb, line 106
def commit_uploaded_photo(photo_id, photo_token)
  params = {method: COMMIT_PHOTO_METHOD, photo_id: photo_id, token: photo_token}
  @api.get(params) do |commit_response|
    commit_response['photos'][0]['assigned_photo_id']
  end
end
create_photoalbum() click to toggle source
# File lib/odnoklassniki/rest/mediatopic/photoalbum.rb, line 83
def create_photoalbum
  return photoalbum['aid'] if photoalbum.present?

  params = {method: CREATE_ALBUM_METHOD}.merge!(ALBUM_CREATION_OPTIONS)
  params.merge!(gid: @account[:id]) if @account[:type] == :group

  @api.get(params)
rescue API::Error
  raise CreationError
end
photoalbum() click to toggle source
# File lib/odnoklassniki/rest/mediatopic/photoalbum.rb, line 71
def photoalbum
  @photoalbum ||= begin
    params = {method: GET_ALBUMS_METHOD}
    params.merge!(gid: @account[:id]) if @account[:type] == :group

    @api.get(params).try(:[], 'albums').to_a
      .find { |album| album['title'] == ALBUM_NAME }
  rescue API::Error
    raise FindingError
  end
end
photoalbum_upload_url() click to toggle source
# File lib/odnoklassniki/rest/mediatopic/photoalbum.rb, line 94
def photoalbum_upload_url
  params = {method: GET_ALBUM_UPLOAD_URL_METHOD}

  if @account[:type] == :group
    params.merge!(gid: @account[:id])
  else
    params.merge!(aid: create_photoalbum)
  end

  @api.get(params) { |json| URI.parse json['upload_url'] }
end
upload_photoalbum_photo(photo) click to toggle source
# File lib/odnoklassniki/rest/mediatopic/photoalbum.rb, line 47
def upload_photoalbum_photo(photo)
  upload_response = ::HttpUploader.new(photoalbum_upload_url)
    .upload(photo.to_io,
            photo.basename,
            query_param: :pic1, content_type: photo.content_type)

  unless Net::HTTPSuccess === upload_response
    raise UploadingError, "Failed to upload file. Reason: #{upload_response.body}"
  end

  photo_id, photo_attributes = JSON.parse(upload_response.body)
    .try(:[], 'photos').try(:flatten)

  if photo_id.blank? || photo_attributes.blank?
    raise UploadingError, "Broken upload response. Response: #{upload_response.body}"
  end

  if @account[:type] == :personal
    commit_uploaded_photo(photo_id, photo_attributes['token'])
  else
    photo_attributes['token']
  end
end