Sha256: 3772cbaaea19015c248dc452fb75da0d9df892e969f1041b14f0620359536d9c

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

module Twitter
  module Cache
    class Wrapper
      include Twitter::Cache::Helpers
      attr_reader :twitter

      def initialize(twitter)
        @twitter = twitter
      end

      def user(id = current_id)
        cache.get(user_key(id), ttl: config.ttl) do
          config.convert_user(twitter.user(id))
        end
      end

      def friend_ids(id = current_id)
        cache.get(friends_key(id), ttl: config.ttl) do
          twitter.friend_ids(id).to_a
        end
      end

      def friends(id = current_id, per: 100, page: 0)
        ids = friend_ids(id)
        case page
        when :rand, :random
          users(ids.sample(per))
        else
          start = per * page
          users(ids[start, per])
        end
      end

      def users(ids)
        users = ids.map { |id| cache.get(user_key(id)) }.compact
        return users if ids.count == users.count
        fetch_users(ids)
      end

      def current_user
        @current_user ||= twitter.current_user
      end

      def current_id
        current_user.id
      end

      protected

      def user_key(id)
        "user:#{id}"
      end

      def friends_key(id)
        "friends:#{id}"
      end

      def fetch_users(ids)
        users = twitter.users(ids).map { |raw| config.convert_user(raw) }
        users.each do |user|
          cache.set(user_key(user.id), user, ttl: config.ttl)
        end
        users
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
twitter-cache-0.2.1 lib/twitter/cache/wrapper.rb
twitter-cache-0.2.0 lib/twitter/cache/wrapper.rb