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