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

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.
@@ -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!