lib/activity_feed.rb in activity_feed-1.1.1 vs lib/activity_feed.rb in activity_feed-1.2
- old
+ new
@@ -8,10 +8,12 @@
module ActivityFeed
mattr_accessor :redis
mattr_accessor :namespace
mattr_accessor :key
mattr_accessor :persistence
+ mattr_accessor :aggregate_key
+ mattr_accessor :aggregate
def self.persistence=(type = :memory)
@@persistence_type = type
case type
@@ -32,16 +34,29 @@
end
@@persistence = klazz
end
- def self.create_item(attributes)
+ def self.create_item(attributes, aggregate = ActivityFeed.aggregate)
item = @@persistence.new(attributes)
item.save
- item
+ ActivityFeed.aggregate_item(item) if aggregate
+ item
end
+ def self.aggregate_item(item, user_id = nil)
+ user_id_for_aggregate = user_id.nil? ? item.user_id : user_id
+ case @@persistence_type
+ when :active_record, :mongo_mapper
+ ActivityFeed.redis.zadd(ActivityFeed.feed_key(user_id_for_aggregate, true), item.created_at.to_i, item.id)
+ when :ohm
+ ActivityFeed.redis.zadd(ActivityFeed.feed_key(user_id_for_aggregate, true), DateTime.parse(item.created_at).to_i, item.id)
+ else
+ ActivityFeed.redis.zadd(ActivityFeed.feed_key(user_id_for_aggregate, true), DateTime.now.to_i, item.attributes.to_json)
+ end
+ end
+
def self.load_item(item_or_item_id)
case @@persistence_type
when :active_record
ActivityFeed::ActiveRecord::Item.find(item_or_item_id)
when :memory
@@ -53,9 +68,19 @@
else
@@persistence.find(item_or_item_id)
end
end
+ def self.feed_key(user_id, aggregate = false)
+ if aggregate
+ "#{ActivityFeed.namespace}:#{ActivityFeed.key}:#{ActivityFeed.aggregate_key}:#{user_id}"
+ else
+ "#{ActivityFeed.namespace}:#{ActivityFeed.key}:#{user_id}"
+ end
+ end
+
self.namespace = 'activity'
self.key = 'feed'
+ self.aggregate_key = 'aggregate'
+ self.aggregate = true
self.persistence = :memory
end