amistad 0.3.1 → 0.4.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.
- data/README.markdown +3 -3
- data/Rakefile +10 -11
- data/VERSION +1 -1
- data/lib/amistad/friend_model.rb +11 -13
- data/lib/amistad/friendship_model.rb +5 -14
- data/lib/generators/amistad/install/install_generator.rb +24 -0
- data/lib/generators/{friendship → amistad/install}/templates/create_friendships.rb +0 -0
- data/lib/generators/{friendship → amistad/install}/templates/friendship.rb +1 -1
- data/spec/friend_model_spec.rb +2 -2
- data/spec/spec_helper.rb +8 -8
- metadata +13 -8
- data/lib/generators/friendship/friendship_generator.rb +0 -21
data/README.markdown
CHANGED
@@ -16,12 +16,12 @@ Then in your Gemfile add the following line :
|
|
16
16
|
|
17
17
|
First generate a friendship model :
|
18
18
|
|
19
|
-
rails generate
|
19
|
+
rails generate amistad:install
|
20
20
|
|
21
21
|
This commands create a new model called __friendship__ in *'app/models'* :
|
22
22
|
|
23
23
|
class Friendship < ActiveRecord::Base
|
24
|
-
|
24
|
+
include Amistad::FriendshipModel
|
25
25
|
end
|
26
26
|
|
27
27
|
It also creates a new migration for the friendship model so don't forget to migrate your database :
|
@@ -31,7 +31,7 @@ It also creates a new migration for the friendship model so don't forget to migr
|
|
31
31
|
Then activate __amistad__ in your user model :
|
32
32
|
|
33
33
|
class User < ActiveRecord::Base
|
34
|
-
|
34
|
+
include Amistad::FriendModel
|
35
35
|
end
|
36
36
|
|
37
37
|
## Friendships management ##
|
data/Rakefile
CHANGED
@@ -15,15 +15,14 @@ rescue LoadError
|
|
15
15
|
puts "Jeweler not available. Install it with: gem install jeweler"
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
Spec::Rake::SpecTask.new(:spec) do |t|
|
22
|
-
t.spec_opts = ["--format", "specdoc", "--color"]
|
23
|
-
t.spec_files = Dir.glob('spec/**/*_spec.rb')
|
24
|
-
|
25
|
-
Dir.mkdir('spec/db') if not File.directory?('spec/db')
|
26
|
-
end
|
27
|
-
rescue LoadError
|
28
|
-
puts "Rspec not available. Install it with: gem install rspec"
|
18
|
+
require 'rspec/core'
|
19
|
+
require 'rspec/core/rake_task'
|
20
|
+
Rspec::Core::RakeTask.new(:spec) do |spec|
|
29
21
|
end
|
22
|
+
|
23
|
+
Rspec::Core::RakeTask.new(:rcov) do |spec|
|
24
|
+
end
|
25
|
+
|
26
|
+
task :spec => :check_dependencies
|
27
|
+
|
28
|
+
task :default => :spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/amistad/friend_model.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
module Amistad
|
2
2
|
module FriendModel
|
3
|
-
def self.included(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
module ClassMethods
|
8
|
-
def acts_as_friend
|
3
|
+
def self.included(receiver)
|
4
|
+
receiver.class_exec do
|
5
|
+
include InstanceMethods
|
6
|
+
|
9
7
|
has_many :friendships
|
10
8
|
|
11
9
|
has_many :pending_invited,
|
@@ -29,14 +27,11 @@ module Amistad
|
|
29
27
|
:through => :inverse_friendships,
|
30
28
|
:source => :user,
|
31
29
|
:conditions => {:'friendships.pending' => false}
|
32
|
-
|
33
|
-
class_eval <<-EOV
|
34
|
-
include Amistad::FriendModel::InstanceMethods
|
35
|
-
EOV
|
36
30
|
end
|
37
31
|
end
|
38
32
|
|
39
33
|
module InstanceMethods
|
34
|
+
# suggest a user to become a friend. If the operation succeeds, the method returns true, else false
|
40
35
|
def invite(user)
|
41
36
|
return false if user == self
|
42
37
|
|
@@ -47,6 +42,7 @@ module Amistad
|
|
47
42
|
friendship.save
|
48
43
|
end
|
49
44
|
|
45
|
+
# approve a friendship invitation. If the operation succeeds, the method returns true, else false
|
50
46
|
def approve(user)
|
51
47
|
friendship = find_any_friendship_with(user)
|
52
48
|
return false if friendship.nil?
|
@@ -54,10 +50,12 @@ module Amistad
|
|
54
50
|
friendship.save
|
55
51
|
end
|
56
52
|
|
53
|
+
# returns the list of approved friends
|
57
54
|
def friends
|
58
55
|
self.invited(true) + self.invited_by(true)
|
59
56
|
end
|
60
57
|
|
58
|
+
# deletes a friendship
|
61
59
|
def remove(user)
|
62
60
|
friendship = find_any_friendship_with(user)
|
63
61
|
return false if friendship.nil?
|
@@ -65,10 +63,12 @@ module Amistad
|
|
65
63
|
friendship.destroyed?
|
66
64
|
end
|
67
65
|
|
66
|
+
# checks if a user is a friend
|
68
67
|
def is_friend_with?(user)
|
69
68
|
friends.include?(user)
|
70
69
|
end
|
71
70
|
|
71
|
+
# checks if a user send a friendship's invitation
|
72
72
|
def was_invited_by?(user)
|
73
73
|
inverse_friendships.each do |friendship|
|
74
74
|
return true if friendship.user == user
|
@@ -76,6 +76,7 @@ module Amistad
|
|
76
76
|
false
|
77
77
|
end
|
78
78
|
|
79
|
+
# return the list of the ones among its friends which are also friend with the given use
|
79
80
|
def common_friends_with(user)
|
80
81
|
self.friends & user.friends
|
81
82
|
end
|
@@ -94,6 +95,3 @@ module Amistad
|
|
94
95
|
end
|
95
96
|
end
|
96
97
|
|
97
|
-
class ActiveRecord::Base
|
98
|
-
include Amistad::FriendModel
|
99
|
-
end
|
@@ -1,24 +1,19 @@
|
|
1
1
|
module Amistad
|
2
2
|
module FriendshipModel
|
3
3
|
|
4
|
-
def self.included(
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
module ClassMethods
|
9
|
-
def acts_as_friendship
|
4
|
+
def self.included(receiver)
|
5
|
+
receiver.class_exec do
|
6
|
+
include InstanceMethods
|
7
|
+
|
10
8
|
belongs_to :user
|
11
9
|
belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
|
12
10
|
|
13
11
|
validates_presence_of :user_id, :friend_id
|
14
|
-
|
15
|
-
class_eval <<-EOV
|
16
|
-
include Amistad::FriendshipModel::InstanceMethods
|
17
|
-
EOV
|
18
12
|
end
|
19
13
|
end
|
20
14
|
|
21
15
|
module InstanceMethods
|
16
|
+
# returns true if a friendship has not been approved, else false
|
22
17
|
def pending?
|
23
18
|
self.pending
|
24
19
|
end
|
@@ -26,7 +21,3 @@ module Amistad
|
|
26
21
|
|
27
22
|
end
|
28
23
|
end
|
29
|
-
|
30
|
-
class ActiveRecord::Base
|
31
|
-
include Amistad::FriendshipModel
|
32
|
-
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
module Amistad
|
5
|
+
module Generators
|
6
|
+
class InstallGenerator < Rails::Generators::Base
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
|
9
|
+
def self.source_root
|
10
|
+
@source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.next_migration_number
|
14
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "This generator creates a friendship model and its migration file"
|
18
|
+
def create_friendship_model_files
|
19
|
+
template 'friendship.rb', 'app/models/friendship.rb'
|
20
|
+
template 'create_friendships.rb', "db/migrate/#{self.class.next_migration_number}_create_friendships.rb"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
File without changes
|
data/spec/friend_model_spec.rb
CHANGED
@@ -13,12 +13,12 @@ describe Amistad::FriendModel do
|
|
13
13
|
Friendship.delete_all
|
14
14
|
end
|
15
15
|
|
16
|
-
it "requests
|
16
|
+
it "requests friendships with other users" do
|
17
17
|
@john.invite(@jane).should == true
|
18
18
|
@victoria.invite(@john).should == true
|
19
19
|
end
|
20
20
|
|
21
|
-
it "approves
|
21
|
+
it "approves friendships requested by other users" do
|
22
22
|
@john.invite(@jane).should == true
|
23
23
|
@victoria.invite(@john).should == true
|
24
24
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'rspec/core'
|
4
|
+
require 'rspec/autorun'
|
2
5
|
require 'active_record'
|
3
6
|
require 'logger'
|
4
|
-
|
5
|
-
require File.join(File.dirname(__FILE__), '../lib/amistad')
|
7
|
+
require 'amistad'
|
6
8
|
|
7
9
|
ActiveRecord::Base.establish_connection(
|
8
10
|
:adapter => "sqlite3",
|
9
|
-
:database => "
|
11
|
+
:database => ":memory:"
|
10
12
|
)
|
11
13
|
|
12
14
|
ActiveRecord::Migration.verbose = false
|
@@ -23,12 +25,10 @@ ActiveRecord::Schema.define do
|
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
26
|
-
ActiveRecord::Base.logger = Logger.new(File.open('spec/db/database.log', 'a'))
|
27
|
-
|
28
28
|
class User < ActiveRecord::Base
|
29
|
-
|
29
|
+
include Amistad::FriendModel
|
30
30
|
end
|
31
31
|
|
32
32
|
class Friendship < ActiveRecord::Base
|
33
|
-
|
33
|
+
include Amistad::FriendshipModel
|
34
34
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Rawane ZOSSOU
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-09-11 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -35,9 +35,12 @@ files:
|
|
35
35
|
- lib/amistad.rb
|
36
36
|
- lib/amistad/friend_model.rb
|
37
37
|
- lib/amistad/friendship_model.rb
|
38
|
-
- lib/generators/
|
39
|
-
- lib/generators/
|
40
|
-
- lib/generators/
|
38
|
+
- lib/generators/amistad/install/install_generator.rb
|
39
|
+
- lib/generators/amistad/install/templates/create_friendships.rb
|
40
|
+
- lib/generators/amistad/install/templates/friendship.rb
|
41
|
+
- spec/friend_model_spec.rb
|
42
|
+
- spec/friendship_model_spec.rb
|
43
|
+
- spec/spec_helper.rb
|
41
44
|
has_rdoc: true
|
42
45
|
homepage: http://github.com/raw1z/amistad
|
43
46
|
licenses: []
|
@@ -48,6 +51,7 @@ rdoc_options:
|
|
48
51
|
require_paths:
|
49
52
|
- lib
|
50
53
|
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
51
55
|
requirements:
|
52
56
|
- - ">="
|
53
57
|
- !ruby/object:Gem::Version
|
@@ -55,6 +59,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
55
59
|
- 0
|
56
60
|
version: "0"
|
57
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
58
63
|
requirements:
|
59
64
|
- - ">="
|
60
65
|
- !ruby/object:Gem::Version
|
@@ -64,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
69
|
requirements: []
|
65
70
|
|
66
71
|
rubyforge_project:
|
67
|
-
rubygems_version: 1.3.
|
72
|
+
rubygems_version: 1.3.7
|
68
73
|
signing_key:
|
69
74
|
specification_version: 3
|
70
75
|
summary: Adds friendships management into a rails 3.0 application
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'rails/generators'
|
2
|
-
require 'rails/generators/migration'
|
3
|
-
|
4
|
-
class FriendshipGenerator < Rails::Generators::Base
|
5
|
-
include Rails::Generators::Migration
|
6
|
-
|
7
|
-
def self.next_migration_number
|
8
|
-
now = DateTime.now
|
9
|
-
"#{now.year}#{'%02d' % now.month}#{'%02d' % now.day}#{'%02d' % now.hour}#{'%02d' % now.minute}#{'%02d' % now.second}"
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.source_root
|
13
|
-
@source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
14
|
-
end
|
15
|
-
|
16
|
-
desc "This generator creates a friendship model and its migration file"
|
17
|
-
def create_friendship_model_files
|
18
|
-
template 'friendship.rb', 'app/models/friendship.rb'
|
19
|
-
template 'create_friendships.rb', "db/migrate/#{self.class.next_migration_number}_create_friendships.rb"
|
20
|
-
end
|
21
|
-
end
|