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