acts_as_stream 0.0.3.alpha.2 → 0.0.3.alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,26 +1,35 @@
1
1
  module ActsAsStream
2
2
  module Connector
3
3
 
4
- def register_new_activity! package = nil
4
+ def register_new_activity! package = nil, key = nil
5
5
  return if package.nil?
6
6
  id = increment!
7
7
  ActsAsStream.redis.multi do
8
+ time = Time.now.to_f
8
9
  #Add the key and package to the system
9
10
  ActsAsStream.redis.set "#{base_key}:#{id}", package
10
11
  #Add the id to a sorted set scored by time
11
- ActsAsStream.redis.zadd "#{base_key}:sorted", Time.now.to_f, id
12
+ ActsAsStream.redis.zadd "#{base_key}:sorted", time, id
13
+ if key.present?
14
+ ActsAsStream.redis.zadd key, time, id
15
+ end
12
16
  end
13
17
  id
14
18
  end
15
19
 
16
- def deregister_activity! ident
20
+ def deregister_activity! ident, key = nil, mentions_key = nil
17
21
  return if ident.nil?
18
22
  ActsAsStream.redis.multi do
19
23
  ActsAsStream.redis.del "#{base_key}:#{ident}"
20
24
  ActsAsStream.redis.zrem "#{base_key}:sorted", ident
25
+ if key.present?
26
+ ActsAsStream.redis.zrem key, ident
27
+ end
21
28
  end
22
29
  deregister_followers! ident
23
- deregister_mentioned! ident
30
+ if mentions_key.present?
31
+ deregister_mentioned! ident, mentions_key
32
+ end
24
33
  end
25
34
 
26
35
  def register_followers! options = {}
@@ -50,18 +59,23 @@ module ActsAsStream
50
59
  end
51
60
 
52
61
  def register_mentions! options = {}
53
- options.assert_valid_keys(:mentioned_keys, :activity_id)
62
+ options.assert_valid_keys(:mentioned_keys, :activity_id, :key)
54
63
  return if options[:mentioned_keys].nil? or options[:activity_id].nil?
55
64
  raise ":mentioned_keys must be an array of keys" if not options[:mentioned_keys].is_a? Array
65
+ time = Time.now.to_f
56
66
  ActsAsStream.redis.multi do
57
67
  options[:mentioned_keys].each do |key|
58
- ActsAsStream.redis.zadd key, Time.now.to_f, options[:activity_id]
68
+ ActsAsStream.redis.zadd key, time, options[:activity_id]
59
69
  ActsAsStream.redis.lpush "#{base_key}:mentions:#{options[:activity_id]}", key
60
70
  end
71
+ if options[:key].present?
72
+ ActsAsStream.redis.zadd options[:key], time, options[:activity_id]
73
+ end
61
74
  end
75
+ time
62
76
  end
63
77
 
64
- def deregister_mentioned! activity_id = nil
78
+ def deregister_mentioned! activity_id = nil, key = nil
65
79
  return if activity_id.nil?
66
80
  mentioned_key = "#{base_key}:mentions:#{activity_id}"
67
81
  return if mentioned_key.nil?
@@ -73,26 +87,27 @@ module ActsAsStream
73
87
  ActsAsStream.redis.zrem f, activity_id
74
88
  end
75
89
  ActsAsStream.redis.del "#{base_key}:mentions:#{activity_id}"
90
+ ActsAsStream.redis.zrem key, activity_id
76
91
  end
77
92
  end
78
93
 
79
- def get_activity_for follower_key, options = {}
94
+ def get_activity_for key, options = {}
95
+ offsets = get_offsets({:key => key}.merge options)
96
+ ActsAsStream.redis.zrevrange(key, offsets[:start], offsets[:end], :with_scores => false).map{|i| get_activity i}
97
+ end
98
+
99
+ def get_offsets(options = {})
80
100
  options = {:page => 1, :page_size => ActsAsStream.page_size}.merge options
81
101
  options[:page] = 1 if options[:page] < 1
82
102
 
83
- if options[:page] > total_pages(follower_key, options[:page_size])
84
- options[:page] = total_pages(follower_key, options[:page_size])
103
+ if options[:page] > total_pages(options[:key], options[:page_size])
104
+ options[:page] = total_pages(options[:key], options[:page_size])
85
105
  end
86
106
 
87
107
  starting_offset = ((options[:page] - 1) * options[:page_size])
88
108
  starting_offset = 0 if starting_offset < 0
89
109
  ending_offset = (starting_offset + options[:page_size]) - 1
90
-
91
- ActsAsStream.redis.zrevrange(follower_key, starting_offset, ending_offset, :with_scores => false).map{|i| get_activity i}
92
- end
93
-
94
- def get_activity_since follower_key, since = 2.days.ago
95
-
110
+ {:start => starting_offset, :end => ending_offset}
96
111
  end
97
112
 
98
113
  def get_activity id
@@ -30,5 +30,14 @@ module ActsAsStream
30
30
  # then, if everything is fine, bundle it up into a JSON string
31
31
  opts.to_json
32
32
  end
33
+
34
+ def parse package
35
+ package = JSON.parse(package)
36
+ package.keys.each{|k| package[k.to_sym] = package[k]; package.delete(k)}
37
+ package[:who].keys.each{|k| package[:who] = k.titleize.constantize.find(package[:who][k]["id"].to_i)}
38
+ package[:object].keys.each{|k| package[:object] = k.titleize.constantize.find(package[:object][k]["id"].to_i)}
39
+ package
40
+ end
41
+
33
42
  end
34
43
  end
@@ -8,7 +8,12 @@ module ActsAsStream
8
8
  module ClassMethods
9
9
 
10
10
  def acts_as_stream options = {}
11
- cattr_accessor :activity_scope, :activity_attr, :activity_key_base, :followers_attr, :mentions_scope
11
+ cattr_accessor :activity_scope,
12
+ :activity_attr,
13
+ :activity_key_base,
14
+ :followers_attr,
15
+ :mentions_scope,
16
+ :mentions_key_base
12
17
  self.activity_scope = options[:activity_scope] || ActsAsStream.activity_scope
13
18
  self.mentions_scope = options[:mentions_scope] || ActsAsStream.mentions_scope
14
19
  self.activity_attr = options[:activity_attr] || ActsAsStream.activity_attr
@@ -16,6 +21,7 @@ module ActsAsStream
16
21
  self.followers_attr = options[:followers_attr] || :all_followers
17
22
  send :include, ActsAsStream::StreamableObject::InstanceMethods
18
23
  unless options[:ignore_mentions]
24
+ self.mentions_key_base = "#{ActsAsStream.namespace}:#{self.mentions_scope}"
19
25
  send :include, ActsAsStream::StreamableObject::MentionsMethods
20
26
  end
21
27
  end
@@ -27,22 +33,23 @@ module ActsAsStream
27
33
  {self.class.name.tableize.singularize => {'id' => self.id, activity_attr.to_s => self.send(activity_attr)}}
28
34
  end
29
35
  def streamable_object_id
30
- self.send(self.class.activity_attr)
36
+ "#{self.class.name.tableize.singularize}:#{self.send(self.class.activity_attr)}"
31
37
  end
32
38
  def activity_key
33
- "#{self.class.activity_key_base}:#{streamable_object_id}"
39
+ "#{self.class.activity_key_base}:by:#{streamable_object_id}"
34
40
  end
35
41
  def following_key
36
- "#{ActsAsStream.namespace}:#{self.class.name.tableize.singularize}:#{streamable_object_id}:#{activity_scope}"
42
+ "#{self.class.activity_key_base}:for:#{streamable_object_id}"
37
43
  end
38
44
  def register_activity! package
39
- act_id = ActsAsStream.register_new_activity! package
45
+ act_id = ActsAsStream.register_new_activity! package, activity_key
40
46
  self.register_followers! act_id
41
47
  act_id
42
48
  end
43
49
 
44
50
  def delete_activity act_id
45
- ActsAsStream.deregister_activity! act_id
51
+ ActsAsStream.deregister_activity! act_id, activity_key
52
+ ActsAsStream.deregister_mentions! act_id, mentions_key if respond_to? mentions_key
46
53
  end
47
54
 
48
55
  def register_followers! act_id
@@ -60,22 +67,28 @@ module ActsAsStream
60
67
  ActsAsStream.package options
61
68
  end
62
69
 
63
- def get_activity options = {}
64
- if options == :all
65
- ActsAsStream.get_activity_for following_key,
66
- :page_size => activity_count,
67
- :page => 1
68
- elsif options[:since]
69
- time = options[:since]
70
-
71
- else
72
- options = {:page_size => ActsAsStream.page_size, :page => 1}.merge options
73
- ActsAsStream.get_activity_for following_key, :page_size => options[:page_size], :page => options[:page]
74
- end
70
+ def get_activity_for(options = {})
71
+ options = {:whom => :others}.merge options
72
+ self.send("get_#{options[:whom]}_activity", options)
73
+ end
74
+ def get_own_activity(options = {})
75
+ options[:key] = activity_key
76
+ get_activity options
77
+ end
78
+ def get_others_activity(options = {})
79
+ options[:key] = following_key
80
+ get_activity options
75
81
  end
82
+ def activity_count since=nil
83
+ since ||= self.created_at.to_i
84
+ ActsAsStream.redis.zcount following_key, "(#{since}", "+inf"
85
+ end
86
+ private
76
87
 
77
- def activity_count
78
- ActsAsStream.redis.zcard following_key
88
+ def get_activity(options = {})
89
+ options[:page_size] = activity_count if options[:all] and activity_count > 0
90
+ options = {:page_size => ActsAsStream.page_size, :page => 1}.merge options
91
+ ActsAsStream.get_activity_for options[:key], :page_size => options[:page_size], :page => options[:page]
79
92
  end
80
93
 
81
94
  end
@@ -83,11 +96,36 @@ module ActsAsStream
83
96
  module MentionsMethods
84
97
  def register_mentions!(options = {})
85
98
  options[:mentioned_keys] = [options[:mentioned_keys]] unless options[:mentioned_keys].is_a?(Array)
86
- ActsAsStream.register_mentions! :mentioned_keys => options[:mentioned_keys], :activity_id => options[:activity_id]
99
+ ActsAsStream.register_mentions! options
100
+ end
101
+ def mentioned_by_others_key
102
+ "#{self.class.mentions_key_base}:of:#{streamable_object_id}"
87
103
  end
88
104
  def mentions_key
89
- "#{ActsAsStream.namespace}:#{self.class.name.tableize.singularize}:#{streamable_object_id}:#{mentions_scope}"
105
+ "#{self.class.mentions_key_base}:by:#{streamable_object_id}"
106
+ end
107
+ def mentions_count since = nil
108
+ since ||= 0
109
+ ActsAsStream.redis.zcount mentioned_by_others_key, "(#{since}", "+inf"
90
110
  end
111
+ def get_mentions_activity(options = {})
112
+ options[:key] = mentioned_by_others_key
113
+ get_activity options
114
+ end
115
+ def get_own_mentions_activity(options = {})
116
+ options[:key] = mentions_key
117
+ get_activity options
118
+ end
119
+
120
+ private
121
+
122
+ def get_mentions(options = {})
123
+ options[:page_size] = mentions_count if options[:all]
124
+ options = {:page_size => ActsAsStream.page_size, :page => 1}.merge options
125
+ ActsAsStream.get_activity_for options[:key], :page_size => options[:page_size], :page => options[:page]
126
+ end
127
+
128
+
91
129
  end
92
130
  end
93
131
  end
@@ -1,3 +1,3 @@
1
1
  module ActsAsStream
2
- VERSION = "0.0.3.alpha.2"
2
+ VERSION = "0.0.3.alpha.6"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_stream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.alpha.2
4
+ version: 0.0.3.alpha.6
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-15 00:00:00.000000000 Z
12
+ date: 2012-03-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70342865651640 !ruby/object:Gem::Requirement
16
+ requirement: &70193007625380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70342865651640
24
+ version_requirements: *70193007625380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redis
27
- requirement: &70342865651060 !ruby/object:Gem::Requirement
27
+ requirement: &70193007624560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70342865651060
35
+ version_requirements: *70193007624560
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sqlite3
38
- requirement: &70342865650140 !ruby/object:Gem::Requirement
38
+ requirement: &70193007623860 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70342865650140
46
+ version_requirements: *70193007623860
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: acts_as_amico
49
- requirement: &70342865649360 !ruby/object:Gem::Requirement
49
+ requirement: &70193007622960 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70342865649360
57
+ version_requirements: *70193007622960
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec-rails
60
- requirement: &70342865648560 !ruby/object:Gem::Requirement
60
+ requirement: &70193007622120 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70342865648560
68
+ version_requirements: *70193007622120
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: spork
71
- requirement: &70342865663040 !ruby/object:Gem::Requirement
71
+ requirement: &70193007620420 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.9.0.rc
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70342865663040
79
+ version_requirements: *70193007620420
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: guard-rspec
82
- requirement: &70342865662280 !ruby/object:Gem::Requirement
82
+ requirement: &70193007636080 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70342865662280
90
+ version_requirements: *70193007636080
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: guard-spork
93
- requirement: &70342865661640 !ruby/object:Gem::Requirement
93
+ requirement: &70193007635340 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70342865661640
101
+ version_requirements: *70193007635340
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: factory_girl_rails
104
- requirement: &70342865660340 !ruby/object:Gem::Requirement
104
+ requirement: &70193007634780 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70342865660340
112
+ version_requirements: *70193007634780
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: simplecov
115
- requirement: &70342865659380 !ruby/object:Gem::Requirement
115
+ requirement: &70193007633440 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70342865659380
123
+ version_requirements: *70193007633440
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: fakeweb
126
- requirement: &70342865658460 !ruby/object:Gem::Requirement
126
+ requirement: &70193007632400 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70342865658460
134
+ version_requirements: *70193007632400
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: uuidtools
137
- requirement: &70342865657200 !ruby/object:Gem::Requirement
137
+ requirement: &70193007631020 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,7 +142,7 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70342865657200
145
+ version_requirements: *70193007631020
146
146
  description: Rails injectable Redis-backed activity stream system. This is an alpha
147
147
  release of code that I just wrote and put into production on 3/11/12. Send feedback
148
148
  and post bugs to the Github page, but use at your own risk!
@@ -161,7 +161,7 @@ files:
161
161
  - MIT-LICENSE
162
162
  - Rakefile
163
163
  - README.md
164
- homepage: http://github.com/mettadore/acts_as_stream.git
164
+ homepage: http://github.com/mettadore/acts_as_stream
165
165
  licenses: []
166
166
  post_install_message:
167
167
  rdoc_options: []