dm-is-friendly 0.10.2 → 0.10.25

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Kabari Hendrick
1
+ Copyright (c) 2010 Kabari Hendrick
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,63 +1,75 @@
1
- # dm-is-friendly #
1
+ dm-is-friendly
2
+ ==============
2
3
 
3
4
  DataMapper plugin that adds self-referential friendship functionality to your models.
4
5
 
5
- **Note: This is NOT officially part of the DataMapper (dm-core, dm-more) project, it just works with DataMapper.
6
-
7
6
  ## Why is this plugin useful? ##
8
7
 
9
- If you're building a social app, it will probably save you 12 minutes, tops.
8
+ If you're building an app that require this type of relation then it will probably save some time to use this instead of rolling our own :)
10
9
 
11
10
  ## Installation ##
12
11
 
13
- Probably make sure you can use github gems first.
14
-
15
- $ sudo gem install kabari-dm-is-friendly.
12
+ $ [sudo] gem install dm-is-friendly.
16
13
 
17
- Create a file for the friendship (or whatever you want to call it) class. An example is below.
14
+ Create a file for the friendship (or whatever you want to call it) class.
18
15
 
19
- ## Example DataMapper resource (i.e. model) ##
16
+ ## Example DataMapper model ##
20
17
 
21
- # /app/models/friendship.rb
22
18
  class Friendship
23
19
  include DataMapper::Resource
24
-
25
- # you need all of this
26
20
  property :person_id, Integer, :key => true
27
21
  property :friend_id, Integer, :key => true
28
- property :accepted_at, DateTime, :nullable => true
29
-
30
- belongs_to :person, :child_key => [:person_id]
31
- belongs_to :friend, :class_name => "Person", :child_key => [:friend_id]
32
-
22
+ property :accepted_at, DateTime
23
+
24
+ belongs_to :person
25
+ belongs_to :friend, :model => "Person", :child_key => [:friend_id]
26
+
33
27
  end
34
-
35
- # /app/models/person.rb
28
+
36
29
  class Person
37
30
  include DataMapper::Resource
38
- property :id, Integer, :serial => true
31
+ property :id, Serial
39
32
  property :name, String
40
-
41
- # you need this part
42
- is :friendly
33
+
34
+ is :friendly #, :friendship_class => "Friendship", :require_acceptance => true
43
35
  end
36
+
37
+ ## Use It ##
38
+
39
+ @quentin = Person.create(:name => "quentin")
40
+ @joe = Person.create(:name => "joe")
44
41
 
45
- ### There are options ###
46
-
47
- # /some/folder/homie.rb
48
- class Homie
49
- property :gangster_id, Integer, :key => true
50
- property :friend_id, Integer, :key => true
51
- property :accepted_at, DateTime, :nullable => true
42
+ # request friendship
43
+ @joe.request_friendship(@quentin)
44
+
45
+ # Find friend requests sent
46
+ @joe.friendship_requests # => [#<Person @id=1 @name="quentin">]
47
+ @joe.friendship_requested?(@quentin) # => true
48
+
49
+ # Find recieve friend requests
50
+ @quentin.friendships_to_accept # => [#<Person @id=2 @name="joe">]
51
+ @quentin.friendship_to_accept?(@joe) # => true
52
+
53
+ # Check friendships
54
+ @quentin.is_friends_with?(@joe) # => false
55
+
56
+ # Accept friendships
57
+ @quentin.confirm_friendship_with(@joe)
58
+ @quentin.is_friends_with?(@joe) # => true
59
+
60
+ # End friendships :(
61
+ @quentin.end_friendship_with(@joe) # => true
62
+
63
+ ### Options ###
64
+
65
+ **:require_acceptance**
66
+ Set this if friendships should be accepted before showing up in the query of friends.
67
+ Default: true
68
+ **Must provide the :accepted_at Property*
69
+
70
+ **:friendship_class**
71
+ Set this to something other than "Friendship" if you want.
72
+ Default: "Friendship"
52
73
 
53
- belongs_to :gangster
54
- belongs_to :homie, :child_key => [:friend_id]
55
- end
56
74
 
57
- # /some/folder/gangster.rb
58
- class Gangster
59
- is :friendly, :friendship_class => "Homie", :require_acceptance => false
60
- end
61
-
62
- This would change the friendship class to Homie, and make it not require friendships to be accepted. I admit, it was kind of dumb to do it that way, but I just made this into a gem so that it wasn't lying around my code base. I'll make it more useful in the next run.
63
75
 
data/Rakefile CHANGED
@@ -1,20 +1,17 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
- require File.join(File.dirname(__FILE__), *%w[lib is version])
4
-
5
- version = DataMapper::Is::Friendly::VERSION
6
3
 
7
4
  begin
8
5
  require 'jeweler'
9
- Jeweler::Tasks.new do |gem|
10
- gem.name = "dm-is-friendly"
11
- gem.summary = %Q{DataMapper plugin that adds self-referential friendship functionality to your models.}
12
- gem.email = "kabari@gmail.com"
13
- gem.homepage = "http://github.com/kabari/dm-is-friendly"
14
- gem.authors = ["Kabari Hendrick"]
15
- gem.add_dependency("extlib", "~> 0.9.14")
16
- gem.add_dependency("dm-core", "~> #{version}")
17
- gem.add_dependency("dm-aggregates", "~> #{version}")
6
+ Jeweler::Tasks.new do |gemspec|
7
+ gemspec.name = "dm-is-friendly"
8
+ gemspec.summary = %Q{DataMapper plugin that adds self-referential friendship functionality to your models.}
9
+ gemspec.email = "kabari@gmail.com"
10
+ gemspec.homepage = "http://github.com/kabari/dm-is-friendly"
11
+ gemspec.authors = ["Kabari Hendrick"]
12
+ gemspec.add_dependency("extlib", "~> 0.9.14")
13
+ gemspec.add_dependency("dm-core", "~> 0.10.2")
14
+ gemspec.add_dependency("dm-aggregates", "~> 0.10.2")
18
15
  end
19
16
  Jeweler::GemcutterTasks.new
20
17
  rescue LoadError
@@ -40,8 +37,18 @@ require 'rake/rdoctask'
40
37
 
41
38
  Rake::RDocTask.new do |rdoc|
42
39
  rdoc.rdoc_dir = 'rdoc'
43
- rdoc.title = "dm-is-friendly #{version}"
40
+ rdoc.title = "dm-is-friendly 0.10.21"
44
41
  rdoc.rdoc_files.include('README*')
45
42
  rdoc.rdoc_files.include('lib/**/*.rb')
46
43
  end
47
44
 
45
+ begin
46
+ require 'yard'
47
+ YARD::Rake::YardocTask.new do |t|
48
+ t.files = ['lib/**/*.rb', 'README.markdown', 'LICENSE']
49
+ end
50
+ rescue LoadError
51
+ task :yard do
52
+ abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
53
+ end
54
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.2
1
+ 0.10.25
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{dm-is-friendly}
8
- s.version = "0.10.2"
8
+ s.version = "0.10.25"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kabari Hendrick"]
12
- s.date = %q{2010-01-11}
12
+ s.date = %q{2010-03-14}
13
13
  s.email = %q{kabari@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -25,7 +25,6 @@ Gem::Specification.new do |s|
25
25
  "dm-is-friendly.gemspec",
26
26
  "lib/dm-is-friendly.rb",
27
27
  "lib/is/friendly.rb",
28
- "lib/is/version.rb",
29
28
  "spec/dm-is-friendly_spec.rb",
30
29
  "spec/spec.opts",
31
30
  "spec/spec_helper.rb"
@@ -33,7 +32,7 @@ Gem::Specification.new do |s|
33
32
  s.homepage = %q{http://github.com/kabari/dm-is-friendly}
34
33
  s.rdoc_options = ["--charset=UTF-8"]
35
34
  s.require_paths = ["lib"]
36
- s.rubygems_version = %q{1.3.5}
35
+ s.rubygems_version = %q{1.3.6}
37
36
  s.summary = %q{DataMapper plugin that adds self-referential friendship functionality to your models.}
38
37
  s.test_files = [
39
38
  "spec/dm-is-friendly_spec.rb",
@@ -1,17 +1,5 @@
1
- # Needed to import datamapper and other gems
2
- require 'rubygems'
3
1
  require 'pathname'
4
2
 
5
- # Add all external dependencies for the plugin here
6
- gem 'extlib', '~>0.9.14'
7
- require "extlib"
8
-
9
- gem 'dm-core', '~>0.10.2'
10
- require 'dm-core'
11
-
12
- gem 'dm-aggregates', '~>0.10.2'
13
- require "dm-aggregates"
14
-
15
3
  # Require plugin-files
16
4
  require Pathname(__FILE__).dirname.expand_path / 'is' / 'friendly'
17
5
 
@@ -43,39 +43,47 @@ module DataMapper
43
43
  module InstanceMethods
44
44
 
45
45
  # returns all of the friends this person has that are accepted
46
+ # @return [DataMapper::Collection] All the person's friends
46
47
  def friends
47
48
  friendship_requests(nil,true).union(friendships_to_accept(nil,true))
48
49
  end
49
50
 
50
51
  # returns all the people I have requested frienship from
52
+ # @param friend (nil)
53
+ # @param include_accepted (false)
54
+ # @return [DataMapper::Collection] All the people that the person has sent friendship requests to
51
55
  def friendship_requests(friend = nil, include_accepted = false)
52
56
  conditions = {}
53
57
  friend_acceptance_condition(conditions, include_accepted)
54
58
  friend_scope_condition(conditions, friend)
55
59
 
56
60
  conditions[friendly_options.friendship_foreign_key] = self.id
57
- ids = friendly_options.friendship_class.all(conditions).collect(&:friend_id)
58
- self.class.all( :id => ids)
61
+ friendly_options.friendship_class.all(conditions).friend
59
62
  end
60
63
 
61
64
  # returns all the people that have requested my friendship
65
+ # @param friend (nil)
66
+ # @param include_accepted (false)
67
+ # @return [DataMapper::Collection] All the people that have requested friendship
62
68
  def friendships_to_accept(friend = nil, include_accepted = false)
63
69
  conditions = {}
64
70
  friend_acceptance_condition(conditions, include_accepted)
65
71
  friend_scope_condition(conditions, friend, true)
66
72
 
67
- conditions[:friend_id] = self.id
68
- ids = friendly_options.friendship_class.all(conditions).collect(&friendly_options.friendship_foreign_key)
69
- self.class.all(:id => ids)
73
+ conditions[:friend_id] = self.id
74
+ friendly_options.friendship_class.all(conditions).send(friendly_options.friend_class.name.downcase)
70
75
  end
71
76
 
72
77
  # see if there is a pending friendship request from this person to another
78
+ # @param friend
79
+ # @return [true, false]
73
80
  def friendship_requested?(friend)
74
- # return false unless friendly_options.require_acceptance?
75
81
  !friendship_requests(friend).empty?
76
82
  end
77
83
 
78
84
  # see if user has a friend request to accept from this person
85
+ # @param friend
86
+ # @return [true, false]
79
87
  def friendship_to_accept?(friend)
80
88
  return false unless friendly_options.require_acceptance?
81
89
  !friendships_to_accept(friend).empty?
@@ -83,17 +91,23 @@ module DataMapper
83
91
 
84
92
  # Accepts a user object and returns true if both users are
85
93
  # friends and the friendship has been accepted.
94
+ # @param friend
95
+ # @return [true, false]
86
96
  def is_friends_with?(friend)
87
97
  !self.friendship(friend).nil?
88
98
  end
89
99
 
90
100
  # request friendship from "friend"
101
+ # @param friend The friend who's friendship is being requested
102
+ # @return The instance of the friendship_class
91
103
  def request_friendship(friend)
92
104
  return false if friendship(friend)
93
105
  self.friendships.create(:friend => friend)
94
106
  end
95
107
 
96
108
  # Accepts a user and updates an existing friendship to be accepted.
109
+ # @param friend The friend that needs to be confirmed
110
+ # @return [self]
97
111
  def confirm_friendship_with(friend)
98
112
  self.friendship(friend,{:accepted_at => nil}).update({:accepted_at => Time.now})
99
113
  # reload so old relationship won't be lingering in the IdentityMap
@@ -102,12 +116,14 @@ module DataMapper
102
116
  end
103
117
 
104
118
  # Accepts a user and deletes a friendship between both users.
119
+ # @param friend The friend who's friendship will now end
120
+ # @return [true, false] Outcome of model.destroy
105
121
  def end_friendship_with(friend)
106
122
  self.friendship(friend).destroy if self.is_friends_with?(friend)
107
123
  end
108
124
 
109
125
  protected
110
- # Accepts a user and returns the friendship associated with both users.
126
+ # Accepts a user and returns the friendship instance associated with both users.
111
127
  def friendship(friend, opts = {})
112
128
  friendly_options.friendship_class.first({:conditions => ["(#{friendly_options.friendship_foreign_key} = ? AND friend_id = ?) OR (friend_id = ? AND #{friendly_options.friendship_foreign_key} = ?)", self.id, friend.id, self.id, friend.id]}.merge(opts) )
113
129
  end
@@ -4,7 +4,7 @@ class Friendship
4
4
  include DataMapper::Resource
5
5
  property :person_id, Integer, :key => true
6
6
  property :friend_id, Integer, :key => true
7
- property :accepted_at, DateTime, :required => false
7
+ property :accepted_at, DateTime
8
8
 
9
9
  belongs_to :person
10
10
  belongs_to :friend, :model => "Person", :child_key => [:friend_id]
@@ -15,175 +15,179 @@ class Person
15
15
  include DataMapper::Resource
16
16
  property :id, Serial
17
17
  property :name, String
18
+ property :deleted_at, ParanoidDateTime
18
19
 
19
20
  is :friendly
20
21
  end
21
22
 
23
+ # new classes
24
+ class Homie
25
+ include DataMapper::Resource
26
+ property :gangster_id, Integer, :key => true
27
+ property :friend_id, Integer, :key => true
28
+
29
+ belongs_to :gangster
30
+ belongs_to :friend, :model => "Gangster", :child_key => [:friend_id]
31
+
32
+ end
33
+
34
+ class Gangster
35
+ include DataMapper::Resource
36
+ property :id, Serial
37
+ property :name, String
38
+ is :friendly, :friendship_class => "Homie", :require_acceptance => false
39
+ end
40
+
22
41
  describe 'DataMapper::Is::Friendly' do
23
- before(:all) do
24
- Friendship.auto_migrate!; Person.auto_migrate!
25
- end
42
+ with_adapters do
43
+ before(:all) do
44
+ Friendship.auto_migrate!; Person.auto_migrate!
45
+ end
26
46
 
27
- it "should have proper options set" do
28
- Person.friendly_options.friendship_class.should == Friendship
29
- Person.friendly_options.friend_class.should == Person
30
- Person.friendly_options.friendship_foreign_key.should == :person_id
31
- Person.friendly_options.require_acceptance?.should == true
32
- end
33
- end
47
+ it "should have proper options set" do
48
+ Person.friendly_options.friendship_class.should == Friendship
49
+ Person.friendly_options.friend_class.should == Person
50
+ Person.friendly_options.friendship_foreign_key.should == :person_id
51
+ Person.friendly_options.require_acceptance?.should == true
52
+ end
34
53
 
35
- describe 'DataMapper::Is::Friendly', "with friendships" do
36
- before(:all) do
37
- Friendship.auto_migrate!; Person.auto_migrate!
54
+ describe "with friendships" do
55
+ before(:all) do
56
+ Friendship.auto_migrate!; Person.auto_migrate!
38
57
 
39
- @quentin = Person.create(:name => "quentin")
40
- @aaron = Person.create(:name => "aaron") # state: "pending"
41
- @joe = Person.create(:name => "joe")
42
- end
58
+ @quentin = Person.create(:name => "quentin")
59
+ @aaron = Person.create(:name => "aaron") # state: "pending"
60
+ @joe = Person.create(:name => "joe")
61
+ end
43
62
 
44
- it "should work" do
45
- lambda do
46
- @joe.request_friendship(@quentin)
47
- end.should change(Friendship, :count).by(1)
48
- end
63
+ it "should work" do
64
+ lambda do
65
+ @joe.request_friendship(@quentin)
66
+ end.should change(Friendship, :count).by(1)
67
+ end
49
68
 
50
- it "should only recognize friends that are confirmed" do
51
- @joe.friends.should_not include(@quentin)
52
- @quentin.friends.should_not include(@joe)
53
- end
69
+ it "should only recognize friends that are confirmed" do
70
+ @joe.friends.should_not include(@quentin)
71
+ @quentin.friends.should_not include(@joe)
72
+ end
54
73
 
55
- it "should set the proper relationships" do
56
- # see if associations are correct
57
- log("@quention.friendship_requests")
58
- @quentin.friendship_requests.should_not include(@joe)
59
- log("@joe.friendship_requests")
60
- @joe.friendship_requests.should include(@quentin)
61
- log("@quention.friendships_to_accept")
62
- @quentin.friendships_to_accept.should include(@joe)
63
- log("@joe.friendships_to_accept")
64
- @joe.friendships_to_accept.should_not include(@quentin)
65
- end
74
+ it "should set the proper relationships" do
75
+ # see if associations are correct
76
+ log("@quention.friendship_requests")
77
+ @quentin.friendship_requests.should_not include(@joe)
78
+ log("@joe.friendship_requests")
79
+ @joe.friendship_requests.should include(@quentin)
80
+ log("@quention.friendships_to_accept")
81
+ @quentin.friendships_to_accept.should include(@joe)
82
+ log("@joe.friendships_to_accept")
83
+ @joe.friendships_to_accept.should_not include(@quentin)
84
+ end
66
85
 
67
- it "should also work with convenience methods" do
68
- @quentin.friendship_to_accept?(@joe).should be_true
69
- @joe.friendship_requested?(@quentin).should be_true
70
- end
86
+ it "should also work with convenience methods" do
87
+ @quentin.friendship_to_accept?(@joe).should be_true
88
+ @joe.friendship_requested?(@quentin).should be_true
89
+ end
71
90
 
72
- it "should have to be confirmed" do
73
- # confirm the request
74
- @quentin.confirm_friendship_with(@joe)
91
+ it "should have to be confirmed" do
92
+ # confirm the request
93
+ @quentin.confirm_friendship_with(@joe)
75
94
 
76
- # see if associations are correct
77
- @quentin.friends.should include(@joe)
78
- @joe.friends.should include(@quentin)
95
+ # see if associations are correct
96
+ @quentin.friends.should include(@joe)
97
+ @joe.friends.should include(@quentin)
79
98
 
80
- @quentin.friendship_to_accept?(@joe).should be_false
81
- @joe.friendship_requested?(@quentin).should be_false
82
- end
99
+ @quentin.friendship_to_accept?(@joe).should be_false
100
+ @joe.friendship_requested?(@quentin).should be_false
101
+ end
83
102
 
84
- it "should not be added twice" do
85
- lambda do
86
- @joe.request_friendship(@quentin)
87
- @joe.should have(1).friends
88
- @quentin.should have(1).friends
89
- end.should_not change(Friendship,:count)
90
- end
103
+ it "should not be added twice" do
104
+ lambda do
105
+ @joe.request_friendship(@quentin)
106
+ @joe.should have(1).friends
107
+ @quentin.should have(1).friends
108
+ end.should_not change(Friendship,:count)
109
+ end
91
110
 
92
- it "should be able to have multiple friends" do
93
- @joe.request_friendship(@aaron)
94
- @joe.friendship_requested?(@aaron).should be_true
95
- @aaron.friendship_to_accept?(@joe).should be_true
96
- end
111
+ it "should be able to have multiple friends" do
112
+ @joe.request_friendship(@aaron)
113
+ @joe.friendship_requested?(@aaron).should be_true
114
+ @aaron.friendship_to_accept?(@joe).should be_true
115
+ end
97
116
 
98
- it "should be able to delete friendships" do
99
- lambda do
100
- # joe sleeps with quentin's wife perhaps
101
- @quentin.end_friendship_with(@joe)
102
- end.should change(Friendship,:count)
117
+ it "should be able to delete friendships" do
118
+ lambda do
119
+ # joe sleeps with quentin's wife perhaps
120
+ @quentin.end_friendship_with(@joe)
121
+ end.should change(Friendship,:count)
103
122
 
104
- @quentin.reload; @joe.reload
123
+ @quentin.reload; @joe.reload
105
124
 
106
- @quentin.friends.should_not include(@joe)
107
- @joe.friends.should_not include(@quentin)
108
- end
125
+ @quentin.friends.should_not include(@joe)
126
+ @joe.friends.should_not include(@quentin)
127
+ end
109
128
 
110
- end
129
+ end
111
130
 
112
- # new classes
113
- class Homie
114
- include DataMapper::Resource
115
- property :gangster_id, Integer, :key => true
116
- property :friend_id, Integer, :key => true
117
-
118
- belongs_to :gangster
119
- belongs_to :friend, :model => "Gangster", :child_key => [:friend_id]
120
-
121
- end
122
131
 
123
- class Gangster
124
- include DataMapper::Resource
125
- property :id, Serial
126
- property :name, String
127
- is :friendly, :friendship_class => "Homie", :require_acceptance => false
128
- end
129
-
130
- describe 'DataMapper::Is::Friendly', "without requiring acceptance" do
131
- before(:all) do
132
- Homie.auto_migrate!; Gangster.auto_migrate!
132
+ describe "without requiring acceptance" do
133
+ before(:all) do
134
+ Homie.auto_migrate!; Gangster.auto_migrate!
133
135
 
134
- @quentin = Gangster.create(:name => "quentin")
135
- @aaron = Gangster.create(:name => "aaron") # state: "pending"
136
- @joe = Gangster.create(:name => "joe")
137
- end
136
+ @quentin = Gangster.create(:name => "quentin")
137
+ @aaron = Gangster.create(:name => "aaron") # state: "pending"
138
+ @joe = Gangster.create(:name => "joe")
139
+ end
138
140
 
139
- it "should work" do
140
- lambda do
141
- @joe.request_friendship(@quentin)
142
- end.should change(Homie, :count).by(1)
143
- end
141
+ it "should work" do
142
+ lambda do
143
+ @joe.request_friendship(@quentin)
144
+ end.should change(Homie, :count).by(1)
145
+ end
144
146
 
145
- it "should recognize every friend request" do
146
- @joe.friends.should include(@quentin)
147
- @quentin.friends.should include(@joe)
148
- end
147
+ it "should recognize every friend request" do
148
+ @joe.friends.should include(@quentin)
149
+ @quentin.friends.should include(@joe)
150
+ end
149
151
 
150
- it "should set the proper relationships" do
151
- # see if associations are correct
152
- @quentin.friendship_requests.should_not include(@joe)
153
- @joe.friendship_requests.should include(@quentin)
154
- @quentin.friendships_to_accept.should include(@joe)
155
- @joe.friendships_to_accept.should_not include(@quentin)
156
- end
152
+ it "should set the proper relationships" do
153
+ # see if associations are correct
154
+ @quentin.friendship_requests.should_not include(@joe)
155
+ @joe.friendship_requests.should include(@quentin)
156
+ @quentin.friendships_to_accept.should include(@joe)
157
+ @joe.friendships_to_accept.should_not include(@quentin)
158
+ end
157
159
 
158
- it "should not need acceptance" do
159
- @quentin.friendship_to_accept?(@joe).should be_false
160
- @joe.friendship_requested?(@quentin).should be_true
161
- end
160
+ it "should not need acceptance" do
161
+ @quentin.friendship_to_accept?(@joe).should be_false
162
+ @joe.friendship_requested?(@quentin).should be_true
163
+ end
162
164
 
163
- it "should not be added twice" do
164
- lambda do
165
- @joe.request_friendship(@quentin)
166
- @joe.should have(1).friends
167
- @quentin.should have(1).friends
168
- end.should_not change(Homie,:count)
169
- end
165
+ it "should not be added twice" do
166
+ lambda do
167
+ @joe.request_friendship(@quentin)
168
+ @joe.should have(1).friends
169
+ @quentin.should have(1).friends
170
+ end.should_not change(Homie,:count)
171
+ end
170
172
 
171
- it "should be able to have multiple friends" do
172
- @joe.request_friendship(@aaron)
173
- @joe.friendship_requested?(@aaron).should be_true
174
- @aaron.friendship_to_accept?(@joe).should be_false
175
- end
173
+ it "should be able to have multiple friends" do
174
+ @joe.request_friendship(@aaron)
175
+ @joe.friendship_requested?(@aaron).should be_true
176
+ @aaron.friendship_to_accept?(@joe).should be_false
177
+ end
176
178
 
177
- it "should be able to delete friendships" do
178
- lambda do
179
- # joe sleeps with quentin's wife perhaps
180
- @quentin.end_friendship_with(@joe)
181
- end.should change(Homie,:count)
179
+ it "should be able to delete friendships" do
180
+ lambda do
181
+ # joe sleeps with quentin's wife perhaps
182
+ @quentin.end_friendship_with(@joe)
183
+ end.should change(Homie,:count)
182
184
 
183
- @quentin.reload; @joe.reload
185
+ @quentin.reload; @joe.reload
184
186
 
185
- @quentin.friends.should_not include(@joe)
186
- @joe.friends.should_not include(@quentin)
187
- end
187
+ @quentin.friends.should_not include(@joe)
188
+ @joe.friends.should_not include(@quentin)
189
+ end
188
190
 
189
- end
191
+ end
192
+ end
193
+ end
@@ -1,3 +1,2 @@
1
1
  --colour
2
- --format progress
3
- --loadby mtime
2
+ --format nested
@@ -1,19 +1,28 @@
1
- # path to my git clones of the latest dm-core
1
+ # path to my git clones of the latest dm-core and extlib
2
2
  $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), *%w[.. ..]))
3
3
 
4
4
  require 'pathname'
5
5
  require 'rubygems'
6
-
7
- gem 'rspec', '~>1.2.9'
8
6
  require 'spec'
9
7
 
8
+ # Add all external dependencies for the plugin here
9
+ gem 'extlib', '~>0.9.14'
10
+ require "extlib"
11
+
12
+ gem 'dm-core', '~>0.10.2'
13
+ require 'dm-core'
14
+
15
+ gem 'dm-aggregates', '~>0.10.2'
16
+ require "dm-aggregates"
17
+
10
18
  require Pathname(__FILE__).dirname.expand_path.parent + 'lib/dm-is-friendly'
11
19
 
12
20
  DataMapper::Logger.new("test.log", :debug)
21
+ # DataMapper.logger.auto_flush = true
13
22
 
14
23
  def load_driver(name, default_uri)
15
- return false if ENV['ADAPTER'] != name.to_s
16
-
24
+ return false unless DRIVERS[name]
25
+
17
26
  begin
18
27
  DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
19
28
  DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
@@ -24,12 +33,31 @@ def load_driver(name, default_uri)
24
33
  end
25
34
  end
26
35
 
27
- ENV['ADAPTER'] ||= 'sqlite3'
28
-
29
- HAS_SQLITE3 = load_driver(:sqlite3, 'sqlite3::memory:')
30
- HAS_MYSQL = load_driver(:mysql, 'mysql://localhost/dm_is_friendly_test')
31
- HAS_POSTGRES = load_driver(:postgres, 'postgres://postgres@localhost/dm_is_friendly_test')
36
+ ENV['ADAPTERS'] ||= 'sqlite3 mysql'
37
+
38
+ DRIVERS = {
39
+ :sqlite3 => 'sqlite3::memory:',
40
+ :mysql => 'mysql://root:pass@localhost/dm_is_friendly_test',
41
+ :postgres => 'postgres://postgres@localhost/dm_is_friendly_test'
42
+ }
43
+
44
+ ADAPTERS = ENV["ADAPTERS"].split(' ')
45
+
46
+ module SpecAdapterHelper
47
+ def with_adapters(&block)
48
+ ::ADAPTERS.each do |adapter|
49
+ describe "with #{adapter} adapter" do
50
+ before(:all) do
51
+ load_driver(adapter.to_sym, ::DRIVERS[adapter.to_sym])
52
+ end
53
+
54
+ instance_eval(&block)
55
+ end
56
+ end
57
+ end
58
+ end
32
59
 
33
60
  Spec::Runner.configure do |conf|
34
61
  def log(msg); DataMapper.logger.push("****** #{msg}"); end
35
- end
62
+ conf.extend(SpecAdapterHelper)
63
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-is-friendly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 10
8
+ - 25
9
+ version: 0.10.25
5
10
  platform: ruby
6
11
  authors:
7
12
  - Kabari Hendrick
@@ -9,39 +14,51 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-01-11 00:00:00 -06:00
17
+ date: 2010-03-14 00:00:00 -06:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: extlib
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ~>
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 9
30
+ - 14
23
31
  version: 0.9.14
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: dm-core
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ~>
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 10
44
+ - 2
33
45
  version: 0.10.2
34
- version:
46
+ type: :runtime
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: dm-aggregates
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
40
52
  requirements:
41
53
  - - ~>
42
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 10
58
+ - 2
43
59
  version: 0.10.2
44
- version:
60
+ type: :runtime
61
+ version_requirements: *id003
45
62
  description:
46
63
  email: kabari@gmail.com
47
64
  executables: []
@@ -61,7 +78,6 @@ files:
61
78
  - dm-is-friendly.gemspec
62
79
  - lib/dm-is-friendly.rb
63
80
  - lib/is/friendly.rb
64
- - lib/is/version.rb
65
81
  - spec/dm-is-friendly_spec.rb
66
82
  - spec/spec.opts
67
83
  - spec/spec_helper.rb
@@ -78,18 +94,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
94
  requirements:
79
95
  - - ">="
80
96
  - !ruby/object:Gem::Version
97
+ segments:
98
+ - 0
81
99
  version: "0"
82
- version:
83
100
  required_rubygems_version: !ruby/object:Gem::Requirement
84
101
  requirements:
85
102
  - - ">="
86
103
  - !ruby/object:Gem::Version
104
+ segments:
105
+ - 0
87
106
  version: "0"
88
- version:
89
107
  requirements: []
90
108
 
91
109
  rubyforge_project:
92
- rubygems_version: 1.3.5
110
+ rubygems_version: 1.3.6
93
111
  signing_key:
94
112
  specification_version: 3
95
113
  summary: DataMapper plugin that adds self-referential friendship functionality to your models.
@@ -1,10 +0,0 @@
1
- require "yaml"
2
-
3
- module DataMapper
4
- module Is
5
- module Friendly
6
- # this is silly...
7
- VERSION = File.open(File.join(File.dirname(__FILE__), *%w[.. .. VERSION])) { |file| YAML.load(file) }
8
- end
9
- end
10
- end