acts_as_amico 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,5 @@
1
1
  class Admin < ActiveRecord::Base
2
- acts_as_amico :amico_key => "name"
2
+ acts_as_amico :amico_key => :name
3
3
  validates_uniqueness_of :name
4
- before_validation :set_name
5
-
6
- private
7
-
8
- def set_name
9
- self.name = "Admin_#{random}" if not self.name
10
- end
4
+ validates_presence_of :name
11
5
  end
@@ -1,5 +1,6 @@
1
1
  class RestObject < ActiveResource::Base
2
2
 
3
+ acts_as_amico :amico_key => :title
3
4
  self.site = "http://api.sample.com"
4
5
 
5
6
  self.format = :xml
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_amico
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
16
- requirement: &70218164576180 !ruby/object:Gem::Requirement
16
+ requirement: &70359781092880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70218164576180
24
+ version_requirements: *70359781092880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: amico
27
- requirement: &70218164573460 !ruby/object:Gem::Requirement
27
+ requirement: &70359781091320 !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: *70218164573460
35
+ version_requirements: *70359781091320
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rails
38
- requirement: &70218164584640 !ruby/object:Gem::Requirement
38
+ requirement: &70359781106060 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.1.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70218164584640
46
+ version_requirements: *70359781106060
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec-rails
49
- requirement: &70218164583280 !ruby/object:Gem::Requirement
49
+ requirement: &70359781104940 !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: *70218164583280
57
+ version_requirements: *70359781104940
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: sqlite3
60
- requirement: &70218164582340 !ruby/object:Gem::Requirement
60
+ requirement: &70359781103180 !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: *70218164582340
68
+ version_requirements: *70359781103180
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: factory_girl_rails
71
- requirement: &70218164580460 !ruby/object:Gem::Requirement
71
+ requirement: &70359781101740 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70218164580460
79
+ version_requirements: *70359781101740
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: fakeweb
82
- requirement: &70218164578160 !ruby/object:Gem::Requirement
82
+ requirement: &70359781098780 !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: *70218164578160
90
+ version_requirements: *70359781098780
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: uuidtools
93
- requirement: &70218164593020 !ruby/object:Gem::Requirement
93
+ requirement: &70359781114500 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70218164593020
101
+ version_requirements: *70359781114500
102
102
  description: Rails injectable Relationships (e.g. friendships) backed by Redis
103
103
  email:
104
104
  - mail@johnmetta.com
@@ -117,10 +117,11 @@ files:
117
117
  - Rakefile
118
118
  - acts_as_amico.gemspec
119
119
  - lib/acts_as_amico.rb
120
- - lib/acts_as_amico/amico_user.rb
120
+ - lib/acts_as_amico/amico_object.rb
121
121
  - lib/acts_as_amico/railtie.rb
122
122
  - lib/acts_as_amico/version.rb
123
- - spec/amico/amico_user_spec.rb
123
+ - spec/active_resource_spec.rb
124
+ - spec/amico_object_spec.rb
124
125
  - spec/dummy/Rakefile
125
126
  - spec/dummy/app/assets/javascripts/application.js
126
127
  - spec/dummy/app/assets/stylesheets/application.css
@@ -191,7 +192,8 @@ signing_key:
191
192
  specification_version: 3
192
193
  summary: Rails injectable Relationships (e.g. friendships) backed by Redis
193
194
  test_files:
194
- - spec/amico/amico_user_spec.rb
195
+ - spec/active_resource_spec.rb
196
+ - spec/amico_object_spec.rb
195
197
  - spec/dummy/Rakefile
196
198
  - spec/dummy/app/assets/javascripts/application.js
197
199
  - spec/dummy/app/assets/stylesheets/application.css
@@ -1,700 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActsAsAmico do
4
- describe "acts_as_amico style" do
5
- before :each do
6
- @usera = Factory :user
7
- @userb = Factory :user
8
- @admin = Factory :admin
9
- @widget = Factory :widget
10
- @thing = Factory :thing
11
- end
12
-
13
- it "should allow both id and non-id keys" do
14
- @usera.class.amico_key.should eq("id")
15
- @admin.class.amico_key.should eq("name")
16
- end
17
-
18
- describe '#follow' do
19
- it 'should allow you to follow' do
20
- @usera.follow(@userb)
21
-
22
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
23
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
24
- end
25
-
26
- it 'should not allow you to follow yourself' do
27
- @usera.follow(@usera)
28
-
29
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
30
- end
31
-
32
- it 'should add each individual to the reciprocated set if you both follow each other' do
33
- @usera.follow(@userb)
34
- @userb.follow(@usera)
35
-
36
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
37
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
38
- end
39
- describe "with non-id key" do
40
- it 'should allow you to follow' do
41
- @usera.follow(@admin)
42
-
43
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
44
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(1)
45
- end
46
-
47
- it 'should add each individual to the reciprocated set if you both follow each other' do
48
- @usera.follow(@admin)
49
- @admin.follow(@usera)
50
-
51
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
52
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(1)
53
- end
54
-
55
- end
56
- end
57
-
58
- describe '#unfollow' do
59
- it 'should allow you to unfollow' do
60
- @usera.follow(@userb)
61
-
62
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
63
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
64
-
65
- @usera.unfollow(@userb)
66
-
67
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
68
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
69
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
70
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
71
- end
72
-
73
- describe "non-id key" do
74
- it 'should allow you to unfollow' do
75
- @usera.follow(@admin)
76
-
77
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
78
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(1)
79
-
80
- @usera.unfollow(@admin)
81
-
82
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
83
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(0)
84
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
85
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(0)
86
- end
87
- end
88
- end
89
-
90
- describe '#block' do
91
- it 'should allow you to block someone following you' do
92
- @userb.follow(@usera)
93
- @usera.block(@userb)
94
-
95
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
96
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
97
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
98
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
99
- end
100
-
101
- it 'should allow you to block someone who is not following you' do
102
- @usera.block(@userb)
103
-
104
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
105
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
106
- end
107
-
108
- it 'should not allow someone you have blocked to follow you' do
109
- @usera.block(@userb)
110
-
111
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
112
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
113
-
114
- @userb.follow(@usera)
115
-
116
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
117
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
118
- end
119
-
120
- it 'should not allow you to block yourself' do
121
- @usera.block(@usera)
122
- @usera.blocked?(@usera).should be_false
123
- end
124
- describe "non-id key" do
125
- it 'should allow you to block someone following you' do
126
- @admin.follow(@usera)
127
- @usera.block(@admin)
128
-
129
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
130
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
131
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
132
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
133
- end
134
-
135
- it 'should allow you to block someone who is not following you' do
136
- @usera.block(@userb)
137
-
138
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
139
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
140
- end
141
-
142
- it 'should not allow someone you have blocked to follow you' do
143
- @usera.block(@admin)
144
-
145
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
146
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
147
-
148
- @admin.follow(@usera)
149
-
150
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
151
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
152
- end
153
-
154
- end
155
- end
156
-
157
- describe '#unblock' do
158
- it 'should allow you to unblock someone you have blocked' do
159
- @usera.block(@userb)
160
- @usera.blocked?(@userb).should be_true
161
- @usera.unblock(@userb)
162
- @usera.blocked?(@userb).should be_false
163
- end
164
- it 'should allow you to unblock someone you have blocked with non-id keys' do
165
- @usera.block(@admin)
166
- @usera.blocked?(@admin).should be_true
167
- @usera.unblock(@admin)
168
- @usera.blocked?(@admin).should be_false
169
- end
170
- end
171
-
172
- describe "destructive methods named with ! bang" do
173
- describe '#follow' do
174
- it 'should allow you to follow' do
175
- @usera.follow!(@userb)
176
-
177
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
178
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
179
- end
180
-
181
- it 'should not allow you to follow yourself' do
182
- @usera.follow!(@usera)
183
-
184
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
185
- end
186
-
187
- it 'should add each individual to the reciprocated set if you both follow each other' do
188
- @usera.follow!(@userb)
189
- @userb.follow!(@usera)
190
-
191
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
192
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
193
- end
194
- end
195
-
196
- describe '#unfollow' do
197
- it 'should allow you to unfollow' do
198
- @usera.follow!(@userb)
199
-
200
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
201
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
202
-
203
- @usera.unfollow!(@userb)
204
-
205
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
206
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
207
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
208
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
209
- end
210
- end
211
- describe '#block!' do
212
- it 'should allow you to block someone following you' do
213
- @userb.follow(@usera)
214
- @usera.block!(@userb)
215
-
216
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
217
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
218
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
219
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
220
- end
221
-
222
- it 'should allow you to block someone who is not following you' do
223
- @usera.block!(@userb)
224
-
225
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
226
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
227
- end
228
-
229
- it 'should not allow someone you have blocked to follow you' do
230
- @usera.block!(@userb)
231
-
232
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
233
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
234
-
235
- @userb.follow!(@usera)
236
-
237
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
238
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
239
- end
240
-
241
- it 'should not allow you to block yourself' do
242
- @usera.block!(@usera)
243
- @usera.blocked?(@usera).should be_false
244
- end
245
- end
246
- describe '#unblock!' do
247
- it 'should allow you to unblock someone you have blocked' do
248
- @usera.block!(@userb)
249
- @usera.blocked?(@userb).should be_true
250
- @usera.unblock!(@userb)
251
- @usera.blocked?(@userb).should be_false
252
- end
253
- end
254
-
255
- end
256
-
257
- describe '#following?' do
258
- it 'should return that you are following' do
259
- @usera.follow(@userb)
260
- @usera.following?(@userb).should be_true
261
- @userb.following?(@usera).should be_false
262
-
263
- @userb.follow(@usera)
264
- @userb.following?(@usera).should be_true
265
- end
266
- describe "non-id keys" do
267
- it 'should return that you are following' do
268
- @usera.follow(@admin)
269
- @usera.following?(@admin).should be_true
270
- @admin.following?(@usera).should be_false
271
-
272
- @admin.follow(@usera)
273
- @admin.following?(@usera).should be_true
274
- end
275
- end
276
- end
277
-
278
- describe '#follower?' do
279
- it 'should return that you are being followed' do
280
- @userb.follow(@usera)
281
- @usera.follower?(@userb).should be_true
282
- @userb.follower?(@usera).should be_false
283
-
284
- @usera.follow(@userb)
285
- @userb.follower?(@usera).should be_true
286
- end
287
- describe "non-id keys" do
288
- it 'should return that you are being followed' do
289
- @admin.follow(@usera)
290
- @usera.follower?(@admin).should be_true
291
- @admin.follower?(@usera).should be_false
292
-
293
- @usera.follow(@admin)
294
- @admin.follower?(@usera).should be_true
295
- end
296
- end
297
- end
298
-
299
- describe '#blocked?' do
300
- it 'should return that someone is being blocked' do
301
- @usera.block(@userb)
302
- @usera.blocked?(@userb).should be_true
303
- @userb.following?(@usera).should be_false
304
- end
305
- describe "non-id keys" do
306
- it 'should return that someone is being blocked' do
307
- @usera.block(@admin)
308
- @usera.blocked?(@admin).should be_true
309
- @admin.following?(@usera).should be_false
310
- end
311
- end
312
- end
313
-
314
- describe '#reciprocated?' do
315
- it 'should return true if both individuals are following each other' do
316
- @usera.follow(@userb)
317
- @userb.follow(@usera)
318
- @usera.reciprocated?(@userb).should be_true
319
- end
320
-
321
- it 'should return false if both individuals are not following each other' do
322
- @usera.follow(@userb)
323
- @usera.reciprocated?(@userb).should be_false
324
- end
325
- describe "non-id keys" do
326
- it 'should return true if both individuals are following each other' do
327
- @usera.follow(@admin)
328
- @admin.follow(@usera)
329
- @usera.reciprocated?(@admin).should be_true
330
- end
331
-
332
- it 'should return false if both individuals are not following each other' do
333
- @usera.follow(@admin)
334
- @usera.reciprocated?(@admin).should be_false
335
- end
336
- end
337
- end
338
-
339
- describe '#following' do
340
- it 'should return the correct list' do
341
- userc = Factory :user
342
- @usera.follow(@userb)
343
- @usera.follow(userc)
344
- @usera.following.should eql(["#{userc.id}", "#{@userb.send(@userb.class.amico_key)}"])
345
- @usera.following(:page => 5).should eql(["#{userc.id}", "#{@userb.send(@userb.class.amico_key)}"])
346
- end
347
-
348
- it 'should page correctly' do
349
- user = add_reciprocal_followers
350
-
351
- user.following(:page => 1, :page_size => 5).size.should be(5)
352
- user.following(:page => 1, :page_size => 10).size.should be(10)
353
- user.following(:page => 1, :page_size => 25).size.should be(25)
354
- end
355
- describe "non-id keys" do
356
- it 'should return the correct list' do
357
- userc = Factory :user
358
- @usera.follow(@admin)
359
- @usera.follow(userc)
360
- @usera.following.should =~ ["#{userc.id}", "#{@admin.send(@admin.class.amico_key)}"]
361
- @usera.following(:page => 5).should =~ ["#{userc.id}", "#{@admin.send(@admin.class.amico_key)}"]
362
- end
363
- end
364
- end
365
-
366
- describe '#followers' do
367
- it 'should return the correct list' do
368
- userc = Factory :user
369
- @usera.follow(@userb)
370
- userc.follow(@userb)
371
- @userb.followers.should eql(["#{userc.id}", "#{@usera.send(@usera.class.amico_key)}"])
372
- @userb.followers(:page => 5).should eql(["#{userc.id}", "#{@usera.send(@usera.class.amico_key)}"])
373
- end
374
-
375
- it 'should page correctly' do
376
- user = add_reciprocal_followers
377
-
378
- user.followers(:page => 1, :page_size => 5).size.should be(5)
379
- user.followers(:page => 1, :page_size => 10).size.should be(10)
380
- user.followers(:page => 1, :page_size => 25).size.should be(25)
381
- end
382
- describe "non-id keys" do
383
- it 'should return the correct list' do
384
- userc = Factory :user
385
- @usera.follow(@admin)
386
- userc.follow(@admin)
387
- @admin.followers.should eql(["#{userc.id}", "#{@usera.send(@usera.class.amico_key)}"])
388
- @admin.followers(:page => 5).should eql(["#{userc.id}", "#{@usera.send(@usera.class.amico_key)}"])
389
- end
390
- end
391
- end
392
-
393
- describe '#blocked' do
394
- it 'should return the correct list' do
395
- userc = Factory :user
396
- @usera.block(@userb)
397
- @usera.block(userc)
398
- @usera.blocked.should eql(["#{userc.id}", "#{@userb.send(@userb.class.amico_key)}"])
399
- @usera.blocked(:page => 5).should eql(["#{userc.id}", "#{@userb.send(@userb.class.amico_key)}"])
400
- end
401
-
402
- it 'should page correctly' do
403
- user = add_reciprocal_followers(26, true)
404
-
405
- user.blocked(:page => 1, :page_size => 5).size.should be(5)
406
- user.blocked(:page => 1, :page_size => 10).size.should be(10)
407
- user.blocked(:page => 1, :page_size => 25).size.should be(25)
408
- end
409
- describe "non-id keys" do
410
- it 'should return the correct list' do
411
- userc = Factory :user
412
- @usera.block(@admin)
413
- @usera.block(userc)
414
- @usera.blocked.should =~ ["#{userc.id}", "#{@admin.send(@admin.class.amico_key)}"]
415
- @usera.blocked(:page => 5).should =~ ["#{userc.id}", "#{@admin.send(@admin.class.amico_key)}"]
416
- end
417
- end
418
- end
419
-
420
- describe '#reciprocated' do
421
- it 'should return the correct list' do
422
- @usera.follow(@userb)
423
- @userb.follow(@usera)
424
- @usera.reciprocated.should eql(["#{@userb.send(@userb.class.amico_key)}"])
425
- @userb.reciprocated.should eql(["#{@usera.send(@usera.class.amico_key)}"])
426
- end
427
-
428
- it 'should page correctly' do
429
- user = add_reciprocal_followers
430
-
431
- user.reciprocated(:page => 1, :page_size => 5).size.should be(5)
432
- user.reciprocated(:page => 1, :page_size => 10).size.should be(10)
433
- user.reciprocated(:page => 1, :page_size => 25).size.should be(25)
434
- end
435
- describe "non-id keys" do
436
- it 'should return the correct list' do
437
- @usera.follow(@admin)
438
- @admin.follow(@usera)
439
- @usera.reciprocated.should eql(["#{@admin.send(@admin.class.amico_key)}"])
440
- @admin.reciprocated.should eql(["#{@usera.send(@usera.class.amico_key)}"])
441
- end
442
- end
443
- end
444
-
445
- describe '#following_count' do
446
- it 'should return the correct count' do
447
- @usera.follow(@userb)
448
- @usera.following_count.should be(1)
449
- end
450
- it 'should return the correct count for non-id keys' do
451
- @usera.follow(@admin)
452
- @usera.following_count.should be(1)
453
- end
454
- end
455
-
456
- describe '#followers_count' do
457
- it 'should return the correct count' do
458
- @usera.follow(@userb)
459
- @userb.followers_count.should be(1)
460
- end
461
- it 'should return the correct count for non-id keys' do
462
- @usera.follow(@admin)
463
- @admin.followers_count.should be(1)
464
- end
465
- end
466
-
467
- describe '#blocked_count' do
468
- it 'should return the correct count' do
469
- @usera.block(@userb)
470
- @usera.blocked_count.should be(1)
471
- end
472
- it 'should return the correct count for non-id keys' do
473
- @usera.block(@admin)
474
- @usera.blocked_count.should be(1)
475
- end
476
- end
477
-
478
- describe '#reciprocated_count' do
479
- it 'should return the correct count' do
480
- userc = Factory :user
481
- userd = Factory :user
482
- @usera.follow(@userb)
483
- @userb.follow(@usera)
484
- @usera.follow(userc)
485
- userc.follow(@usera)
486
- @usera.follow(userd)
487
- @usera.reciprocated_count.should be(2)
488
- end
489
- it 'should return the correct count for non-id keys' do
490
- userc = Factory :user
491
- userd = Factory :user
492
- @usera.follow(@admin)
493
- @admin.follow(@usera)
494
- @usera.follow(userc)
495
- userc.follow(@usera)
496
- @usera.follow(userd)
497
- @usera.reciprocated_count.should be(2)
498
- end
499
- end
500
-
501
- describe 'pending_follow enabled' do
502
- before(:each) do
503
- Amico.pending_follow = true
504
- end
505
-
506
- after(:each) do
507
- Amico.pending_follow = false
508
- end
509
-
510
- describe '#follow' do
511
- it 'should allow you to follow but the relationship is initially pending' do
512
- @usera.follow(@userb)
513
-
514
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
515
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
516
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.pending_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
517
- end
518
-
519
- it 'should remove the pending relationship if you have a pending follow, but you unfollow' do
520
- @usera.follow(@userb)
521
-
522
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
523
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
524
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.pending_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
525
-
526
- @usera.unfollow(@userb)
527
-
528
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
529
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
530
- Amico.redis.zcard("#{Amico.namespace}:#{Amico.pending_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
531
- end
532
-
533
- describe 'removing the pending relationship and add to following and followers if #accept is called' do
534
- it "should work with non-bang-named methods" do
535
- @usera.follow(@userb)
536
- @usera.pending?(@userb).should be_true
537
-
538
- @usera.accept(@userb)
539
-
540
- @usera.pending?(@userb).should be_false
541
- @usera.following?(@userb).should be_true
542
- @userb.following?(@usera).should be_false
543
- @userb.follower?(@usera).should be_true
544
- @usera.follower?(@userb).should be_false
545
- end
546
- it "should work with ! bang-named methods" do
547
- @usera.follow!(@userb)
548
- @usera.pending?(@userb).should be_true
549
-
550
- @usera.accept!(@userb)
551
-
552
- @usera.pending?(@userb).should be_false
553
- @usera.following?(@userb).should be_true
554
- @userb.following?(@usera).should be_false
555
- @userb.follower?(@usera).should be_true
556
- @usera.follower?(@userb).should be_false
557
- end
558
- end
559
-
560
- describe 'removing the pending relationship and add to following and followers if #accept is called and add to reciprocated relationship' do
561
- it "should work with non-bang-named methods" do
562
- @usera.follow(@userb)
563
- @userb.follow(@usera)
564
- @usera.pending?(@userb).should be_true
565
- @userb.pending?(@usera).should be_true
566
-
567
- @usera.accept(@userb)
568
-
569
- @usera.pending?(@userb).should be_false
570
- @userb.pending?(@usera).should be_true
571
- @usera.following?(@userb).should be_true
572
- @userb.following?(@usera).should be_false
573
- @userb.follower?(@usera).should be_true
574
- @usera.follower?(@userb).should be_false
575
-
576
- @userb.accept(@usera)
577
-
578
- @usera.pending?(@userb).should be_false
579
- @userb.pending?(@usera).should be_false
580
- @usera.following?(@userb).should be_true
581
- @userb.following?(@usera).should be_true
582
- @userb.follower?(@usera).should be_true
583
- @usera.follower?(@userb).should be_true
584
- @usera.reciprocated?(@userb).should be_true
585
- end
586
- it "should work with ! bang-named methods" do
587
- @usera.follow!(@userb)
588
- @userb.follow!(@usera)
589
- @usera.pending?(@userb).should be_true
590
- @userb.pending?(@usera).should be_true
591
-
592
- @usera.accept!(@userb)
593
-
594
- @usera.pending?(@userb).should be_false
595
- @userb.pending?(@usera).should be_true
596
- @usera.following?(@userb).should be_true
597
- @userb.following?(@usera).should be_false
598
- @userb.follower?(@usera).should be_true
599
- @usera.follower?(@userb).should be_false
600
-
601
- @userb.accept!(@usera)
602
-
603
- @usera.pending?(@userb).should be_false
604
- @userb.pending?(@usera).should be_false
605
- @usera.following?(@userb).should be_true
606
- @userb.following?(@usera).should be_true
607
- @userb.follower?(@usera).should be_true
608
- @usera.follower?(@userb).should be_true
609
- @usera.reciprocated?(@userb).should be_true
610
- end
611
- end
612
- end
613
-
614
- describe '#block' do
615
- it 'should remove the pending relationship if you block someone' do
616
- @userb.follow(@usera)
617
- @userb.pending?(@usera).should be_true
618
- @usera.block(@userb)
619
- @userb.pending?(@usera).should be_false
620
- @usera.blocked?(@userb).should be_true
621
- end
622
- end
623
-
624
- describe '#pending' do
625
- it 'should return the correct list' do
626
- @usera.follow(@userb)
627
- @userb.follow(@usera)
628
- @usera.pending.should eql(["#{@userb.send(@userb.class.amico_key)}"])
629
- @userb.pending.should eql(["#{@usera.send(@usera.class.amico_key)}"])
630
- end
631
-
632
- it 'should page correctly' do
633
- user = add_reciprocal_followers
634
-
635
- user.pending(:page => 1, :page_size => 5).size.should be(5)
636
- user.pending(:page => 1, :page_size => 10).size.should be(10)
637
- user.pending(:page => 1, :page_size => 25).size.should be(25)
638
- end
639
- end
640
-
641
- describe '#pending_count' do
642
- it 'should return the correct count' do
643
- userc = Factory :user
644
- userd = Factory :user
645
- @usera.follow(@userb)
646
- @userb.follow(@usera)
647
- @usera.follow(userc)
648
- userc.follow(@usera)
649
- @usera.follow(userd)
650
- @usera.pending_count.should be(2)
651
- end
652
- end
653
-
654
- describe '#pending_page_count' do
655
- it 'should return the correct count' do
656
- user = add_reciprocal_followers
657
-
658
- user.pending_page_count.should be(2)
659
- user.pending_page_count( 10).should be(3)
660
- user.pending_page_count( 5).should be(6)
661
- user.pending_page_count(2).should be(13)
662
- end
663
- end
664
- end
665
-
666
- describe 'scope' do
667
- it 'should allow you to scope a call to follow a different thing' do
668
- Amico.default_scope_key = 'user'
669
- @usera.follow(@userb, 'user')
670
- @usera.following?(@userb).should be_true
671
- @usera.following?(@userb, 'user').should be_true
672
- @usera.following.should eql(["#{@userb.send(@userb.class.amico_key)}"])
673
- @usera.following( {:page_size => Amico.page_size, :page => 1}, 'user').should eql(["#{@userb.send(@userb.class.amico_key)}"])
674
- @usera.following?(@userb, 'project').should be_false
675
- @usera.follow(@userb, 'project')
676
- @usera.following?(@userb, 'project').should be_true
677
- @usera.following( {:page_size => Amico.page_size, :page => 1}, 'project').should eql(["#{@userb.send(@userb.class.amico_key)}"])
678
- end
679
- end
680
-
681
- private
682
-
683
- def add_reciprocal_followers(count = 26, block_relationship = false)
684
- outer_user = nil
685
- 1.upto(count) do
686
- outer_user = Factory :user
687
- 1.upto(count) do
688
- inner_user = Factory :user
689
- outer_user.follow! inner_user
690
- inner_user.follow! outer_user
691
- if block_relationship
692
- outer_user.block! inner_user
693
- inner_user.block! outer_user
694
- end
695
- end
696
- end
697
- outer_user
698
- end
699
- end
700
- end