lib/twitter/user.rb in twitter-5.4.1 vs lib/twitter/user.rb in twitter-5.5.0
- old
+ new
@@ -1,13 +1,17 @@
+require 'addressable/uri'
+require 'memoizable'
require 'twitter/basic_user'
require 'twitter/creatable'
+require 'twitter/entity/uri'
+require 'twitter/profile'
module Twitter
class User < Twitter::BasicUser
- PROFILE_IMAGE_SUFFIX_REGEX = /_normal(\.gif|\.jpe?g|\.png)$/i
- PREDICATE_URI_METHOD_REGEX = /_uri\?$/
include Twitter::Creatable
+ include Twitter::Profile
+ include Memoizable
attr_reader :connections, :contributors_enabled, :default_profile,
:default_profile_image, :description, :favourites_count,
:follow_request_sent, :followers_count, :friends_count,
:geo_enabled, :is_translator, :lang, :listed_count, :location,
:name, :notifications, :profile_background_color,
@@ -26,116 +30,33 @@
object_attr_reader :Tweet, :status, :user
alias_method :tweet, :status
alias_method :tweet?, :status?
alias_method :tweeted?, :status?
- class << self
- private
-
- def alias_predicate_uri_methods(method)
- %w(_url? _uri_https? _url_https?).each do |replacement|
- alias_method_sub(method, PREDICATE_URI_METHOD_REGEX, replacement)
- end
- end
-
- def alias_method_sub(method, pattern, replacement)
- alias_method(method.to_s.sub(pattern, replacement).to_sym, method)
- end
- end
-
# @return [Array<Twitter::Entity::URI>]
def description_uris
Array(@attrs[:entities][:description][:urls]).map do |entity|
Entity::URI.new(entity)
end
end
memoize :description_uris
alias_method :description_urls, :description_uris
- # Return the URL to the user's profile banner image
- #
- # @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
- # @return [String]
- def profile_banner_uri(size = :web)
- parse_encoded_uri(insecure_uri([@attrs[:profile_banner_url], size].join('/'))) if @attrs[:profile_banner_url]
- end
- alias_method :profile_banner_url, :profile_banner_uri
-
- # Return the secure URL to the user's profile banner image
- #
- # @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
- # @return [String]
- def profile_banner_uri_https(size = :web)
- parse_encoded_uri([@attrs[:profile_banner_url], size].join('/')) if @attrs[:profile_banner_url]
- end
- alias_method :profile_banner_url_https, :profile_banner_uri_https
-
- # @return [Boolean]
- def profile_banner_uri?
- !!@attrs[:profile_banner_url]
- end
- memoize :profile_banner_uri?
- alias_predicate_uri_methods :profile_banner_uri?
-
- # Return the URL to the user's profile image
- #
- # @param size [String, Symbol] The size of the image. Must be one of: 'mini', 'normal', 'bigger' or 'original'
- # @return [String]
- def profile_image_uri(size = :normal)
- parse_encoded_uri(insecure_uri(profile_image_uri_https(size))) if @attrs[:profile_image_url_https]
- end
- alias_method :profile_image_url, :profile_image_uri
-
- # Return the secure URL to the user's profile image
- #
- # @param size [String, Symbol] The size of the image. Must be one of: 'mini', 'normal', 'bigger' or 'original'
- # @return [String]
- def profile_image_uri_https(size = :normal)
- # The profile image URL comes in looking like like this:
- # https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png
- # It can be converted to any of the following sizes:
- # https://a0.twimg.com/profile_images/1759857427/image1326743606.png
- # https://a0.twimg.com/profile_images/1759857427/image1326743606_mini.png
- # https://a0.twimg.com/profile_images/1759857427/image1326743606_bigger.png
- parse_encoded_uri(@attrs[:profile_image_url_https].sub(PROFILE_IMAGE_SUFFIX_REGEX, profile_image_suffix(size))) if @attrs[:profile_image_url_https]
- end
- alias_method :profile_image_url_https, :profile_image_uri_https
-
- def profile_image_uri?
- !!@attrs[:profile_image_url_https]
- end
- memoize :profile_image_uri?
- alias_predicate_uri_methods :profile_image_uri?
-
# @return [String] The URL to the user.
def uri
- Addressable::URI.parse("https://twitter.com/#{screen_name}")
+ Addressable::URI.parse("https://twitter.com/#{screen_name}") unless screen_name.nil?
end
memoize :uri
alias_method :url, :uri
# @return [String] The URL to the user's website.
def website
- Addressable::URI.parse(@attrs[:url]) if @attrs[:url]
+ Addressable::URI.parse(@attrs[:url]) unless @attrs[:url].nil?
end
memoize :website
def website?
!!@attrs[:url]
end
memoize :website?
-
- private
-
- def parse_encoded_uri(uri)
- Addressable::URI.parse(URI.encode(uri))
- end
-
- def insecure_uri(uri)
- uri.to_s.sub(/^https/i, 'http')
- end
-
- def profile_image_suffix(size)
- :original == size.to_sym ? '\\1' : "_#{size}\\1"
- end
end
end