connections 0.0.2 → 0.0.3

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.md CHANGED
@@ -1,12 +1,14 @@
1
1
  # Connections
2
2
 
3
- Most social apps needs some kind of follow/like/watch/stalk/etc
4
- feature that connects one model to another.
3
+ Most social apps need some kind of follow/like/watch/stalk/etc
4
+ features that connects one model to another.
5
5
 
6
- Instead of having to recreate this functionality for every project we
6
+ Instead of having to recreate this functionality for every project I
7
7
  decided to create a gem that easily allows you to add these features
8
8
  using any naming you prefer.
9
9
 
10
+ [![Build Status](https://secure.travis-ci.org/balvig/connections.png?branch=master)](http://travis-ci.org/balvig/connections)
11
+
10
12
  ## Installation
11
13
 
12
14
  Add the gem to the gemfile:
@@ -20,7 +22,8 @@ keeping track of what is connected to what.
20
22
 
21
23
  ## Usage
22
24
 
23
- Use `connects_with` and `connectable_with` to add connection capabilities to any model using
25
+ Use `connects_with` to enable a model to connect to other models and
26
+ `connectable_with ` to allow a model to be connected to using
24
27
  whatever naming scheme you prefer (follow, like, watch, etc)
25
28
 
26
29
  class User < ActiveRecord::Base
@@ -32,14 +35,16 @@ whatever naming scheme you prefer (follow, like, watch, etc)
32
35
  connectable_with :like
33
36
  end
34
37
 
35
- This will add following methods:
38
+ Depending on the naming scheme you choose Connections will try to figure out the
39
+ grammar and add appropriately named methods. For example in the case of
40
+ "Follow" and "Like" the following methods will be added:
36
41
 
37
42
  # Follow
38
43
  user.follow(other_user) # Creates a 'Follow' connection from user -> other_user
39
44
  user.unfollow(other_user) # Removes 'Follow' connection between user -> other_user
40
45
  user.toggle_follow(other_user) # Toggles the connection on/off (useful for toggle buttons)
41
46
  user.follows?(other_user) # Returns true if the user if following other_user
42
- user.followings(:user) # Returns a list of all the users the user is following
47
+ user.following(:user) # Returns a list of all the users the user is following
43
48
  other_user.followers(:user) #Returns a list of all the user's followers
44
49
 
45
50
  # Like
@@ -47,7 +52,7 @@ This will add following methods:
47
52
  user.unlike(post)
48
53
  user.toggle_like(post)
49
54
  user.likes?(post)
50
- user.likings(:post)
55
+ user.liking(:post)
51
56
  post.likers(:user)
52
57
 
53
58
  That's it! If you want to add extra functionality to the join model (such
@@ -60,7 +65,7 @@ project like this:
60
65
 
61
66
  ## Credits
62
67
 
63
- This gem was inspired by [socialization](https://github.com/cmer/socialization) that although it didn't quite do what we needed is a pretty useful tool.
68
+ This gem was inspired by [socialization](https://github.com/cmer/socialization) that although it didn't quite do what I needed is a pretty useful tool in itself.
64
69
 
65
70
 
66
71
  ## Copyright
@@ -11,7 +11,7 @@ module Connections
11
11
  # user.followers(:user)
12
12
  define_method :"#{t.to_s.sub(/e$/,'')}ers" do |class_name|
13
13
  klass = class_name.to_s.classify.constantize
14
- klass.joins(:connections).where("connections_connections.type = ? AND connectable_type = ? AND connectable_id = ?", t.to_s.classify, self.class.table_name.classify, self)
14
+ klass.joins(:connections).where("connections_connections.type = ? AND connectable_type = ? AND connectable_id = ?", t.to_s.classify, self.class.base_class.to_s, self)
15
15
  end
16
16
  end
17
17
  end
@@ -44,7 +44,7 @@ module Connections
44
44
  # user.following(:user)
45
45
  define_method :"#{t.to_s.sub(/e$/,'')}ing" do |class_name|
46
46
  klass = class_name.to_s.classify.constantize
47
- klass.joins(:incoming_connections).where("connections_connections.type = ? AND connector_type = ? AND connector_id = ?", t.to_s.classify, self.class.table_name.classify, self)
47
+ klass.joins(:incoming_connections).where("connections_connections.type = ? AND connector_type = ? AND connector_id = ?", t.to_s.classify, self.class.base_class.to_s, self)
48
48
  end
49
49
  end
50
50
  end
@@ -1,3 +1,3 @@
1
1
  module Connections
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -8,78 +8,74 @@ class ConnectionsTest < ActiveSupport::TestCase
8
8
  @post = Post.create!
9
9
  end
10
10
 
11
- context 'No Follow class defined for join table' do
12
- test '#follow' do
13
- assert !@follower.follows?(@user)
14
- @follower.follow(@user)
15
- assert @follower.follows?(@user)
16
- end
17
-
18
- test '#unfollow' do
19
- @follower.follow(@user)
20
- assert @follower.follows?(@user)
21
- @follower.unfollow(@user)
22
- assert !@follower.follows?(@user)
23
- end
24
-
25
- test '#toggle_follow' do
26
- @follower.toggle_follow(@user)
27
- assert @follower.follows?(@user)
28
- @follower.toggle_follow(@user)
29
- assert !@follower.follows?(@user)
30
- end
11
+ # No explicit Follow class defined
12
+ test '#follow' do
13
+ assert !@follower.follows?(@user)
14
+ @follower.follow(@user)
15
+ assert @follower.follows?(@user)
16
+ end
31
17
 
32
- test '#following' do
33
- @follower.follow(@user)
34
- @follower.follow(@post)
35
- assert_equal [@user], @follower.following(:user)
36
- assert_equal [@post], @follower.following(:post)
37
- end
18
+ test '#unfollow' do
19
+ @follower.follow(@user)
20
+ assert @follower.follows?(@user)
21
+ @follower.unfollow(@user)
22
+ assert !@follower.follows?(@user)
23
+ end
38
24
 
39
- test '#follows' do
40
- #TODO: What should happen if the Follow model isn't defined?
41
- #assert !@user.respond_to?(:follows)
42
- end
25
+ test '#toggle_follow' do
26
+ @follower.toggle_follow(@user)
27
+ assert @follower.follows?(@user)
28
+ @follower.toggle_follow(@user)
29
+ assert !@follower.follows?(@user)
30
+ end
43
31
 
44
- test '#followers' do
45
- @follower.follow(@user)
46
- @follower.follow(@post)
47
- assert_equal [@follower], @user.followers(:user)
48
- assert_equal [@follower], @post.followers(:user)
49
- end
32
+ test '#following' do
33
+ @follower.follow(@user)
34
+ @follower.follow(@post)
35
+ assert_equal [@user], @follower.following(:user)
36
+ assert_equal [@post], @follower.following(:post)
50
37
  end
51
38
 
52
- context 'Like class defined for join table' do
39
+ test '#follows' do
40
+ #TODO: What should happen if the Follow model isn't defined?
41
+ #assert !@user.respond_to?(:follows)
42
+ end
53
43
 
54
- test '#like' do
55
- assert !@user.likes?(@post)
56
- @user.like(@post)
57
- assert @user.likes?(@post)
58
- end
44
+ test '#followers' do
45
+ @follower.follow(@user)
46
+ @follower.follow(@post)
47
+ assert_equal [@follower], @user.followers(:user)
48
+ assert_equal [@follower], @post.followers(:user)
49
+ end
59
50
 
60
- test '#unlike' do
61
- @user.like(@post)
62
- assert @user.likes?(@post)
63
- @user.unlike(@post)
64
- assert !@user.likes?(@post)
65
- end
51
+ # Explicit Like class defined
52
+ test '#like' do
53
+ assert !@user.likes?(@post)
54
+ @user.like(@post)
55
+ assert @user.likes?(@post)
56
+ end
66
57
 
67
- test '#toggle_like' do
68
- @user.toggle_like(@post)
69
- assert @user.likes?(@post)
70
- @user.toggle_like(@post)
71
- assert !@user.likes?(@post)
72
- end
58
+ test '#unlike' do
59
+ @user.like(@post)
60
+ assert @user.likes?(@post)
61
+ @user.unlike(@post)
62
+ assert !@user.likes?(@post)
63
+ end
73
64
 
74
- test '#liking' do
75
- @user.like(@post)
76
- assert_equal [@post], @user.liking(:post)
77
- end
65
+ test '#toggle_like' do
66
+ @user.toggle_like(@post)
67
+ assert @user.likes?(@post)
68
+ @user.toggle_like(@post)
69
+ assert !@user.likes?(@post)
70
+ end
78
71
 
79
- test '#likes' do
80
- @user.like(@post)
81
- assert_equal [@post], @user.likes.map(&:connectable)
82
- end
72
+ test '#liking' do
73
+ @user.like(@post)
74
+ assert_equal [@post], @user.liking(:post)
75
+ end
83
76
 
77
+ test '#likes' do
78
+ @user.like(@post)
79
+ assert_equal [@post], @user.likes.map(&:connectable)
84
80
  end
85
81
  end