Module: ActivityFeed::Feed

Included in:
ActivityFeed
Defined in:
lib/activity_feed/feed.rb

Instance Method Summary collapse

Instance Method Details

#expire_feed(user_id, seconds, aggregate = ActivityFeed.aggregate) ⇒ Object Also known as: expire_feed_in

Expire an activity feed after a set number of seconds.

Parameters:

  • user_id (String)

    User ID.

  • seconds (int)

    Number of seconds after which the activity feed will be expired.

  • aggregate (boolean, false) (defaults to: ActivityFeed.aggregate)

    Whether or not to expire the aggregate activity feed or not.



102
103
104
# File 'lib/activity_feed/feed.rb', line 102

def expire_feed(user_id, seconds, aggregate = ActivityFeed.aggregate)
  ActivityFeed.redis.expire(ActivityFeed.feed_key(user_id, aggregate), seconds)
end

#expire_feed_at(user_id, timestamp, aggregate = ActivityFeed.aggregate) ⇒ Object

Expire an activity feed at a given timestamp.

Parameters:

  • user_id (String)

    User ID.

  • timestamp (int)

    Timestamp after which the activity feed will be expired.

  • aggregate (boolean, false) (defaults to: ActivityFeed.aggregate)

    Whether or not to expire the aggregate activity feed or not.



113
114
115
# File 'lib/activity_feed/feed.rb', line 113

def expire_feed_at(user_id, timestamp, aggregate = ActivityFeed.aggregate)
  ActivityFeed.redis.expireat(ActivityFeed.feed_key(user_id, aggregate), timestamp)
end

#feed(user_id, page, aggregate = ActivityFeed.aggregate) ⇒ Object

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.

Parameters:

  • user_id (String)

    User ID.

  • page (int)

    Page in the feed to be retrieved.

  • aggregate (boolean, false) (defaults to: ActivityFeed.aggregate)

    Whether to retrieve the aggregate feed for user_id.

Returns:

  • page from the activity feed for a given user_id.



13
14
15
16
17
# 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

#feed_between_timestamps(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate) ⇒ Object

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.

Parameters:

  • user_id (String)

    User ID.

  • starting_timestamp (int)

    Starting timestamp between which items in the feed are to be retrieved.

  • ending_timestamp (int)

    Ending timestamp between which items in the feed are to be retrieved.

  • aggregate (boolean, false) (defaults to: ActivityFeed.aggregate)

    Whether to retrieve items from the aggregate feed for user_id.

Returns:

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



46
47
48
49
50
# File 'lib/activity_feed/feed.rb', line 46

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

#full_feed(user_id, aggregate = ActivityFeed.aggregate) ⇒ Object

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.

Parameters:

  • user_id (String)

    User ID.

  • aggregate (boolean, false) (defaults to: ActivityFeed.aggregate)

    Whether to retrieve the aggregate feed for user_id.

Returns:

  • the full activity feed for a given user_id.



28
29
30
31
32
# File 'lib/activity_feed/feed.rb', line 28

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) ⇒ Object

Remove the activity feeds for a given user_id.

Parameters:

  • user_id (String)

    User ID.



80
81
82
83
84
85
# File 'lib/activity_feed/feed.rb', line 80

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_in_feed(user_id, aggregate = ActivityFeed.aggregate) ⇒ Object Also known as: total_items

Return the total number of items in the activity feed.

Parameters:

  • user_id (String)

    User ID.

  • aggregate (boolean, false) (defaults to: ActivityFeed.aggregate)

    Whether to check the total number of items in the aggregate activity feed or not.

Returns:

  • the total number of items in the activity feed.



71
72
73
# File 'lib/activity_feed/feed.rb', line 71

def total_items_in_feed(user_id, aggregate = ActivityFeed.aggregate)
  ActivityFeed.feederboard_for(user_id, aggregate).total_members
end

#total_pages_in_feed(user_id, aggregate = ActivityFeed.aggregate, page_size = ActivityFeed.page_size) ⇒ Object Also known as: total_pages

Return the total number of pages in the activity feed.

Parameters:

  • user_id (String)

    User ID.

  • aggregate (boolean, false) (defaults to: ActivityFeed.aggregate)

    Whether to check the total number of pages in the aggregate activity feed or not.

  • page_size (int, ActivityFeed.page_size) (defaults to: ActivityFeed.page_size)

    Page size to be used in calculating the total number of pages in the activity feed.

Returns:

  • the total number of pages in the activity feed.



59
60
61
# File 'lib/activity_feed/feed.rb', line 59

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

#trim_feed(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate) ⇒ Object

Trim an activity feed between two timestamps.

Parameters:

  • user_id (String)

    User ID.

  • starting_timestamp (int)

    Starting timestamp after which activity feed items will be cut.

  • ending_timestamp (int)

    Ending timestamp before which activity feed items will be cut.

  • aggregate (boolean, false) (defaults to: ActivityFeed.aggregate)

    Whether or not to trim the aggregate activity feed or not.



93
94
95
# File 'lib/activity_feed/feed.rb', line 93

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