class Socialcast::CommandLine::ProvisionPhoto::ApiSyncStrategy

Constants

MAX_BATCH_SIZE

Attributes

http_config[R]
provisioner[R]

Public Class Methods

new(provisioner) click to toggle source
# File lib/socialcast/command_line/provision_photo.rb, line 110
def initialize(provisioner)
  @provisioner = provisioner
end

Public Instance Methods

batch_size() click to toggle source
# File lib/socialcast/command_line/provision_photo.rb, line 127
def batch_size
  MAX_BATCH_SIZE
end
process(user_photos, options = {}) click to toggle source
# File lib/socialcast/command_line/provision_photo.rb, line 114
def process(user_photos, options = {})
  @http_config = options[:http_config]
  @force_sync = options[:force_sync]

  search_users_resource = Socialcast::CommandLine.resource_for_path '/api/users/search', http_config
  user_emails_query = user_photos.map { |email, _| "\"#{email}\"" }.join(" OR ")
  user_search_response = search_users_resource.get(:params => { :q => user_emails_query, :per_page => batch_size }, :accept => :json)
  JSON.parse(user_search_response)['users'].each do |user_hash|
    email = user_hash['contact_info']['email']
    sync_photo(user_hash, user_photos[email])
  end
end

Private Instance Methods

force_sync?() click to toggle source
# File lib/socialcast/command_line/provision_photo.rb, line 152
def force_sync?
  !!@force_sync
end
log(message) click to toggle source
# File lib/socialcast/command_line/provision_photo.rb, line 156
def log(message)
  provisioner.send(:log, message)
end
sync_photo(user_hash, profile_photo_data) click to toggle source
# File lib/socialcast/command_line/provision_photo.rb, line 133
def sync_photo(user_hash, profile_photo_data)
  is_system_default = user_hash && user_hash['avatars'] && user_hash['avatars']['is_system_default']
  is_community_default = user_hash && user_hash['avatars'] && (user_hash['avatars']['id'] == provisioner.default_profile_photo_id)
  user_email = user_hash && user_hash['contact_info'] && user_hash['contact_info']['email']
  return unless is_system_default || is_community_default || force_sync?

  log "Syncing photo for #{user_email}"

  if profile_photo_data && file = provisioner.photo_data_to_file(profile_photo_data)
    begin
      log "Uploading photo for #{user_email}"
      user_resource = Socialcast::CommandLine.resource_for_path "/api/users/#{user_hash['id']}", http_config
      user_resource.put({ :user => { :profile_photo => { :data => file } } })
    ensure
      file.unlink
    end
  end
end