acts_as_stream 0.0.3.alpha.7 → 0.0.4.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@ module ActsAsStream
5
5
  return if package.nil?
6
6
  id = increment!
7
7
  ActsAsStream.redis.multi do
8
- time = Time.now.to_f
8
+ time = Time.now.to_i
9
9
  #Add the key and package to the system
10
10
  ActsAsStream.redis.set "#{base_key}:#{id}", package
11
11
  #Add the id to a sorted set scored by time
@@ -38,15 +38,15 @@ module ActsAsStream
38
38
  raise ":following_keys must be an array of keys" if not options[:following_keys].is_a? Array
39
39
  ActsAsStream.redis.multi do
40
40
  options[:following_keys].each do |key|
41
- ActsAsStream.redis.zadd key, Time.now.to_f, options[:activity_id]
42
- ActsAsStream.redis.lpush "#{base_key}:followers:#{options[:activity_id]}", key
41
+ ActsAsStream.redis.zadd key, Time.now.to_i, options[:activity_id]
42
+ ActsAsStream.redis.lpush "#{base_key}:#{options[:activity_id]}:followers", key
43
43
  end
44
44
  end
45
45
  end
46
46
 
47
47
  def deregister_followers! activity_id = nil
48
48
  return if activity_id.nil?
49
- followers_key = "#{base_key}:followers:#{activity_id}"
49
+ followers_key = "#{base_key}:#{activity_id}:followers"
50
50
  len = ActsAsStream.redis.llen followers_key
51
51
  followers = ActsAsStream.redis.lrange followers_key, 0, len
52
52
  return if followers.nil?
@@ -54,21 +54,19 @@ module ActsAsStream
54
54
  followers.each do |f|
55
55
  ActsAsStream.redis.zrem f, activity_id
56
56
  end
57
- ActsAsStream.redis.del "#{base_key}:followers:#{activity_id}"
57
+ ActsAsStream.redis.del "#{base_key}:#{activity_id}:followers"
58
58
  end
59
59
  end
60
60
 
61
61
  def register_mentions! options = {}
62
62
  options.assert_valid_keys(:mentioned_keys, :activity_id, :key)
63
- return if options[:mentioned_keys].nil? or options[:activity_id].nil?
63
+ raise "Not all arguments present, need all of [:mentioned_keys, :activity_id, :key]" if options[:mentioned_keys].nil? or options[:activity_id].nil? or options[:key].nil?
64
64
  raise ":mentioned_keys must be an array of keys" if not options[:mentioned_keys].is_a? Array
65
- time = Time.now.to_f
65
+ time = Time.now.to_i
66
66
  ActsAsStream.redis.multi do
67
67
  options[:mentioned_keys].each do |key|
68
68
  ActsAsStream.redis.zadd key, time, options[:activity_id]
69
- ActsAsStream.redis.lpush "#{base_key}:mentions:#{options[:activity_id]}", key
70
- end
71
- if options[:key].present?
69
+ ActsAsStream.redis.lpush "#{base_key}:#{options[:activity_id]}:mentions", key
72
70
  ActsAsStream.redis.zadd options[:key], time, options[:activity_id]
73
71
  end
74
72
  end
@@ -76,8 +74,8 @@ module ActsAsStream
76
74
  end
77
75
 
78
76
  def deregister_mentioned! activity_id = nil, key = nil
79
- return if activity_id.nil?
80
- mentioned_key = "#{base_key}:mentions:#{activity_id}"
77
+ raise "Need activity id and a key" if activity_id.nil? or key.nil?
78
+ mentioned_key = "#{base_key}:#{activity_id}:mentions"
81
79
  return if mentioned_key.nil?
82
80
  len = ActsAsStream.redis.llen mentioned_key
83
81
  mentioned = ActsAsStream.redis.lrange mentioned_key, 0, len
@@ -86,7 +84,7 @@ module ActsAsStream
86
84
  mentioned.each do |f|
87
85
  ActsAsStream.redis.zrem f, activity_id
88
86
  end
89
- ActsAsStream.redis.del "#{base_key}:mentions:#{activity_id}"
87
+ ActsAsStream.redis.del "#{base_key}:#{activity_id}:mentions"
90
88
  ActsAsStream.redis.zrem key, activity_id
91
89
  end
92
90
  end
@@ -113,6 +111,9 @@ module ActsAsStream
113
111
  def get_activity id
114
112
  ActsAsStream.redis.get "#{base_key}:#{id}"
115
113
  end
114
+ def get_activity_mentions id
115
+ ActsAsStream.redis.lrange "#{base_key}:#{id}:mentions", 0, -1
116
+ end
116
117
 
117
118
  def total_pages key, page_size = ActsAsStream.page_size
118
119
  (ActsAsStream.redis.zcard(key) / page_size.to_f).ceil
@@ -2,31 +2,24 @@ module ActsAsStream
2
2
  module StreamActivity
3
3
 
4
4
  def package options = {}
5
- options.assert_valid_keys(:who, :action, :time, :object, :ignore_stream_hash_on)
5
+ options.assert_valid_keys(:who, :action, :time, :object)
6
6
  raise "You need at least a :who and an :action! to create an activity package" if options[:who].nil? or options[:action].nil?
7
- opts = {:time => Time.now.to_i, :ignore_stream_hash_on => []}.merge options
7
+ opts = {:time => Time.now.to_i}.merge options
8
8
  # Try to ensure :time is in seconds
9
9
  opts[:time] = opts[:time].to_i if opts[:time].is_a?(Time)
10
10
 
11
- # If Objects provide the :to_stream_hash method, use it.
12
- if opts[:ignore_stream_hash_on].present?
13
- #convenience, make sure it's an array so we can use include? instead of "include? or equals"
14
- opts[:ignore_stream_hash_on] = [opts[:ignore_stream_hash_on]] unless opts[:ignore_stream_hash_on].is_a?(Array)
15
- end
16
-
17
11
  [:who, :object].each do |opt|
18
12
  #unless we are ignoring the stream hash for this object, use StreamableObject.stream_hash
19
- unless opts[:ignore_stream_hash_on].include?(opt) or not opts[opt].respond_to?(:to_stream_hash)
13
+ begin
20
14
  begin
21
15
  opts[opt] = opts[opt].to_stream_hash
22
16
  rescue NoMethodError
23
- raise "The class #{opts[opt].class.name} does not have a method called #{opts[opt].activity_attr}. Perhaps you should look at your ActsAsStream configuration, or set :activity_attr"
17
+ raise "The model #{opts[opt].class.name} does not have a method called #{opts[opt].activity_attr}. Perhaps you should look at your ActsAsStream configuration, or set :activity_attr"
24
18
  end
19
+ rescue
20
+ raise "The model #{opts[opt].class.name} does not respond to the :to_stream_hash method. Make that happen, or use a custom packager"
25
21
  end
26
22
  end
27
-
28
- opts.delete(:ignore_stream_hash_on)
29
-
30
23
  # then, if everything is fine, bundle it up into a JSON string
31
24
  opts.to_json
32
25
  end
@@ -45,6 +38,11 @@ module ActsAsStream
45
38
  rescue
46
39
  raise "Cannot translate :object into an instantiated model. Perhaps the model used as the :object in this activity did not have a :to_stream_hash method? The :object value is:\n #{package[:object]}"
47
40
  end
41
+ begin
42
+ package[:time] = Time.at package[:time].to_i
43
+ rescue
44
+ raise "Cannot translate Time given :time value in package of #{package[:time]}"
45
+ end
48
46
  package
49
47
  end
50
48
 
@@ -30,7 +30,7 @@ module ActsAsStream
30
30
  module InstanceMethods
31
31
 
32
32
  def to_stream_hash
33
- {self.class.name.tableize.singularize => {'id' => self.id, activity_attr.to_s => self.send(activity_attr)}}
33
+ {self.class.name.tableize.singularize.to_sym => {:id => self.id, activity_attr.to_sym => self.send(activity_attr)}}
34
34
  end
35
35
  def streamable_object_id
36
36
  "#{self.class.name.tableize.singularize}:#{self.send(self.class.activity_attr)}"
@@ -80,8 +80,8 @@ module ActsAsStream
80
80
  get_activity options
81
81
  end
82
82
  def activity_count since=nil
83
- since ||= self.created_at.to_i
84
- ActsAsStream.redis.zcount following_key, "(#{since}", "+inf"
83
+ since = since.present? ? "(#{since}" : "-inf"
84
+ ActsAsStream.redis.zcount following_key, since, "+inf"
85
85
  end
86
86
  private
87
87
 
@@ -95,6 +95,7 @@ module ActsAsStream
95
95
 
96
96
  module MentionsMethods
97
97
  def register_mentions!(options = {})
98
+ options = {:key => mentions_key}.merge options
98
99
  options[:mentioned_keys] = [options[:mentioned_keys]] unless options[:mentioned_keys].is_a?(Array)
99
100
  ActsAsStream.register_mentions! options
100
101
  end
@@ -1,3 +1,3 @@
1
1
  module ActsAsStream
2
- VERSION = "0.0.3.alpha.7"
2
+ VERSION = "0.0.4.alpha.2"
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.7
4
+ version: 0.0.4.alpha.2
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-18 00:00:00.000000000 Z
12
+ date: 2012-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70253535091600 !ruby/object:Gem::Requirement
16
+ requirement: &70352780730440 !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: *70253535091600
24
+ version_requirements: *70352780730440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redis
27
- requirement: &70253535091000 !ruby/object:Gem::Requirement
27
+ requirement: &70352780729720 !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: *70253535091000
35
+ version_requirements: *70352780729720
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sqlite3
38
- requirement: &70253535090120 !ruby/object:Gem::Requirement
38
+ requirement: &70352780728960 !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: *70253535090120
46
+ version_requirements: *70352780728960
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: acts_as_amico
49
- requirement: &70253535089340 !ruby/object:Gem::Requirement
49
+ requirement: &70352780728140 !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: *70253535089340
57
+ version_requirements: *70352780728140
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec-rails
60
- requirement: &70253535088760 !ruby/object:Gem::Requirement
60
+ requirement: &70352780727580 !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: *70253535088760
68
+ version_requirements: *70352780727580
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: spork
71
- requirement: &70253535088080 !ruby/object:Gem::Requirement
71
+ requirement: &70352780726880 !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: *70253535088080
79
+ version_requirements: *70352780726880
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: guard-rspec
82
- requirement: &70253535087420 !ruby/object:Gem::Requirement
82
+ requirement: &70352780726260 !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: *70253535087420
90
+ version_requirements: *70352780726260
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: guard-spork
93
- requirement: &70253535086720 !ruby/object:Gem::Requirement
93
+ requirement: &70352780725500 !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: *70253535086720
101
+ version_requirements: *70352780725500
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: factory_girl_rails
104
- requirement: &70253535086000 !ruby/object:Gem::Requirement
104
+ requirement: &70352780724740 !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: *70253535086000
112
+ version_requirements: *70352780724740
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: simplecov
115
- requirement: &70253535085300 !ruby/object:Gem::Requirement
115
+ requirement: &70352780724040 !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: *70253535085300
123
+ version_requirements: *70352780724040
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: fakeweb
126
- requirement: &70253535084580 !ruby/object:Gem::Requirement
126
+ requirement: &70352780723380 !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: *70253535084580
134
+ version_requirements: *70352780723380
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: uuidtools
137
- requirement: &70253535099120 !ruby/object:Gem::Requirement
137
+ requirement: &70352780737980 !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: *70253535099120
145
+ version_requirements: *70352780737980
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!