Sha256: afeb859080980bd093eb38aafee9d70177a222d48a6dac5494c2feda8580bf55

Contents?: true

Size: 1.88 KB

Versions: 3

Compression:

Stored size: 1.88 KB

Contents

module Onebox
  module Engine
    class TwitterStatusOnebox
      include Engine
      include LayoutSupport
      include HTML

      matches_regexp Regexp.new("^http(?:s)?://(?:www\\.)?(?:(?:\\w)+\\.)?(twitter)\\.com(?:/)?(?:.)*/status(es)?/")

      private

      def match
        @match ||= @url.match(%r{twitter\.com/.+?/status(es)?/(?<id>\d+)})
      end

      def client
        Onebox.options.twitter_client
      end

      def raw
        if client
          @raw ||= OpenStruct.new(client.status(match[:id]).to_hash)
        else
          super
        end
      end

      def access(*keys)
        keys.reduce(raw) do |memo, key|
          memo[key] || memo[key.to_s]
        end
      end

      def tweet
        if raw.html?
          raw.css(".tweet-text")[0].inner_text
        else
          access(:text)
        end
      end

      def timestamp
        if raw.html?
          raw.css(".metadata span").inner_text
        else
          access(:created_at)
        end
      end

      def title
        if raw.html?
          raw.css(".stream-item-header .username").inner_text
        else
          access(:user, :screen_name)
        end
      end

      def avatar
        if raw.html?
          raw.css(".avatar")[2]["src"]
        else
          access(:user, :profile_image_url)
        end
      end

      def favorites
        if raw.html?
          raw.css(".stats li .request-favorited-popup").inner_text
        else
          access(:favorite_count)
        end
      end

      def retweets
        if raw.html?
          raw.css(".stats li .request-retweeted-popup").inner_text
        else
          access(:retweet_count)
        end
      end

      def data
        { link: link,
          tweet: tweet,
          timestamp: timestamp,
          title: title,
          avatar: avatar,
          favorites: favorites,
          retweets: retweets }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
onebox-1.4.2 lib/onebox/engine/twitter_status_onebox.rb
onebox-1.4.1 lib/onebox/engine/twitter_status_onebox.rb
onebox-1.4.0 lib/onebox/engine/twitter_status_onebox.rb