amistad 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- amistad (0.9.0)
4
+ amistad (0.9.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -48,6 +48,8 @@ GEM
48
48
  pg (0.14.1)
49
49
  plucky (0.5.2)
50
50
  mongo (~> 1.5)
51
+ polyamorous (0.5.0)
52
+ activerecord (~> 3.0)
51
53
  rake (0.9.2.2)
52
54
  rspec (2.11.0)
53
55
  rspec-core (~> 2.11.0)
@@ -60,6 +62,10 @@ GEM
60
62
  rspec-mocks (2.11.3)
61
63
  ruby-progressbar (1.0.2)
62
64
  sqlite3 (1.3.6)
65
+ squeel (1.0.11)
66
+ activerecord (~> 3.0)
67
+ activesupport (~> 3.0)
68
+ polyamorous (~> 0.5.0)
63
69
  tzinfo (0.3.33)
64
70
 
65
71
  PLATFORMS
@@ -80,3 +86,4 @@ DEPENDENCIES
80
86
  rake
81
87
  rspec
82
88
  sqlite3
89
+ squeel
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency "fuubar"
28
28
  s.add_development_dependency "awesome_print"
29
29
  s.add_development_dependency "mongo_mapper"
30
+ s.add_development_dependency "squeel"
30
31
 
31
32
  s.files = `git ls-files`.split("\n")
32
33
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,3 +1,5 @@
1
+ require 'squeel'
2
+
1
3
  module Amistad
2
4
  module ActiveRecordFriendModel
3
5
  extend ActiveSupport::Concern
@@ -72,13 +74,33 @@ module Amistad
72
74
  def remove_friendship(user)
73
75
  friendship = find_any_friendship_with(user)
74
76
  return false if friendship.nil?
75
- friendship.destroy && friendship.destroyed?
77
+ friendship.destroy
78
+ self.reload && user.reload if friendship.destroyed?
76
79
  end
77
80
 
78
81
  # returns the list of approved friends
79
82
  def friends
80
- self.reload
81
- self.invited + self.invited_by
83
+ friendship_model = Amistad::Friendships.const_get(:"#{Amistad.friendship_model}")
84
+
85
+ approved_friendships = friendship_model.where{
86
+ ( friendable_id == my{id} ) &
87
+ ( pending == false ) &
88
+ ( blocker_id == nil )
89
+ }
90
+
91
+ approved_inverse_friendships = friendship_model.where{
92
+ ( friend_id == my{id} ) &
93
+ ( pending == false ) &
94
+ ( blocker_id == nil )
95
+ }
96
+
97
+ predicate = self.class.where{
98
+ ( id.in(approved_friendships.select{friend_id}) ) |
99
+ ( id.in(approved_inverse_friendships.select{friendable_id}) )
100
+ }
101
+
102
+ # puts predicate.to_sql
103
+ predicate
82
104
  end
83
105
 
84
106
  # total # of invited and invited_by without association loading
@@ -1,3 +1,3 @@
1
1
  module Amistad
2
- VERSION = "0.9.0"
2
+ VERSION = "0.9.1"
3
3
  end
@@ -18,3 +18,7 @@ RSpec.configure do |config|
18
18
  DatabaseCleaner.clean
19
19
  end
20
20
  end
21
+
22
+ # needed in order to be able to compare arrays with ActiveRecord relations
23
+ RSpec::Matchers::OperatorMatcher.register(ActiveRecord::Relation, '=~', RSpec::Matchers::BuiltIn::MatchArray)
24
+
@@ -166,6 +166,7 @@ shared_examples_for "a friend model" do
166
166
  @mary.friends.size.should == 1
167
167
  @mary.friends.should include(@victoria)
168
168
  @mary.invited_by.should include(@victoria)
169
+
169
170
  @victoria.remove_friendship(@mary).should be_true
170
171
  @victoria.friends.size.should == 2
171
172
  @victoria.friends.should_not include(@mary)
@@ -182,6 +183,7 @@ shared_examples_for "a friend model" do
182
183
  @james.friends.size.should == 2
183
184
  @james.friends.should include(@victoria)
184
185
  @james.invited.should include(@victoria)
186
+
185
187
  @victoria.remove_friendship(@james).should be_true
186
188
  @victoria.friends.size.should == 2
187
189
  @victoria.friends.should_not include(@james)
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.9.0
4
+ version: 0.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -219,6 +219,22 @@ dependencies:
219
219
  - - ! '>='
220
220
  - !ruby/object:Gem::Version
221
221
  version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: squeel
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
222
238
  description: Extends your user model with friendships management methods
223
239
  email:
224
240
  - dev@raw1z.fr
@@ -277,7 +293,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
277
293
  version: '0'
278
294
  segments:
279
295
  - 0
280
- hash: 340186368039761558
296
+ hash: -1868389087235153998
281
297
  required_rubygems_version: !ruby/object:Gem::Requirement
282
298
  none: false
283
299
  requirements:
@@ -286,7 +302,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
302
  version: '0'
287
303
  segments:
288
304
  - 0
289
- hash: 340186368039761558
305
+ hash: -1868389087235153998
290
306
  requirements: []
291
307
  rubyforge_project: amistad
292
308
  rubygems_version: 1.8.23