acts_as_amico 0.2.2 → 0.2.4

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