acts_as_amico 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,6 +10,19 @@ module ActsAsAmico
10
10
  @amico_key ||= :id
11
11
  end
12
12
 
13
+ def amico_methods
14
+ @result || begin
15
+ result = []
16
+ methods = [:following, :followers, :blocked, :reciprocated, :pending]
17
+ methods.each do |m|
18
+ ["_count", "_page_count" ].each do |s|
19
+ result << "#{m.to_s}#{s}".to_sym
20
+ end
21
+ end
22
+ result
23
+ end
24
+ end
25
+
13
26
  def acts_as_amico *args
14
27
  options = args.extract_options!
15
28
  options.assert_valid_keys(:amico_key)
@@ -25,7 +38,7 @@ module ActsAsAmico
25
38
  end
26
39
 
27
40
  def method_missing(sym, *args, &block)
28
- if Amico.respond_to? sym
41
+ if self.class.amico_methods.include? sym
29
42
  args[0] = args[0].amico_key if not args[0].nil? and args[0].respond_to?(:amico_key)
30
43
  args.unshift(amico_key)
31
44
  if sym.nil?
@@ -42,26 +55,81 @@ module ActsAsAmico
42
55
  pass_sym_to_amico(sym) || super(sym)
43
56
  end
44
57
 
58
+ def get_all *args
59
+ options = args.extract_options!
60
+ options.assert_valid_keys(:scope)
61
+ valid_params = [:following, :followers, :blocked, :reciprocated, :pending]
62
+ scope = options[:scope] || Amico.default_scope_key
63
+ meth = args[0]
64
+ raise "Must be one of #{valid_params.to_s}" if not valid_params.include? meth
65
+ count = self.send("#{meth}_count".to_sym, scope)
66
+ self.send("#{meth}", :page_size => count, :scope => scope)
67
+ end
68
+
69
+ # Lists
45
70
  def followers options = {}
46
- key = options[:scope] || Amico.default_scope_key
47
- Amico.followers(amico_key, options, key)
71
+ scope = options[:scope] || Amico.default_scope_key
72
+ Amico.followers amico_key, options, scope
73
+ end
74
+ def following options = {}
75
+ scope = options[:scope] || Amico.default_scope_key
76
+ Amico.following amico_key, options, scope
77
+ end
78
+ def reciprocated options = {}
79
+ scope = options[:scope] || Amico.default_scope_key
80
+ Amico.reciprocated amico_key, options, scope
81
+ end
82
+ def pending options = {}
83
+ scope = options[:scope] || Amico.default_scope_key
84
+ Amico.pending amico_key, options, scope
85
+ end
86
+ def blocked options = {}
87
+ scope = options[:scope] || Amico.default_scope_key
88
+ Amico.blocked amico_key, options, scope
48
89
  end
49
90
 
50
91
  # Named destructive methods
51
- def follow! obj, *args
52
- Amico.follow(amico_key, obj.amico_key, *args)
92
+ def follow! obj, options = {}
93
+ scope = options[:scope] || Amico.default_scope_key
94
+ Amico.follow(amico_key, obj.amico_key, scope)
95
+ end
96
+ def unfollow! obj, options = {}
97
+ scope = options[:scope] || Amico.default_scope_key
98
+ Amico.unfollow(amico_key, obj.amico_key, scope)
99
+ end
100
+ def accept! obj, options = {}
101
+ scope = options[:scope] || Amico.default_scope_key
102
+ Amico.accept(amico_key, obj.amico_key, scope)
103
+ end
104
+ def block! obj, options = {}
105
+ scope = options[:scope] || Amico.default_scope_key
106
+ Amico.block(amico_key, obj.amico_key, scope)
107
+ end
108
+ def unblock! obj, options = {}
109
+ scope = options[:scope] || Amico.default_scope_key
110
+ Amico.unblock(amico_key, obj.amico_key, scope)
111
+ end
112
+
113
+ # Booleans
114
+ def following? obj, options = {}
115
+ scope = options[:scope] || Amico.default_scope_key
116
+ Amico.following?(amico_key, obj.amico_key, scope)
53
117
  end
54
- def unfollow! obj, *args
55
- Amico.unfollow(amico_key, obj.amico_key, *args)
118
+ def follower? obj, options = {}
119
+ scope = options[:scope] || Amico.default_scope_key
120
+ Amico.follower?(amico_key, obj.amico_key, scope)
56
121
  end
57
- def accept! obj, *args
58
- Amico.accept(amico_key, obj.amico_key, *args)
122
+ def blocked? obj, options = {}
123
+ scope = options[:scope] || Amico.default_scope_key
124
+ Amico.blocked?(amico_key, obj.amico_key, scope)
59
125
  end
60
- def block! obj, *args
61
- Amico.block(amico_key, obj.amico_key, *args)
126
+ def pending? obj, options = {}
127
+ scope = options[:scope] || Amico.default_scope_key
128
+ Amico.pending?(amico_key, obj.amico_key, scope)
62
129
  end
63
- def unblock! obj, *args
64
- Amico.unblock(amico_key, obj.amico_key, *args)
130
+ def reciprocated? obj, options = {}
131
+ scope = options[:scope] || Amico.default_scope_key
132
+ Amico.reciprocated?(amico_key, obj.amico_key, scope)
65
133
  end
66
134
 
67
135
  private
@@ -1,3 +1,3 @@
1
1
  module ActsAsAmico
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.4'
3
3
  end
@@ -36,14 +36,16 @@ describe ActsAsAmico do
36
36
  end
37
37
 
38
38
  it "should follow" do
39
- @usera.follow! @admin, 'admin'
40
- @usera.following?(@admin, 'admin').should be_true
39
+ @usera.follow! @admin, :scope => 'admin'
40
+ @usera.following?(@admin, :scope => 'admin').should be_true
41
41
  @admin.followers(:scope => 'admin').include?(@usera.amico_key.to_s).should be_true
42
42
  end
43
43
  it "should allow following an ActiveResource object" do
44
- @usera.follow! @rest_object, 'rest_object'
45
- @usera.following?(@rest_object, 'rest_object').should be_true
44
+ @usera.follow! @rest_object, :scope => 'rest_object'
45
+ @usera.following?(@rest_object, :scope => 'rest_object').should be_true
46
46
 
47
47
  @rest_object.followers(:scope => 'rest_object').include?(@usera.amico_key.to_s).should be_true
48
48
  end
49
+
50
+
49
51
  end
@@ -16,36 +16,36 @@ describe ActsAsAmico do
16
16
 
17
17
  describe '#follow' do
18
18
  it 'should allow you to follow' do
19
- @usera.follow(@userb)
19
+ @usera.follow!(@userb)
20
20
 
21
21
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
22
22
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
23
23
  end
24
24
 
25
25
  it 'should not allow you to follow yourself' do
26
- @usera.follow(@usera)
26
+ @usera.follow!(@usera)
27
27
 
28
28
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
29
29
  end
30
30
 
31
31
  it 'should add each individual to the reciprocated set if you both follow each other' do
32
- @usera.follow(@userb)
33
- @userb.follow(@usera)
32
+ @usera.follow!(@userb)
33
+ @userb.follow!(@usera)
34
34
 
35
35
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
36
36
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
37
37
  end
38
38
  describe "with non-id key" do
39
39
  it 'should allow you to follow' do
40
- @usera.follow(@admin)
40
+ @usera.follow!(@admin)
41
41
 
42
42
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
43
43
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(1)
44
44
  end
45
45
 
46
46
  it 'should add each individual to the reciprocated set if you both follow each other' do
47
- @usera.follow(@admin)
48
- @admin.follow(@usera)
47
+ @usera.follow!(@admin)
48
+ @admin.follow!(@usera)
49
49
 
50
50
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
51
51
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.reciprocated_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(1)
@@ -56,12 +56,12 @@ describe ActsAsAmico do
56
56
 
57
57
  describe '#unfollow' do
58
58
  it 'should allow you to unfollow' do
59
- @usera.follow(@userb)
59
+ @usera.follow!(@userb)
60
60
 
61
61
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
62
62
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
63
63
 
64
- @usera.unfollow(@userb)
64
+ @usera.unfollow!(@userb)
65
65
 
66
66
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
67
67
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
@@ -71,12 +71,12 @@ describe ActsAsAmico do
71
71
 
72
72
  describe "non-id key" do
73
73
  it 'should allow you to unfollow' do
74
- @usera.follow(@admin)
74
+ @usera.follow!(@admin)
75
75
 
76
76
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
77
77
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(1)
78
78
 
79
- @usera.unfollow(@admin)
79
+ @usera.unfollow!(@admin)
80
80
 
81
81
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
82
82
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@admin.send(@admin.class.amico_key)}").should be(0)
@@ -88,8 +88,8 @@ describe ActsAsAmico do
88
88
 
89
89
  describe '#block' do
90
90
  it 'should allow you to block someone following you' do
91
- @userb.follow(@usera)
92
- @usera.block(@userb)
91
+ @userb.follow!(@usera)
92
+ @usera.block!(@userb)
93
93
 
94
94
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
95
95
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
@@ -98,32 +98,32 @@ describe ActsAsAmico do
98
98
  end
99
99
 
100
100
  it 'should allow you to block someone who is not following you' do
101
- @usera.block(@userb)
101
+ @usera.block!(@userb)
102
102
 
103
103
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
104
104
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
105
105
  end
106
106
 
107
107
  it 'should not allow someone you have blocked to follow you' do
108
- @usera.block(@userb)
108
+ @usera.block!(@userb)
109
109
 
110
110
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
111
111
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
112
112
 
113
- @userb.follow(@usera)
113
+ @userb.follow!(@usera)
114
114
 
115
115
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
116
116
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
117
117
  end
118
118
 
119
119
  it 'should not allow you to block yourself' do
120
- @usera.block(@usera)
120
+ @usera.block!(@usera)
121
121
  @usera.blocked?(@usera).should be_false
122
122
  end
123
123
  describe "non-id key" do
124
124
  it 'should allow you to block someone following you' do
125
- @admin.follow(@usera)
126
- @usera.block(@admin)
125
+ @admin.follow!(@usera)
126
+ @usera.block!(@admin)
127
127
 
128
128
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
129
129
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
@@ -132,19 +132,19 @@ describe ActsAsAmico do
132
132
  end
133
133
 
134
134
  it 'should allow you to block someone who is not following you' do
135
- @usera.block(@userb)
135
+ @usera.block!(@userb)
136
136
 
137
137
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
138
138
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
139
139
  end
140
140
 
141
141
  it 'should not allow someone you have blocked to follow you' do
142
- @usera.block(@admin)
142
+ @usera.block!(@admin)
143
143
 
144
144
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
145
145
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
146
146
 
147
- @admin.follow(@usera)
147
+ @admin.follow!(@usera)
148
148
 
149
149
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@admin.class.amico_key)}").should be(0)
150
150
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.blocked_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(1)
@@ -155,15 +155,15 @@ describe ActsAsAmico do
155
155
 
156
156
  describe '#unblock' do
157
157
  it 'should allow you to unblock someone you have blocked' do
158
- @usera.block(@userb)
158
+ @usera.block!(@userb)
159
159
  @usera.blocked?(@userb).should be_true
160
- @usera.unblock(@userb)
160
+ @usera.unblock!(@userb)
161
161
  @usera.blocked?(@userb).should be_false
162
162
  end
163
163
  it 'should allow you to unblock someone you have blocked with non-id keys' do
164
- @usera.block(@admin)
164
+ @usera.block!(@admin)
165
165
  @usera.blocked?(@admin).should be_true
166
- @usera.unblock(@admin)
166
+ @usera.unblock!(@admin)
167
167
  @usera.blocked?(@admin).should be_false
168
168
  end
169
169
  end
@@ -209,7 +209,7 @@ describe ActsAsAmico do
209
209
  end
210
210
  describe '#block!' do
211
211
  it 'should allow you to block someone following you' do
212
- @userb.follow(@usera)
212
+ @userb.follow!(@usera)
213
213
  @usera.block!(@userb)
214
214
 
215
215
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
@@ -255,20 +255,20 @@ describe ActsAsAmico do
255
255
 
256
256
  describe '#following?' do
257
257
  it 'should return that you are following' do
258
- @usera.follow(@userb)
258
+ @usera.follow!(@userb)
259
259
  @usera.following?(@userb).should be_true
260
260
  @userb.following?(@usera).should be_false
261
261
 
262
- @userb.follow(@usera)
262
+ @userb.follow!(@usera)
263
263
  @userb.following?(@usera).should be_true
264
264
  end
265
265
  describe "non-id keys" do
266
266
  it 'should return that you are following' do
267
- @usera.follow(@admin)
267
+ @usera.follow!(@admin)
268
268
  @usera.following?(@admin).should be_true
269
269
  @admin.following?(@usera).should be_false
270
270
 
271
- @admin.follow(@usera)
271
+ @admin.follow!(@usera)
272
272
  @admin.following?(@usera).should be_true
273
273
  end
274
274
  end
@@ -276,20 +276,20 @@ describe ActsAsAmico do
276
276
 
277
277
  describe '#follower?' do
278
278
  it 'should return that you are being followed' do
279
- @userb.follow(@usera)
279
+ @userb.follow!(@usera)
280
280
  @usera.follower?(@userb).should be_true
281
281
  @userb.follower?(@usera).should be_false
282
282
 
283
- @usera.follow(@userb)
283
+ @usera.follow!(@userb)
284
284
  @userb.follower?(@usera).should be_true
285
285
  end
286
286
  describe "non-id keys" do
287
287
  it 'should return that you are being followed' do
288
- @admin.follow(@usera)
288
+ @admin.follow!(@usera)
289
289
  @usera.follower?(@admin).should be_true
290
290
  @admin.follower?(@usera).should be_false
291
291
 
292
- @usera.follow(@admin)
292
+ @usera.follow!(@admin)
293
293
  @admin.follower?(@usera).should be_true
294
294
  end
295
295
  end
@@ -297,13 +297,13 @@ describe ActsAsAmico do
297
297
 
298
298
  describe '#blocked?' do
299
299
  it 'should return that someone is being blocked' do
300
- @usera.block(@userb)
300
+ @usera.block!(@userb)
301
301
  @usera.blocked?(@userb).should be_true
302
302
  @userb.following?(@usera).should be_false
303
303
  end
304
304
  describe "non-id keys" do
305
305
  it 'should return that someone is being blocked' do
306
- @usera.block(@admin)
306
+ @usera.block!(@admin)
307
307
  @usera.blocked?(@admin).should be_true
308
308
  @admin.following?(@usera).should be_false
309
309
  end
@@ -312,24 +312,24 @@ describe ActsAsAmico do
312
312
 
313
313
  describe '#reciprocated?' do
314
314
  it 'should return true if both individuals are following each other' do
315
- @usera.follow(@userb)
316
- @userb.follow(@usera)
315
+ @usera.follow!(@userb)
316
+ @userb.follow!(@usera)
317
317
  @usera.reciprocated?(@userb).should be_true
318
318
  end
319
319
 
320
320
  it 'should return false if both individuals are not following each other' do
321
- @usera.follow(@userb)
321
+ @usera.follow!(@userb)
322
322
  @usera.reciprocated?(@userb).should be_false
323
323
  end
324
324
  describe "non-id keys" do
325
325
  it 'should return true if both individuals are following each other' do
326
- @usera.follow(@admin)
327
- @admin.follow(@usera)
326
+ @usera.follow!(@admin)
327
+ @admin.follow!(@usera)
328
328
  @usera.reciprocated?(@admin).should be_true
329
329
  end
330
330
 
331
331
  it 'should return false if both individuals are not following each other' do
332
- @usera.follow(@admin)
332
+ @usera.follow!(@admin)
333
333
  @usera.reciprocated?(@admin).should be_false
334
334
  end
335
335
  end
@@ -338,24 +338,17 @@ describe ActsAsAmico do
338
338
  describe '#following' do
339
339
  it 'should return the correct list' do
340
340
  userc = Factory :user
341
- @usera.follow(@userb)
342
- @usera.follow(userc)
341
+ @usera.follow!(@userb)
342
+ @usera.follow!(userc)
343
343
  @usera.following.should eql(["#{userc.id}", "#{@userb.send(@userb.class.amico_key)}"])
344
344
  @usera.following(:page => 5).should eql(["#{userc.id}", "#{@userb.send(@userb.class.amico_key)}"])
345
345
  end
346
346
 
347
- it 'should page correctly' do
348
- user = add_reciprocal_followers
349
-
350
- user.following(:page => 1, :page_size => 5).size.should be(5)
351
- user.following(:page => 1, :page_size => 10).size.should be(10)
352
- user.following(:page => 1, :page_size => 25).size.should be(25)
353
- end
354
347
  describe "non-id keys" do
355
348
  it 'should return the correct list' do
356
349
  userc = Factory :user
357
- @usera.follow(@admin)
358
- @usera.follow(userc)
350
+ @usera.follow!(@admin)
351
+ @usera.follow!(userc)
359
352
  @usera.following.should =~ ["#{userc.id}", "#{@admin.send(@admin.class.amico_key)}"]
360
353
  @usera.following(:page => 5).should =~ ["#{userc.id}", "#{@admin.send(@admin.class.amico_key)}"]
361
354
  end
@@ -365,24 +358,17 @@ describe ActsAsAmico do
365
358
  describe '#followers' do
366
359
  it 'should return the correct list' do
367
360
  userc = Factory :user
368
- @usera.follow(@userb)
369
- userc.follow(@userb)
361
+ @usera.follow!(@userb)
362
+ userc.follow!(@userb)
370
363
  @userb.followers.should eql(["#{userc.id}", "#{@usera.send(@usera.class.amico_key)}"])
371
364
  @userb.followers(:page => 5).should eql(["#{userc.id}", "#{@usera.send(@usera.class.amico_key)}"])
372
365
  end
373
366
 
374
- it 'should page correctly' do
375
- user = add_reciprocal_followers
376
-
377
- user.followers(:page => 1, :page_size => 5).size.should be(5)
378
- user.followers(:page => 1, :page_size => 10).size.should be(10)
379
- user.followers(:page => 1, :page_size => 25).size.should be(25)
380
- end
381
367
  describe "non-id keys" do
382
368
  it 'should return the correct list' do
383
369
  userc = Factory :user
384
- @usera.follow(@admin)
385
- userc.follow(@admin)
370
+ @usera.follow!(@admin)
371
+ userc.follow!(@admin)
386
372
  @admin.followers.should eql(["#{userc.id}", "#{@usera.send(@usera.class.amico_key)}"])
387
373
  @admin.followers(:page => 5).should eql(["#{userc.id}", "#{@usera.send(@usera.class.amico_key)}"])
388
374
  end
@@ -392,24 +378,17 @@ describe ActsAsAmico do
392
378
  describe '#blocked' do
393
379
  it 'should return the correct list' do
394
380
  userc = Factory :user
395
- @usera.block(@userb)
396
- @usera.block(userc)
381
+ @usera.block!(@userb)
382
+ @usera.block!(userc)
397
383
  @usera.blocked.should eql(["#{userc.id}", "#{@userb.send(@userb.class.amico_key)}"])
398
384
  @usera.blocked(:page => 5).should eql(["#{userc.id}", "#{@userb.send(@userb.class.amico_key)}"])
399
385
  end
400
386
 
401
- it 'should page correctly' do
402
- user = add_reciprocal_followers(26, true)
403
-
404
- user.blocked(:page => 1, :page_size => 5).size.should be(5)
405
- user.blocked(:page => 1, :page_size => 10).size.should be(10)
406
- user.blocked(:page => 1, :page_size => 25).size.should be(25)
407
- end
408
387
  describe "non-id keys" do
409
388
  it 'should return the correct list' do
410
389
  userc = Factory :user
411
- @usera.block(@admin)
412
- @usera.block(userc)
390
+ @usera.block!(@admin)
391
+ @usera.block!(userc)
413
392
  @usera.blocked.should =~ ["#{userc.id}", "#{@admin.send(@admin.class.amico_key)}"]
414
393
  @usera.blocked(:page => 5).should =~ ["#{userc.id}", "#{@admin.send(@admin.class.amico_key)}"]
415
394
  end
@@ -418,23 +397,16 @@ describe ActsAsAmico do
418
397
 
419
398
  describe '#reciprocated' do
420
399
  it 'should return the correct list' do
421
- @usera.follow(@userb)
422
- @userb.follow(@usera)
400
+ @usera.follow!(@userb)
401
+ @userb.follow!(@usera)
423
402
  @usera.reciprocated.should eql(["#{@userb.send(@userb.class.amico_key)}"])
424
403
  @userb.reciprocated.should eql(["#{@usera.send(@usera.class.amico_key)}"])
425
404
  end
426
405
 
427
- it 'should page correctly' do
428
- user = add_reciprocal_followers
429
-
430
- user.reciprocated(:page => 1, :page_size => 5).size.should be(5)
431
- user.reciprocated(:page => 1, :page_size => 10).size.should be(10)
432
- user.reciprocated(:page => 1, :page_size => 25).size.should be(25)
433
- end
434
406
  describe "non-id keys" do
435
407
  it 'should return the correct list' do
436
- @usera.follow(@admin)
437
- @admin.follow(@usera)
408
+ @usera.follow!(@admin)
409
+ @admin.follow!(@usera)
438
410
  @usera.reciprocated.should eql(["#{@admin.send(@admin.class.amico_key)}"])
439
411
  @admin.reciprocated.should eql(["#{@usera.send(@usera.class.amico_key)}"])
440
412
  end
@@ -443,33 +415,33 @@ describe ActsAsAmico do
443
415
 
444
416
  describe '#following_count' do
445
417
  it 'should return the correct count' do
446
- @usera.follow(@userb)
418
+ @usera.follow!(@userb)
447
419
  @usera.following_count.should be(1)
448
420
  end
449
421
  it 'should return the correct count for non-id keys' do
450
- @usera.follow(@admin)
422
+ @usera.follow!(@admin)
451
423
  @usera.following_count.should be(1)
452
424
  end
453
425
  end
454
426
 
455
427
  describe '#followers_count' do
456
428
  it 'should return the correct count' do
457
- @usera.follow(@userb)
429
+ @usera.follow!(@userb)
458
430
  @userb.followers_count.should be(1)
459
431
  end
460
432
  it 'should return the correct count for non-id keys' do
461
- @usera.follow(@admin)
433
+ @usera.follow!(@admin)
462
434
  @admin.followers_count.should be(1)
463
435
  end
464
436
  end
465
437
 
466
438
  describe '#blocked_count' do
467
439
  it 'should return the correct count' do
468
- @usera.block(@userb)
440
+ @usera.block!(@userb)
469
441
  @usera.blocked_count.should be(1)
470
442
  end
471
443
  it 'should return the correct count for non-id keys' do
472
- @usera.block(@admin)
444
+ @usera.block!(@admin)
473
445
  @usera.blocked_count.should be(1)
474
446
  end
475
447
  end
@@ -478,21 +450,21 @@ describe ActsAsAmico do
478
450
  it 'should return the correct count' do
479
451
  userc = Factory :user
480
452
  userd = Factory :user
481
- @usera.follow(@userb)
482
- @userb.follow(@usera)
483
- @usera.follow(userc)
484
- userc.follow(@usera)
485
- @usera.follow(userd)
453
+ @usera.follow!(@userb)
454
+ @userb.follow!(@usera)
455
+ @usera.follow!(userc)
456
+ userc.follow!(@usera)
457
+ @usera.follow!(userd)
486
458
  @usera.reciprocated_count.should be(2)
487
459
  end
488
460
  it 'should return the correct count for non-id keys' do
489
461
  userc = Factory :user
490
462
  userd = Factory :user
491
- @usera.follow(@admin)
492
- @admin.follow(@usera)
493
- @usera.follow(userc)
494
- userc.follow(@usera)
495
- @usera.follow(userd)
463
+ @usera.follow!(@admin)
464
+ @admin.follow!(@usera)
465
+ @usera.follow!(userc)
466
+ userc.follow!(@usera)
467
+ @usera.follow!(userd)
496
468
  @usera.reciprocated_count.should be(2)
497
469
  end
498
470
  end
@@ -508,7 +480,7 @@ describe ActsAsAmico do
508
480
 
509
481
  describe '#follow' do
510
482
  it 'should allow you to follow but the relationship is initially pending' do
511
- @usera.follow(@userb)
483
+ @usera.follow!(@userb)
512
484
 
513
485
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
514
486
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
@@ -516,13 +488,13 @@ describe ActsAsAmico do
516
488
  end
517
489
 
518
490
  it 'should remove the pending relationship if you have a pending follow, but you unfollow' do
519
- @usera.follow(@userb)
491
+ @usera.follow!(@userb)
520
492
 
521
493
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
522
494
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
523
495
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.pending_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(1)
524
496
 
525
- @usera.unfollow(@userb)
497
+ @usera.unfollow!(@userb)
526
498
 
527
499
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.following_key}:#{Amico.default_scope_key}:#{@usera.send(@usera.class.amico_key)}").should be(0)
528
500
  Amico.redis.zcard("#{Amico.namespace}:#{Amico.followers_key}:#{Amico.default_scope_key}:#{@userb.send(@userb.class.amico_key)}").should be(0)
@@ -531,10 +503,10 @@ describe ActsAsAmico do
531
503
 
532
504
  describe 'removing the pending relationship and add to following and followers if #accept is called' do
533
505
  it "should work with non-bang-named methods" do
534
- @usera.follow(@userb)
506
+ @usera.follow!(@userb)
535
507
  @usera.pending?(@userb).should be_true
536
508
 
537
- @usera.accept(@userb)
509
+ @usera.accept!(@userb)
538
510
 
539
511
  @usera.pending?(@userb).should be_false
540
512
  @usera.following?(@userb).should be_true
@@ -558,12 +530,12 @@ describe ActsAsAmico do
558
530
 
559
531
  describe 'removing the pending relationship and add to following and followers if #accept is called and add to reciprocated relationship' do
560
532
  it "should work with non-bang-named methods" do
561
- @usera.follow(@userb)
562
- @userb.follow(@usera)
533
+ @usera.follow!(@userb)
534
+ @userb.follow!(@usera)
563
535
  @usera.pending?(@userb).should be_true
564
536
  @userb.pending?(@usera).should be_true
565
537
 
566
- @usera.accept(@userb)
538
+ @usera.accept!(@userb)
567
539
 
568
540
  @usera.pending?(@userb).should be_false
569
541
  @userb.pending?(@usera).should be_true
@@ -572,7 +544,7 @@ describe ActsAsAmico do
572
544
  @userb.follower?(@usera).should be_true
573
545
  @usera.follower?(@userb).should be_false
574
546
 
575
- @userb.accept(@usera)
547
+ @userb.accept!(@usera)
576
548
 
577
549
  @usera.pending?(@userb).should be_false
578
550
  @userb.pending?(@usera).should be_false
@@ -612,9 +584,9 @@ describe ActsAsAmico do
612
584
 
613
585
  describe '#block' do
614
586
  it 'should remove the pending relationship if you block someone' do
615
- @userb.follow(@usera)
587
+ @userb.follow!(@usera)
616
588
  @userb.pending?(@usera).should be_true
617
- @usera.block(@userb)
589
+ @usera.block!(@userb)
618
590
  @userb.pending?(@usera).should be_false
619
591
  @usera.blocked?(@userb).should be_true
620
592
  end
@@ -622,77 +594,44 @@ describe ActsAsAmico do
622
594
 
623
595
  describe '#pending' do
624
596
  it 'should return the correct list' do
625
- @usera.follow(@userb)
626
- @userb.follow(@usera)
597
+ @usera.follow!(@userb)
598
+ @userb.follow!(@usera)
627
599
  @usera.pending.should eql(["#{@userb.send(@userb.class.amico_key)}"])
628
600
  @userb.pending.should eql(["#{@usera.send(@usera.class.amico_key)}"])
629
601
  end
630
602
 
631
- it 'should page correctly' do
632
- user = add_reciprocal_followers
633
-
634
- user.pending(:page => 1, :page_size => 5).size.should be(5)
635
- user.pending(:page => 1, :page_size => 10).size.should be(10)
636
- user.pending(:page => 1, :page_size => 25).size.should be(25)
637
- end
638
603
  end
639
604
 
640
605
  describe '#pending_count' do
641
606
  it 'should return the correct count' do
642
607
  userc = Factory :user
643
608
  userd = Factory :user
644
- @usera.follow(@userb)
645
- @userb.follow(@usera)
646
- @usera.follow(userc)
647
- userc.follow(@usera)
648
- @usera.follow(userd)
609
+ @usera.follow!(@userb)
610
+ @userb.follow!(@usera)
611
+ @usera.follow!(userc)
612
+ userc.follow!(@usera)
613
+ @usera.follow!(userd)
649
614
  @usera.pending_count.should be(2)
650
615
  end
651
616
  end
652
617
 
653
- describe '#pending_page_count' do
654
- it 'should return the correct count' do
655
- user = add_reciprocal_followers
656
-
657
- user.pending_page_count.should be(2)
658
- user.pending_page_count( 10).should be(3)
659
- user.pending_page_count( 5).should be(6)
660
- user.pending_page_count(2).should be(13)
661
- end
662
- end
663
618
  end
664
619
 
665
620
  describe 'scope' do
666
621
  it 'should allow you to scope a call to follow a different thing' do
667
622
  Amico.default_scope_key = 'user'
668
- @usera.follow(@userb, 'user')
669
- @usera.following?(@userb).should be_true
670
- @usera.following?(@userb, 'user').should be_true
623
+ @usera.follow!(@userb, :scope => 'user')
624
+ @usera.following?(@userb, :scope => 'user').should be_true
625
+ @usera.following?(@userb, :scope => 'user').should be_true
671
626
  @usera.following.should eql(["#{@userb.send(@userb.class.amico_key)}"])
672
- @usera.following( {:page_size => Amico.page_size, :page => 1}, 'user').should eql(["#{@userb.send(@userb.class.amico_key)}"])
673
- @usera.following?(@userb, 'project').should be_false
674
- @usera.follow(@userb, 'project')
675
- @usera.following?(@userb, 'project').should be_true
676
- @usera.following( {:page_size => Amico.page_size, :page => 1}, 'project').should eql(["#{@userb.send(@userb.class.amico_key)}"])
627
+ @usera.following(:page_size => Amico.page_size, :page => 1, :scope => 'user').should eql(["#{@userb.send(@userb.class.amico_key)}"])
628
+ @usera.following?(@userb, :scope => 'project').should be_false
629
+ @usera.follow!(@userb, :scope => 'project')
630
+ @usera.following?(@userb, :scope => 'project').should be_true
631
+ @usera.following( :page_size => Amico.page_size, :page => 1, :scope => 'project').should eql(["#{@userb.send(@userb.class.amico_key)}"])
677
632
  end
678
633
  end
679
634
 
680
635
  private
681
636
 
682
- def add_reciprocal_followers(count = 26, block_relationship = false)
683
- outer_user = nil
684
- 1.upto(count) do
685
- outer_user = Factory :user
686
- 1.upto(count) do
687
- inner_user = Factory :user
688
- outer_user.follow! inner_user
689
- inner_user.follow! outer_user
690
- if block_relationship
691
- outer_user.block! inner_user
692
- inner_user.block! outer_user
693
- end
694
- end
695
- end
696
- outer_user
697
- end
698
637
  end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActsAsAmico do
4
+
5
+ describe "non-pending" do
6
+ before :each do
7
+ @user = add_reciprocal_followers
8
+ end
9
+
10
+ it 'should page #following correctly' do
11
+ @user.following(:page => 1, :page_size => 5).size.should be(5)
12
+ end
13
+
14
+ it 'should page #following correctly' do
15
+ @user.followers(:page => 1, :page_size => 5).size.should be(5)
16
+ end
17
+ it 'should page #reciprocated correctly' do
18
+ @user.reciprocated(:page => 1, :page_size => 5).size.should be(5)
19
+ end
20
+ it "should return all following" do
21
+ @user.get_all(:following).size.should be(6)
22
+ end
23
+ end
24
+
25
+ describe "pending operations" do
26
+ before :each do
27
+ Amico.pending_follow = true
28
+ @user = add_reciprocal_followers
29
+ end
30
+ after :all do
31
+ Amico.pending_follow = false
32
+ end
33
+
34
+ it 'should page correctly' do
35
+ @user.pending(:page => 1, :page_size => 5).size.should be(5)
36
+ end
37
+ it 'should return the correct count' do
38
+ @user.pending_page_count.should be(1)
39
+ @user.pending_page_count(2).should be(3)
40
+ end
41
+ end
42
+
43
+ describe "pending operations" do
44
+ before :each do
45
+ @user = add_reciprocal_followers 6, true
46
+ Amico.pending_follow = true
47
+ end
48
+ after :all do
49
+ Amico.pending_follow = false
50
+ end
51
+ it 'should page #blocked correctly' do
52
+ @user.blocked(:page => 1, :page_size => 5).size.should be(5)
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def add_reciprocal_followers(count = 6, block_relationship = false)
59
+ user = Factory :user
60
+ 1.upto(count) do
61
+ inner_user = Factory :user
62
+ user.follow! inner_user
63
+ inner_user.follow! user
64
+ if block_relationship
65
+ user.block! inner_user
66
+ inner_user.block! user
67
+ end
68
+ end
69
+ user
70
+ end
71
+
72
+ end
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.2.2
4
+ version: 0.2.4
5
5
  prerelease:
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-08 00:00:00.000000000 Z
12
+ date: 2012-03-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
16
- requirement: &70349693755600 !ruby/object:Gem::Requirement
16
+ requirement: &70186816397260 !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: *70349693755600
24
+ version_requirements: *70186816397260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: amico
27
- requirement: &70349693752680 !ruby/object:Gem::Requirement
27
+ requirement: &70186816395200 !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: *70349693752680
35
+ version_requirements: *70186816395200
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rails
38
- requirement: &70349693763920 !ruby/object:Gem::Requirement
38
+ requirement: &70186816394620 !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: *70349693763920
46
+ version_requirements: *70186816394620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec-rails
49
- requirement: &70349693762520 !ruby/object:Gem::Requirement
49
+ requirement: &70186816393840 !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: *70349693762520
57
+ version_requirements: *70186816393840
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: sqlite3
60
- requirement: &70349693761600 !ruby/object:Gem::Requirement
60
+ requirement: &70186816391700 !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: *70349693761600
68
+ version_requirements: *70186816391700
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: factory_girl_rails
71
- requirement: &70349693759660 !ruby/object:Gem::Requirement
71
+ requirement: &70186816390440 !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: *70349693759660
79
+ version_requirements: *70186816390440
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: fakeweb
82
- requirement: &70349693757560 !ruby/object:Gem::Requirement
82
+ requirement: &70186816406200 !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: *70349693757560
90
+ version_requirements: *70186816406200
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: uuidtools
93
- requirement: &70349693772320 !ruby/object:Gem::Requirement
93
+ requirement: &70186816405520 !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: *70349693772320
101
+ version_requirements: *70186816405520
102
102
  description: Rails injectable Relationships (e.g. friendships) backed by Redis
103
103
  email:
104
104
  - mail@johnmetta.com
@@ -166,6 +166,7 @@ files:
166
166
  - spec/dummy/script/rails
167
167
  - spec/factories/people.rb
168
168
  - spec/factories/stuff.rb
169
+ - spec/reciprocal_followers.rb
169
170
  - spec/spec_helper.rb
170
171
  homepage: https://github.com/mettadore/acts_as_amico
171
172
  licenses: []
@@ -238,4 +239,5 @@ test_files:
238
239
  - spec/dummy/script/rails
239
240
  - spec/factories/people.rb
240
241
  - spec/factories/stuff.rb
242
+ - spec/reciprocal_followers.rb
241
243
  - spec/spec_helper.rb