amistad 0.7.5 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/.gitignore +4 -1
  2. data/Gemfile.lock +56 -39
  3. data/README.markdown +29 -126
  4. data/Rakefile +35 -1
  5. data/amistad.gemspec +8 -3
  6. data/lib/amistad.rb +14 -9
  7. data/lib/amistad/active_record_friend_model.rb +157 -0
  8. data/lib/amistad/active_record_friendship_model.rb +52 -0
  9. data/lib/amistad/config.rb +21 -0
  10. data/lib/amistad/friend_model.rb +10 -4
  11. data/lib/amistad/friendship_model.rb +2 -2
  12. data/lib/amistad/friendships.rb +19 -0
  13. data/lib/amistad/mongo_friend_model.rb +168 -0
  14. data/lib/amistad/mongo_mapper_friend_model.rb +58 -0
  15. data/lib/amistad/mongoid_friend_model.rb +58 -0
  16. data/lib/amistad/version.rb +1 -1
  17. data/lib/generators/amistad/install/install_generator.rb +0 -1
  18. data/lib/generators/amistad/install/templates/create_friendships.rb +2 -2
  19. data/spec/activerecord/activerecord_spec_helper.rb +11 -24
  20. data/spec/activerecord/friend_custom_model_spec.rb +17 -0
  21. data/spec/activerecord/friend_spec.rb +16 -0
  22. data/spec/activerecord/friendship_spec.rb +13 -0
  23. data/spec/activerecord/friendship_with_custom_friend_model_spec.rb +18 -0
  24. data/spec/mongo_mapper/friend_custom_model_spec.rb +27 -0
  25. data/spec/mongo_mapper/friend_spec.rb +17 -0
  26. data/spec/mongo_mapper/mongo_mapper_spec_helper.rb +9 -0
  27. data/spec/mongoid/friend_custom_model_spec.rb +27 -0
  28. data/spec/mongoid/friend_spec.rb +17 -0
  29. data/spec/mongoid/mongoid_spec_helper.rb +8 -7
  30. data/spec/spec_helper.rb +33 -4
  31. data/spec/{activerecord/activerecord_friendship_model_spec.rb → support/activerecord/friendship_examples.rb} +11 -23
  32. data/spec/support/activerecord/schema.rb +40 -0
  33. data/spec/support/friend_examples.rb +2 -12
  34. data/spec/support/parameterized_models.rb +19 -0
  35. metadata +177 -36
  36. data/lib/amistad/active_record/friend_model.rb +0 -146
  37. data/lib/amistad/active_record/friendship_model.rb +0 -50
  38. data/lib/amistad/mongoid/friend_model.rb +0 -195
  39. data/lib/generators/amistad/install/templates/friendship.rb +0 -3
  40. data/spec/activerecord/activerecord_friend_model_spec.rb +0 -13
  41. data/spec/mongoid/mongoid_friend_model_spec.rb +0 -47
@@ -0,0 +1,19 @@
1
+ shared_examples_for "friend with parameterized models" do
2
+ context "When users are created after activating amistad" do
3
+ before(:each) do
4
+ activate_amistad(friend_model_param)
5
+ create_users(friend_model_param)
6
+ end
7
+
8
+ it_should_behave_like "a friend model"
9
+ end
10
+
11
+ context "When users are created before activating amistad" do
12
+ before(:each) do
13
+ create_users(friend_model_param)
14
+ activate_amistad(friend_model_param)
15
+ end
16
+
17
+ it_should_behave_like "a friend model"
18
+ end
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amistad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.9.0
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: 2011-09-30 00:00:00.000000000 Z
12
+ date: 2012-11-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &70262067526040 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70262067526040
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rake
27
- requirement: &70262067541740 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70262067541740
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rspec
38
- requirement: &70262067540020 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70262067540020
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: activerecord
49
- requirement: &70262067537380 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,63 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70262067537380
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: mysql2
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: pg
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: database_cleaner
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
58
126
  - !ruby/object:Gem::Dependency
59
127
  name: sqlite3
60
- requirement: &70262067536300 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
61
129
  none: false
62
130
  requirements:
63
131
  - - ! '>='
@@ -65,32 +133,63 @@ dependencies:
65
133
  version: '0'
66
134
  type: :development
67
135
  prerelease: false
68
- version_requirements: *70262067536300
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
69
142
  - !ruby/object:Gem::Dependency
70
143
  name: mongoid
71
- requirement: &70262067535440 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
72
145
  none: false
73
146
  requirements:
74
- - - ~>
147
+ - - ! '>='
75
148
  - !ruby/object:Gem::Version
76
- version: 2.0.0
149
+ version: '0'
77
150
  type: :development
78
151
  prerelease: false
79
- version_requirements: *70262067535440
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
80
158
  - !ruby/object:Gem::Dependency
81
159
  name: bson_ext
82
- requirement: &70262067534100 !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
83
161
  none: false
84
162
  requirements:
85
- - - ~>
163
+ - - ! '>='
86
164
  - !ruby/object:Gem::Version
87
- version: '1.3'
165
+ version: '0'
88
166
  type: :development
89
167
  prerelease: false
90
- version_requirements: *70262067534100
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
91
174
  - !ruby/object:Gem::Dependency
92
175
  name: fuubar
93
- requirement: &70262067549700 !ruby/object:Gem::Requirement
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: awesome_print
192
+ requirement: !ruby/object:Gem::Requirement
94
193
  none: false
95
194
  requirements:
96
195
  - - ! '>='
@@ -98,7 +197,28 @@ dependencies:
98
197
  version: '0'
99
198
  type: :development
100
199
  prerelease: false
101
- version_requirements: *70262067549700
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: mongo_mapper
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
102
222
  description: Extends your user model with friendships management methods
103
223
  email:
104
224
  - dev@raw1z.fr
@@ -115,23 +235,35 @@ files:
115
235
  - Rakefile
116
236
  - amistad.gemspec
117
237
  - lib/amistad.rb
118
- - lib/amistad/active_record/friend_model.rb
119
- - lib/amistad/active_record/friendship_model.rb
238
+ - lib/amistad/active_record_friend_model.rb
239
+ - lib/amistad/active_record_friendship_model.rb
240
+ - lib/amistad/config.rb
120
241
  - lib/amistad/friend_model.rb
121
242
  - lib/amistad/friendship_model.rb
122
- - lib/amistad/mongoid/friend_model.rb
243
+ - lib/amistad/friendships.rb
244
+ - lib/amistad/mongo_friend_model.rb
245
+ - lib/amistad/mongo_mapper_friend_model.rb
246
+ - lib/amistad/mongoid_friend_model.rb
123
247
  - lib/amistad/version.rb
124
248
  - lib/generators/amistad/install/install_generator.rb
125
249
  - lib/generators/amistad/install/templates/create_friendships.rb
126
- - lib/generators/amistad/install/templates/friendship.rb
127
- - spec/activerecord/activerecord_friend_model_spec.rb
128
- - spec/activerecord/activerecord_friendship_model_spec.rb
129
250
  - spec/activerecord/activerecord_spec_helper.rb
130
- - spec/mongoid/mongoid_friend_model_spec.rb
251
+ - spec/activerecord/friend_custom_model_spec.rb
252
+ - spec/activerecord/friend_spec.rb
253
+ - spec/activerecord/friendship_spec.rb
254
+ - spec/activerecord/friendship_with_custom_friend_model_spec.rb
255
+ - spec/mongo_mapper/friend_custom_model_spec.rb
256
+ - spec/mongo_mapper/friend_spec.rb
257
+ - spec/mongo_mapper/mongo_mapper_spec_helper.rb
258
+ - spec/mongoid/friend_custom_model_spec.rb
259
+ - spec/mongoid/friend_spec.rb
131
260
  - spec/mongoid/mongoid_spec_helper.rb
132
261
  - spec/spec_helper.rb
262
+ - spec/support/activerecord/friendship_examples.rb
263
+ - spec/support/activerecord/schema.rb
133
264
  - spec/support/friend_examples.rb
134
- homepage: http://github.com/raw1z/amistad
265
+ - spec/support/parameterized_models.rb
266
+ homepage: https://github.com/raw1z/amistad/wiki
135
267
  licenses: []
136
268
  post_install_message:
137
269
  rdoc_options: []
@@ -145,7 +277,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
277
  version: '0'
146
278
  segments:
147
279
  - 0
148
- hash: -4081995342441297245
280
+ hash: 340186368039761558
149
281
  required_rubygems_version: !ruby/object:Gem::Requirement
150
282
  none: false
151
283
  requirements:
@@ -154,18 +286,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
286
  version: '0'
155
287
  segments:
156
288
  - 0
157
- hash: -4081995342441297245
289
+ hash: 340186368039761558
158
290
  requirements: []
159
291
  rubyforge_project: amistad
160
- rubygems_version: 1.8.10
292
+ rubygems_version: 1.8.23
161
293
  signing_key:
162
294
  specification_version: 3
163
295
  summary: Adds friendships management into a rails 3.0 application
164
296
  test_files:
165
- - spec/activerecord/activerecord_friend_model_spec.rb
166
- - spec/activerecord/activerecord_friendship_model_spec.rb
167
297
  - spec/activerecord/activerecord_spec_helper.rb
168
- - spec/mongoid/mongoid_friend_model_spec.rb
298
+ - spec/activerecord/friend_custom_model_spec.rb
299
+ - spec/activerecord/friend_spec.rb
300
+ - spec/activerecord/friendship_spec.rb
301
+ - spec/activerecord/friendship_with_custom_friend_model_spec.rb
302
+ - spec/mongo_mapper/friend_custom_model_spec.rb
303
+ - spec/mongo_mapper/friend_spec.rb
304
+ - spec/mongo_mapper/mongo_mapper_spec_helper.rb
305
+ - spec/mongoid/friend_custom_model_spec.rb
306
+ - spec/mongoid/friend_spec.rb
169
307
  - spec/mongoid/mongoid_spec_helper.rb
170
308
  - spec/spec_helper.rb
309
+ - spec/support/activerecord/friendship_examples.rb
310
+ - spec/support/activerecord/schema.rb
171
311
  - spec/support/friend_examples.rb
312
+ - spec/support/parameterized_models.rb
@@ -1,146 +0,0 @@
1
- module Amistad
2
- module ActiveRecord
3
- module FriendModel
4
- def self.included(receiver)
5
- receiver.class_exec do
6
- include InstanceMethods
7
-
8
- has_many :friendships
9
-
10
- has_many :pending_invited,
11
- :through => :friendships,
12
- :source => :friend,
13
- :conditions => { :'friendships.pending' => true, :'friendships.blocker_id' => nil }
14
-
15
- has_many :invited,
16
- :through => :friendships,
17
- :source => :friend,
18
- :conditions => { :'friendships.pending' => false, :'friendships.blocker_id' => nil }
19
-
20
- has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
21
-
22
- has_many :pending_invited_by,
23
- :through => :inverse_friendships,
24
- :source => :user,
25
- :conditions => { :'friendships.pending' => true, :'friendships.blocker_id' => nil }
26
-
27
- has_many :invited_by,
28
- :through => :inverse_friendships,
29
- :source => :user,
30
- :conditions => { :'friendships.pending' => false, :'friendships.blocker_id' => nil }
31
-
32
- has_many :blocked_friendships, :class_name => "Friendship", :foreign_key => "blocker_id"
33
-
34
- has_many :blockades,
35
- :through => :blocked_friendships,
36
- :source => :friend,
37
- :conditions => "friend_id <> blocker_id"
38
-
39
- has_many :blockades_by,
40
- :through => :blocked_friendships,
41
- :source => :user,
42
- :conditions => "user_id <> blocker_id"
43
- end
44
- end
45
-
46
- module InstanceMethods
47
- # suggest a user to become a friend. If the operation succeeds, the method returns true, else false
48
- def invite(user)
49
- return false if user == self || find_any_friendship_with(user)
50
- Friendship.new(:user_id => self.id, :friend_id => user.id).save
51
- end
52
-
53
- # approve a friendship invitation. If the operation succeeds, the method returns true, else false
54
- def approve(user)
55
- friendship = find_any_friendship_with(user)
56
- return false if friendship.nil? || invited?(user)
57
- friendship.update_attribute(:pending, false)
58
- end
59
-
60
- # deletes a friendship
61
- def remove_friendship(user)
62
- friendship = find_any_friendship_with(user)
63
- return false if friendship.nil?
64
- friendship.destroy && friendship.destroyed?
65
- end
66
-
67
- # returns the list of approved friends
68
- def friends
69
- self.invited(true) + self.invited_by(true)
70
- end
71
-
72
- # total # of invited and invited_by without association loading
73
- def total_friends
74
- self.invited(false).count + self.invited_by(false).count
75
- end
76
-
77
- # blocks a friendship
78
- def block(user)
79
- friendship = find_any_friendship_with(user)
80
- return false if friendship.nil? || !friendship.can_block?(self)
81
- friendship.update_attribute(:blocker, self)
82
- end
83
-
84
- # unblocks a friendship
85
- def unblock(user)
86
- friendship = find_any_friendship_with(user)
87
- return false if friendship.nil? || !friendship.can_unblock?(self)
88
- friendship.update_attribute(:blocker, nil)
89
- end
90
-
91
- # returns the list of blocked friends
92
- def blocked
93
- self.blockades(true) + self.blockades_by(true)
94
- end
95
-
96
- # total # of blockades and blockedes_by without association loading
97
- def total_blocked
98
- self.blockades(false).count + self.blockades_by(false).count
99
- end
100
-
101
- # checks if a user is blocked
102
- def blocked?(user)
103
- blocked.include?(user)
104
- end
105
-
106
- # checks if a user is a friend
107
- def friend_with?(user)
108
- friends.include?(user)
109
- end
110
-
111
- # checks if a current user is connected to given user
112
- def connected_with?(user)
113
- find_any_friendship_with(user).present?
114
- end
115
-
116
- # checks if a current user received invitation from given user
117
- def invited_by?(user)
118
- friendship = find_any_friendship_with(user)
119
- return false if friendship.nil?
120
- friendship.user == user
121
- end
122
-
123
- # checks if a current user invited given user
124
- def invited?(user)
125
- friendship = find_any_friendship_with(user)
126
- return false if friendship.nil?
127
- friendship.friend == user
128
- end
129
-
130
- # return the list of the ones among its friends which are also friend with the given use
131
- def common_friends_with(user)
132
- self.friends & user.friends
133
- end
134
-
135
- # returns friendship with given user or nil
136
- def find_any_friendship_with(user)
137
- friendship = Friendship.where(:user_id => self.id, :friend_id => user.id).first
138
- if friendship.nil?
139
- friendship = Friendship.where(:user_id => user.id, :friend_id => self.id).first
140
- end
141
- friendship
142
- end
143
- end
144
- end
145
- end
146
- end