parity_timeline 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,33 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib redis_timeline]))
2
+ dir = File.dirname(File.expand_path(__FILE__))
3
+
4
+ #
5
+ # make sure we can run redis
6
+ #
7
+
8
+ if !system("which redis-server")
9
+ puts '', "** can't find `redis-server` in your path"
10
+ puts "** try running `sudo rake install`"
11
+ abort ''
12
+ end
13
+
14
+ #
15
+ # start our own redis when the tests start,
16
+ # kill it when they end
17
+ #
18
+
19
+ at_exit do
20
+ next if $!
21
+
22
+ exit_code = RSpec::Runner.autorun
23
+
24
+ pid = `ps -A -o pid,command | grep [r]edis-test`.split(" ")[0]
25
+ puts "Killing test redis server..."
26
+ `rm -f #{dir}/dump.rdb`
27
+ Process.kill("KILL", pid.to_i)
28
+ exit exit_code
29
+ end
30
+
31
+ puts "Starting redis for testing at localhost:9736..."
32
+ `redis-server #{dir}/redis-test.conf`
33
+ Timeline.redis = 'localhost:9736'
@@ -0,0 +1,12 @@
1
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
2
+
3
+ describe Timeline do
4
+ it("can set a redis instance") { Timeline.should respond_to(:redis=) }
5
+ it("has a namespace, timeline") { Timeline.redis.namespace.should == :timeline }
6
+
7
+ it "sets the namespace through a url-like string" do
8
+ Timeline.redis = 'localhost:9736/namespace'
9
+ Timeline.redis.namespace.should == 'namespace'
10
+ end
11
+ end
12
+
@@ -0,0 +1,139 @@
1
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
2
+
3
+ require 'active_model'
4
+
5
+ class Post
6
+ extend ActiveModel::Callbacks
7
+
8
+ define_model_callbacks :create
9
+ attr_accessor :id, :to_param, :creator_id, :name
10
+
11
+ include Timeline::Track
12
+ track :new_post
13
+
14
+ def initialize(options={})
15
+ @creator_id = options.delete :creator_id
16
+ @name = options.delete :name
17
+ end
18
+
19
+ def save
20
+ run_callbacks :create
21
+ true
22
+ end
23
+
24
+ def creator
25
+ User.find(creator_id)
26
+ end
27
+
28
+ def to_s
29
+ name
30
+ end
31
+ end
32
+
33
+ class Comment
34
+ extend ActiveModel::Callbacks
35
+
36
+ define_model_callbacks :create
37
+ attr_accessor :id, :creator_id, :body
38
+
39
+ include Timeline::Track
40
+
41
+ track :new_comment, object: [:post_name, :post_id, :body], mentionable: :body
42
+
43
+ def initialize(options={})
44
+ @creator_id = options.delete :creator_id
45
+ @body = options.delete :body
46
+ end
47
+
48
+ def save
49
+ run_callbacks :create
50
+ true
51
+ end
52
+
53
+ def post_id
54
+ 1
55
+ end
56
+
57
+ def post_name
58
+ "My Post"
59
+ end
60
+
61
+ def creator
62
+ User.find(creator_id)
63
+ end
64
+
65
+ def to_s
66
+ "Comment"
67
+ end
68
+ end
69
+
70
+ class User
71
+ include Timeline::Actor
72
+ attr_accessor :id, :to_param, :username
73
+
74
+ def initialize(options={})
75
+ @id = options.delete :id
76
+ @username = options.delete :username
77
+ end
78
+
79
+ class << self
80
+ def find user_id
81
+ User.new(id: user_id)
82
+ end
83
+
84
+ def find_by_username username
85
+ User.new(username: username)
86
+ end
87
+ end
88
+ end
89
+
90
+ describe Timeline::Track do
91
+ let(:creator) { User.new(id: 1, username: "first_user") }
92
+ let(:post) { Post.new(creator_id: creator.id, name: "New post") }
93
+ let(:comment) { Comment.new(creator_id: creator.id, id: 1) }
94
+
95
+ describe "included in an ActiveModel-compliant class" do
96
+ it "tracks on create by default" do
97
+ post.should_receive(:track_new_post_after_create)
98
+ post.save
99
+ end
100
+
101
+ it "uses the creator as the actor by default" do
102
+ post.should_receive(:creator).and_return(mock("User", id: 1, to_param: "1", followers: []))
103
+ post.save
104
+ end
105
+
106
+ it "adds the activity to the global timeline set" do
107
+ post.save
108
+ creator.timeline(:global).last.should be_kind_of(Timeline::Activity)
109
+ end
110
+
111
+ it "adds the activity to the actor's timeline" do
112
+ post.save
113
+ creator.timeline.last.should be_kind_of(Timeline::Activity)
114
+ end
115
+
116
+ it "cc's the actor's followers by default" do
117
+ follower = User.new(id: 2)
118
+ User.any_instance.should_receive(:followers).and_return([follower])
119
+ post.save
120
+ follower.timeline.last.verb.should == "new_post"
121
+ follower.timeline.last.actor.id.should == 1
122
+ end
123
+ end
124
+
125
+ describe "with extra_fields" do
126
+ it "stores the extra fields in the timeline" do
127
+ comment.save
128
+ creator.timeline.first.object.should respond_to :post_id
129
+ end
130
+ end
131
+
132
+ describe "tracking mentions" do
133
+ it "adds to a user's mentions timeline" do
134
+ User.stub(:find_by_username).and_return(creator)
135
+ Comment.new(creator_id: creator.id, body: "@first_user should see this").save
136
+ creator.timeline(:mentions).first.object.body.should == "@first_user should see this"
137
+ end
138
+ end
139
+ end
metadata ADDED
@@ -0,0 +1,198 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: parity_timeline
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
5
+ platform: ruby
6
+ authors:
7
+ - Felix Clack
8
+ - Shiva Kumar
9
+ - Jimish Jpbanputra
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-05-11 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '3.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '3.2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: activemodel
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '3.2'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '3.2'
43
+ - !ruby/object:Gem::Dependency
44
+ name: multi_json
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rake
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: redis
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: hashie
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ - !ruby/object:Gem::Dependency
100
+ name: redis-namespace
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: sqlite3
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: rspec
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ description: ''
142
+ email:
143
+ - felixclack@gmail.com
144
+ - jimish@desidime.com
145
+ executables: []
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - MIT-LICENSE
150
+ - README.md
151
+ - Rakefile
152
+ - lib/redis_timeline.rb
153
+ - lib/tasks/timeline_tasks.rake
154
+ - lib/timeline/activity.rb
155
+ - lib/timeline/actor.rb
156
+ - lib/timeline/config.rb
157
+ - lib/timeline/controller_helper.rb
158
+ - lib/timeline/helpers.rb
159
+ - lib/timeline/notification_helper.rb
160
+ - lib/timeline/track.rb
161
+ - lib/timeline/untitled.txt
162
+ - lib/timeline/version.rb
163
+ - spec/activity_spec.rb
164
+ - spec/actor_spec.rb
165
+ - spec/redis-test.conf
166
+ - spec/spec_helper.rb
167
+ - spec/timeline_spec.rb
168
+ - spec/track_spec.rb
169
+ homepage: http://felixclack.github.com/redis-timeline
170
+ licenses: []
171
+ metadata: {}
172
+ post_install_message:
173
+ rdoc_options: []
174
+ require_paths:
175
+ - lib
176
+ required_ruby_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ required_rubygems_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ requirements: []
187
+ rubyforge_project:
188
+ rubygems_version: 2.2.1
189
+ signing_key:
190
+ specification_version: 4
191
+ summary: Redis backed timeline for your activity feeds.
192
+ test_files:
193
+ - spec/activity_spec.rb
194
+ - spec/actor_spec.rb
195
+ - spec/redis-test.conf
196
+ - spec/spec_helper.rb
197
+ - spec/timeline_spec.rb
198
+ - spec/track_spec.rb