class SocialMedia::Service::Twitter

Public Class Methods

name() click to toggle source
# File lib/social_media/service/twitter.rb, line 5
def self.name
  :twitter
end

Public Instance Methods

cast_error(error) click to toggle source
# File lib/social_media/service/twitter.rb, line 9
def cast_error error
  return ::SocialMedia::Error::Unauthorized if error.is_a? ::Twitter::Error::Unauthorized
end
client() click to toggle source
# File lib/social_media/service/twitter.rb, line 13
def client
  @client ||= ::Twitter::REST::Client.new do |config|
    config.consumer_key = connection_params[:consumer_key]
    config.consumer_secret = connection_params[:consumer_secret]
    config.access_token = connection_params[:access_token]
    config.access_token_secret = connection_params[:access_token_secret]
  end
end
delete_message(message_id) click to toggle source
# File lib/social_media/service/twitter.rb, line 27
def delete_message message_id
  result = client.destroy_status message_id
  result.first.id
end
remove_profile_avatar() click to toggle source
# File lib/social_media/service/twitter.rb, line 45
def remove_profile_avatar
  raise_not_provided_error
end
remove_profile_cover() click to toggle source
# File lib/social_media/service/twitter.rb, line 36
def remove_profile_cover
  client.remove_profile_banner
end
send_message(message, options={}) click to toggle source
# File lib/social_media/service/twitter.rb, line 22
def send_message message, options={}
  return send_text_message(message, options) unless options.has_key?(:filenames) || options.has_key?(:filename)
  send_multipart_message message, options
end
upload_profile_avatar(filename) click to toggle source
# File lib/social_media/service/twitter.rb, line 40
def upload_profile_avatar filename
  result = client.update_profile_image(open_file filename)
  result.id
end
upload_profile_cover(filename) click to toggle source
# File lib/social_media/service/twitter.rb, line 32
def upload_profile_cover filename
  client.update_profile_banner(open_file filename)
end

Private Instance Methods

open_file(filename) click to toggle source

The Twitter gem is particular about the type of IO object it

recieves when tweeting an image. If an image is < 10kb, Ruby opens it as a
StringIO object. Which is not supported by the Twitter gem/api.

This method ensures we always have a valid IO object for Twitter.
# File lib/social_media/service/twitter.rb, line 56
def open_file filename
  image_file = open(filename)
  return image_file unless image_file.is_a?(StringIO)

  base_name = File.basename(filename)
  temp_file = Tempfile.new(base_name)

  temp_file.binmode
  temp_file.write(image_file.read)
  temp_file.close

  open(temp_file.path)
end
send_multipart_message(message, options) click to toggle source
# File lib/social_media/service/twitter.rb, line 77
def send_multipart_message message, options
  media_ids = Array(options.delete(:filename)).map{ |fn| client.upload open_file(fn) }
  media_ids += Array(options.delete(:filenames)).map{ |fn| client.upload open_file(fn) }
  send_text_message message, options.merge(media_ids: media_ids.join(","))
end
send_text_message(message, options) click to toggle source
# File lib/social_media/service/twitter.rb, line 70
def send_text_message message, options
  handle_error do
    result = client.update(message, options)
    result.id
  end
end