acts_as_amico 0.1.1 → 0.2.0

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