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

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.



132
133
134
# File 'lib/activity_feed/feed.rb', line 132

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.



141
142
143
# File 'lib/activity_feed/feed.rb', line 141

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.item_loader with a Proc to retrieve an item 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
18
19
20
21
22
23
24
25
26
27
# File 'lib/activity_feed/feed.rb', line 13

def feed(user_id, page, aggregate = ActivityFeed.aggregate)
  feederboard = ActivityFeed.feederboard_for(user_id, aggregate)
  feed = feederboard.leaders(page, :page_size => ActivityFeed.page_size).inject([]) do |feed_items, feed_item|
    item = if ActivityFeed.item_loader
      ActivityFeed.item_loader.call(feed_item[:member])
    else
      feed_item[:member]
    end

    feed_items << item unless item.nil?
    feed_items
  end

  feed.nil? ? [] : feed
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.item_loader with a Proc to retrieve an item 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.



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/activity_feed/feed.rb', line 66

def feed_between_timestamps(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate)
  feederboard = ActivityFeed.feederboard_for(user_id, aggregate)
  feed = feederboard.members_from_score_range(starting_timestamp, ending_timestamp).inject([]) do |feed_items, feed_item|
    item = if ActivityFeed.item_loader
      ActivityFeed.item_loader.call(feed_item[:member])
    else
      feed_item[:member]
    end

    feed_items << item unless item.nil?
    feed_items
  end

  feed.nil? ? [] : feed
end

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

Retrieve the entire activity feed for a given user_id. You can configure ActivityFeed.item_loader with a Proc to retrieve an item 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.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/activity_feed/feed.rb', line 38

def full_feed(user_id, aggregate = ActivityFeed.aggregate)
  feederboard = ActivityFeed.feederboard_for(user_id, aggregate)
  feed = feederboard.leaders(1, :page_size => feederboard.total_members).inject([]) do |feed_items, feed_item|
    item = if ActivityFeed.item_loader
      ActivityFeed.item_loader.call(feed_item[:member])
    else
      feed_item[:member]
    end

    feed_items << item unless item.nil?
    feed_items
  end

  feed.nil? ? [] : feed
end

#remove_feeds(user_id) ⇒ Object

Remove the activity feeds for a given user_id.

Parameters:

  • user_id (String)

    User ID.



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

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.



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

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.



89
90
91
# File 'lib/activity_feed/feed.rb', line 89

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.



123
124
125
# File 'lib/activity_feed/feed.rb', line 123

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