parity_timeline 0.3.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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +152 -0
- data/Rakefile +38 -0
- data/lib/redis_timeline.rb +21 -0
- data/lib/tasks/timeline_tasks.rake +4 -0
- data/lib/timeline/activity.rb +11 -0
- data/lib/timeline/actor.rb +36 -0
- data/lib/timeline/config.rb +42 -0
- data/lib/timeline/controller_helper.rb +116 -0
- data/lib/timeline/helpers.rb +23 -0
- data/lib/timeline/notification_helper.rb +99 -0
- data/lib/timeline/track.rb +116 -0
- data/lib/timeline/untitled.txt +4 -0
- data/lib/timeline/version.rb +3 -0
- data/spec/activity_spec.rb +12 -0
- data/spec/actor_spec.rb +23 -0
- data/spec/redis-test.conf +598 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/timeline_spec.rb +12 -0
- data/spec/track_spec.rb +139 -0
- metadata +198 -0
data/spec/spec_helper.rb
ADDED
@@ -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
|
+
|
data/spec/track_spec.rb
ADDED
@@ -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
|