Module: ActivityFeed::Feed
- Included in:
- ActivityFeed
- Defined in:
- lib/activity_feed/feed.rb
Instance Method Summary collapse
-
#expire_feed(user_id, seconds, aggregate = ActivityFeed.aggregate) ⇒ Object
Expire an activity feed after a set number of seconds.
-
#expire_feed_at(user_id, timestamp, aggregate = ActivityFeed.aggregate) ⇒ Object
Expire an activity feed at a given timestamp.
-
#feed(user_id, page, aggregate = ActivityFeed.aggregate) ⇒ Object
Retrieve a page from the activity feed for a given
user_id
. -
#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 astarting_timestamp
and anending_timestamp
. -
#full_feed(user_id, aggregate = ActivityFeed.aggregate) ⇒ Object
Retrieve the entire activity feed for a given
user_id
. -
#remove_feeds(user_id) ⇒ Object
Remove the activity feeds for a given
user_id
. -
#total_items_in_feed(user_id, aggregate = ActivityFeed.aggregate) ⇒ Object
(also: #total_items)
Return the total number of items in the activity feed.
-
#total_pages_in_feed(user_id, aggregate = ActivityFeed.aggregate, page_size = ActivityFeed.page_size) ⇒ Object
(also: #total_pages)
Return the total number of pages in the activity feed.
-
#trim_feed(user_id, starting_timestamp, ending_timestamp, aggregate = ActivityFeed.aggregate) ⇒ Object
Trim an activity feed between two timestamps.
Instance Method Details
#expire_feed(user_id, seconds, aggregate = ActivityFeed.aggregate) ⇒ Object
Expire an activity feed after a set number of seconds.
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.
141 142 143 |
# File 'lib/activity_feed/feed.rb', line 141 def expire_feed_at(user_id, , aggregate = ActivityFeed.aggregate) ActivityFeed.redis.expireat(ActivityFeed.feed_key(user_id, aggregate), ) 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.
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.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/activity_feed/feed.rb', line 66 def (user_id, , , aggregate = ActivityFeed.aggregate) feederboard = ActivityFeed.feederboard_for(user_id, aggregate) feed = feederboard.members_from_score_range(, ).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.
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
.
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.
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.
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.
123 124 125 |
# File 'lib/activity_feed/feed.rb', line 123 def trim_feed(user_id, , , aggregate = ActivityFeed.aggregate) ActivityFeed.feederboard_for(user_id, aggregate).remove_members_in_score_range(, ) end |