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