lib/twitter/user.rb in twitter-4.8.1 vs lib/twitter/user.rb in twitter-5.0.0.rc.1

- old
+ new

@@ -1,110 +1,120 @@ require 'twitter/basic_user' require 'twitter/creatable' -require 'twitter/exceptable' module Twitter class User < Twitter::BasicUser PROFILE_IMAGE_SUFFIX_REGEX = /_normal(\.gif|\.jpe?g|\.png)$/i include Twitter::Creatable - include Twitter::Exceptable 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, :profile_background_image_url, :profile_background_image_url_https, :profile_background_tile, :profile_link_color, :profile_sidebar_border_color, :profile_sidebar_fill_color, :profile_text_color, :profile_use_background_image, :protected, :statuses_count, :time_zone, - :url, :utc_offset, :verified - alias favorite_count favourites_count - alias favoriters_count favourites_count + :utc_offset, :verified alias favorites_count favourites_count - alias favourite_count favourites_count - alias favouriters_count favourites_count - alias follower_count followers_count - alias friend_count friends_count - alias status_count statuses_count - alias translator is_translator - alias translator? is_translator? - alias tweet_count statuses_count + alias profile_background_image_uri profile_background_image_url + alias profile_background_image_uri_https profile_background_image_url_https + alias translator? is_translator alias tweets_count statuses_count - alias update_count statuses_count - alias updates_count statuses_count + object_attr_reader :Tweet, :status, :user + alias tweet status + alias tweet? status? + alias tweeted? status? # @return [Array<Twitter::Entity::Url>] - def description_urls - @description_urls ||= Array(@attrs[:entities][:description][:urls]).map do |entity| - Twitter::Entity::Url.fetch_or_new(entity) + def description_uris + memoize(:description_urls) do + Array(@attrs[:entities][:description][:urls]).map do |entity| + Twitter::Entity::Url.new(entity) + end end end + alias 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_url(size=:web) - insecure_url([@attrs[:profile_banner_url], size].join('/')) if profile_banner_url? + def profile_banner_uri(size=:web) + parse_encoded_uri(insecure_uri([@attrs[:profile_banner_url], size].join('/'))) if @attrs[:profile_banner_url] end + alias 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_url_https(size=:web) - [@attrs[:profile_banner_url], size].join('/') if profile_banner_url? + def profile_banner_uri_https(size=:web) + parse_encoded_uri([@attrs[:profile_banner_url], size].join('/')) if @attrs[:profile_banner_url] end + alias profile_banner_url_https profile_banner_uri_https - def profile_banner_url? - !@attrs[:profile_banner_url].nil? + def profile_banner_uri? + !!@attrs[:profile_banner_url] end - alias profile_banner_url_https? profile_banner_url? + alias profile_banner_url? profile_banner_uri? + alias profile_banner_uri_https? profile_banner_uri? + alias profile_banner_url_https? 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_url(size=:normal) - insecure_url(profile_image_url_https(size)) if profile_image_url? + def profile_image_uri(size=:normal) + parse_encoded_uri(insecure_uri(profile_image_uri_https(size))) if @attrs[:profile_image_url_https] end + alias 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_url_https(size=:normal) + 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 - resize_profile_image_url(@attrs[:profile_image_url_https], size) if profile_image_url? + 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 profile_image_url_https profile_image_uri_https - def profile_image_url? - !@attrs[:profile_image_url_https].nil? + def profile_image_uri? + !!@attrs[:profile_image_url_https] end - alias profile_image_url_https? profile_image_url? + alias profile_image_url? profile_image_uri? + alias profile_image_uri_https? profile_image_uri? + alias profile_image_url_https? profile_image_uri? - # @return [Twitter::Tweet] - def status - @status ||= fetch_or_new_without_self(Twitter::Tweet, @attrs, :status, :user) + # @return [String] The URL to the user. + def uri + @uri ||= ::URI.parse("https://twitter.com/#{screen_name}") end + alias url uri - def status? - !@attrs[:status].nil? + # @return [String] The URL to the user's website. + def website + @website ||= ::URI.parse(@attrs[:url]) if @attrs[:url] end + def website? + !!@attrs[:url] + end + private - def insecure_url(url) - url.sub(/^https/i, 'http') + def parse_encoded_uri(uri) + ::URI.parse(::URI.encode(uri)) end - def resize_profile_image_url(url, size) - url.sub(PROFILE_IMAGE_SUFFIX_REGEX, profile_image_suffix(size)) + def insecure_uri(uri) + uri.to_s.sub(/^https/i, 'http') end def profile_image_suffix(size) if :original == size.to_sym "\\1"