module ActivityFeed::Feed

Public Instance Methods

between(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate)
expire_at(user_id, timestamp, aggregate = ActivityFeed.aggregate)
Alias for: expire_feed_at
expire_feed(user_id, seconds, aggregate = ActivityFeed.aggregate) click to toggle source

Expire an activity feed after a set number of seconds.

@param user_id [String] User ID. @param seconds [int] Number of seconds after which the activity feed will be expired. @param aggregate [boolean, false] Whether or not to expire the aggregate activity feed or not.

# File lib/activity_feed/feed.rb, line 119
def expire_feed(user_id, seconds, aggregate = ActivityFeed.aggregate)
  ActivityFeed.redis.expire(ActivityFeed.feed_key(user_id, aggregate), seconds)
end
Also aliased as: expire_in, expire_feed_in
expire_feed_at(user_id, timestamp, aggregate = ActivityFeed.aggregate) click to toggle source

Expire an activity feed at a given timestamp.

@param user_id [String] User ID. @param timestamp [int] Timestamp after which the activity feed will be expired. @param aggregate [boolean, false] Whether or not to expire the aggregate activity feed or not.

# File lib/activity_feed/feed.rb, line 131
def expire_feed_at(user_id, timestamp, aggregate = ActivityFeed.aggregate)
  ActivityFeed.redis.expireat(ActivityFeed.feed_key(user_id, aggregate), timestamp)
end
Also aliased as: expire_at
expire_feed_in(user_id, seconds, aggregate = ActivityFeed.aggregate)
Alias for: expire_feed
expire_in(user_id, seconds, aggregate = ActivityFeed.aggregate)
Alias for: expire_feed
feed(user_id, page, aggregate = ActivityFeed.aggregate) click to toggle source

Retrieve a page from the activity feed for a given user_id. You can configure ActivityFeed.items_loader with a Proc to retrieve items from, for example, your ORM (e.g. ActiveRecord) or your ODM (e.g. Mongoid), and have the page returned with loaded items rather than item IDs.

@param user_id [String] User ID. @param page [int] Page in the feed to be retrieved. @param aggregate [boolean, false] Whether to retrieve the aggregate feed for user_id.

@return page from the activity feed for a given user_id.

# File lib/activity_feed/feed.rb, line 13
def feed(user_id, page, aggregate = ActivityFeed.aggregate)
  feederboard = ActivityFeed.feederboard_for(user_id, aggregate)
  feed_items = feederboard.leaders(page, :page_size => ActivityFeed.page_size)
  load_feed_items(feed_items)
end
Also aliased as: for
feed_between_timestamps(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate) click to toggle source

Retrieve a page from the activity feed for a given user_id between a starting_timestamp and an ending_timestamp. You can configure ActivityFeed.items_loader with a Proc to retrieve items from, for example, your ORM (e.g. ActiveRecord) or your ODM (e.g. Mongoid), and have the feed data returned with loaded items rather than item IDs.

@param user_id [String] User ID. @param starting_timestamp [int] Starting timestamp between which items in the feed are to be retrieved. @param ending_timestamp [int] Ending timestamp between which items in the feed are to be retrieved. @param aggregate [boolean, false] Whether to retrieve items from the aggregate feed for user_id.

@return feed items from the activity feed for a given user_id between the starting_timestamp and ending_timestamp.

# File lib/activity_feed/feed.rb, line 48
def feed_between_timestamps(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate)
  feederboard = ActivityFeed.feederboard_for(user_id, aggregate)
  feed_items = feederboard.members_from_score_range(starting_timestamp, ending_timestamp)
  load_feed_items(feed_items)
end
Also aliased as: between
for(user_id, page, aggregate = ActivityFeed.aggregate)
Alias for: feed
full_feed(user_id, aggregate = ActivityFeed.aggregate) click to toggle source

Retrieve the entire activity feed for a given user_id. You can configure ActivityFeed.items_loader with a Proc to retrieve items from, for example, your ORM (e.g. ActiveRecord) or your ODM (e.g. Mongoid), and have the page returned with loaded items rather than item IDs.

@param user_id [String] User ID. @param aggregate [boolean, false] Whether to retrieve the aggregate feed for user_id.

@return the full activity feed for a given user_id.

# File lib/activity_feed/feed.rb, line 30
def full_feed(user_id, aggregate = ActivityFeed.aggregate)
  feederboard = ActivityFeed.feederboard_for(user_id, aggregate)
  feed_items = feederboard.leaders(1, :page_size => feederboard.total_members)
  load_feed_items(feed_items)
end
remove_feeds(user_id) click to toggle source

Remove the activity feeds for a given user_id.

@param user_id [String] User ID.

# File lib/activity_feed/feed.rb, line 84
def remove_feeds(user_id)
  ActivityFeed.redis.multi do |transaction|
    transaction.del(ActivityFeed.feed_key(user_id, false))
    transaction.del(ActivityFeed.feed_key(user_id, true))
  end
end
total_items(user_id, aggregate = ActivityFeed.aggregate)
Alias for: total_items_in_feed
total_items_in_feed(user_id, aggregate = ActivityFeed.aggregate) click to toggle source

Return the total number of items in the activity feed.

@param user_id [String] User ID. @param aggregate [boolean, false] Whether to check the total number of items in the aggregate activity feed or not.

@return the total number of items in the activity feed.

# File lib/activity_feed/feed.rb, line 75
def total_items_in_feed(user_id, aggregate = ActivityFeed.aggregate)
  ActivityFeed.feederboard_for(user_id, aggregate).total_members
end
Also aliased as: total_items
total_pages(user_id, aggregate = ActivityFeed.aggregate, page_size = ActivityFeed.page_size)
Alias for: total_pages_in_feed
total_pages_in_feed(user_id, aggregate = ActivityFeed.aggregate, page_size = ActivityFeed.page_size) click to toggle source

Return the total number of pages in the activity feed.

@param user_id [String] User ID. @param aggregate [boolean, false] Whether to check the total number of pages in the aggregate activity feed or not. @param page_size [int, ActivityFeed.page_size] Page size to be used in calculating the total number of pages in the activity feed.

@return the total number of pages in the activity feed.

# File lib/activity_feed/feed.rb, line 63
def total_pages_in_feed(user_id, aggregate = ActivityFeed.aggregate, page_size = ActivityFeed.page_size)
  ActivityFeed.feederboard_for(user_id, aggregate).total_pages_in(ActivityFeed.feed_key(user_id, aggregate), page_size)
end
Also aliased as: total_pages
trim(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate)
Alias for: trim_feed
trim_feed(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate) click to toggle source

Trim an activity feed between two timestamps.

@param user_id [String] User ID. @param starting_timestamp [int] Starting timestamp after which activity feed items will be cut. @param ending_timestamp [int] Ending timestamp before which activity feed items will be cut. @param aggregate [boolean, false] Whether or not to trim the aggregate activity feed or not.

# File lib/activity_feed/feed.rb, line 97
def trim_feed(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate)
  ActivityFeed.feederboard_for(user_id, aggregate).remove_members_in_score_range(starting_timestamp, ending_timestamp)
end
Also aliased as: trim
trim_to(user_id, size, aggregate = ActivityFeed.aggregate)
Alias for: trim_to_size
trim_to_size(user_id, size, aggregate = ActivityFeed.aggregate) click to toggle source

Trim an activity feed to a given size.

@param user_id [String] User ID. @param size [int] Number of items to keep in the activity feed. @param aggregate [boolean, false] Whether or not to trim the aggregate activity feed or not.

# File lib/activity_feed/feed.rb, line 108
def trim_to_size(user_id, size, aggregate = ActivityFeed.aggregate)
  ActivityFeed.feederboard_for(user_id, aggregate).remove_members_outside_rank(size)
end
Also aliased as: trim_to

Private Instance Methods

load_feed_items(feed_items) click to toggle source

Load feed items from the ‘ActivityFeed.items_loader` if available, otherwise return the individual members from the feed items.

@param feed_items [Array] Array of hash feed items as ‘[{:member=>“5”, :rank=>1, :score=>1373564960.0}, …]`

@return Array of feed items

# File lib/activity_feed/feed.rb, line 145
def load_feed_items(feed_items)
  feed_item_ids = feed_items.collect { |feed_item| feed_item[:member] }
  if ActivityFeed.items_loader
    ActivityFeed.items_loader.call(feed_item_ids)
  else
    feed_item_ids
  end
end