popular 0.5.1 → 0.6.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NWQyNWFkOTY3ZjlhNTY0Y2JhZTFmZjM4NGUxNmQ1YjZjZjhlYmRkMg==
4
+ ZGExM2NmNGUxNmI3ZTk5MjgwMDE2OTJiN2E3NWY0Njk4NTgxMjZiZg==
5
5
  data.tar.gz: !binary |-
6
- ODhhNmU2ZDc1ODU0NGU2YjU1Zjc0ZjU1YjFjYWQyZTlhMmIyNDkwMg==
6
+ OWY2NTBmYzRlMmI3NDIzMTU5YmI4MzVmMGVhNTg3MzdmZGQ2NzkyYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- M2NjNzI0MGY5NTQyZGYxNDZiNGJjMDZhZWQ4YmIxYWI2MDM5YTY3MjhiZDkx
10
- MzhjYzM5ZjNhYzA1OWQzN2Y2ZTc2NTFiN2U1NDMyZGRjZTViNTk0NTgxMDcw
11
- MTlkZmRhZDM4NzAxYjQyMWRhNGYzY2QwODRiN2EwZTAyOWM2MWE=
9
+ NjYxZjRhZGI3YTI0NmNiY2Q1NDZhNWVjYzQ2MDdiOTEyYjY2YzJmMTZkZTEz
10
+ MzgwY2ZmNWNiYTUwZjk4ZjBiZTkxNzFlZjU4ZmUwNjJkNWRhZDI4ZDZiODc3
11
+ YjJhMmU4M2U1YTZjN2VlMzQ5NjE2NzI3YzcwOTNhN2FjMzI0MjY=
12
12
  data.tar.gz: !binary |-
13
- YjJmYmNkZGQxYzA2Zjk4NjJjZDcyNjU3YzIyOTEwMjhhYjk0OGVmMDJiOWY3
14
- NzUzNTk4ZjE3ZmVhYTA4MzM1NWIyZmUxMDc5NTAyMzA5MjU2NjA0NWE3ZGE1
15
- NGI2NmFjNzk3MzBmNTQ0ZjczMWU0NzlmMTQzOTc3MmRiNDM0ZTM=
13
+ OWMyZTZmM2U0Yjc3MmMyMTU0MGJlNGM5YmZiODQxNzZjZDdmYzkzNmFkMGY3
14
+ NGEzYjljYjU1MTk3NDczNmJjZjU1YjZmYWNhOTQxZmJiMTIyNjFjNDQ1Yzlh
15
+ NTA4NTAyZjhlNDEyOWRmNzMzZTZiMWFlYmUyZDE0YjMxMTAyN2E=
data/README.md CHANGED
@@ -8,6 +8,10 @@
8
8
 
9
9
  Popular is a friendship gem designed for Rails/ActiveRecord models.
10
10
 
11
+ - RubyGems: ( https://rubygems.org/gems/popular )
12
+ - Website: ( http://thejchap.github.io/popular )
13
+ - RDoc: ( http://rubydoc.info/github/thejchap/popular/master/frames )
14
+
11
15
  ## Installation
12
16
 
13
17
  Add this line to your application's Gemfile:
@@ -61,6 +65,20 @@ end
61
65
  @sam.mutual_friends_with? @jackson #=> true
62
66
  ```
63
67
 
68
+ ### Aliases
69
+
70
+ In Popular, `befriend` is synonomous with `follow`, so if it better fits the context of your application, you can use
71
+ follow methods/relations instead. For example:
72
+
73
+ ```ruby
74
+ @sam.follow @jackson
75
+ @sam.following? @jackson #=> true
76
+
77
+ @jackson.follow @sam
78
+ @sam.followers.include? @jackson #=> true
79
+ ```
80
+
81
+
64
82
  ### Callbacks
65
83
 
66
84
  Popular provides callbacks that are fired around friendship creation. Available callbacks are:
@@ -92,6 +110,22 @@ end
92
110
  @justin.unfriend @jenny #=> ":("
93
111
  ```
94
112
 
113
+ ## Related gems
114
+
115
+ If Popular isn't quite what you're looking for, here are some other useful gems in the same category:
116
+
117
+ - Amistad ( https://github.com/raw1z/amistad )
118
+ - Friendable ( https://github.com/yuki24/friendable )
119
+
120
+ *Disclaimer: I have not used either of the above gems*
121
+
122
+
123
+ ## Resources
124
+
125
+ Popular was heavily inspired by this screencast: ( http://railscasts.com/episodes/163-self-referential-association?view=asciicast )
126
+
127
+
128
+
95
129
  ## Contributing
96
130
 
97
131
  1. Fork it ( http://github.com/thejchap/popular/fork )
@@ -5,6 +5,11 @@ module Popular
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do |base|
8
+ has_many :followings, class_name: 'Popular::Friendship', as: :popular_model, dependent: :destroy
9
+ has_many :followeds, through: :followings, source: :friend, source_type: base
10
+ has_many :inverse_followings, class_name: 'Popular::Friendship', as: :friend, foreign_key: :friend_id
11
+ has_many :followers, through: :inverse_followings, source: :popular_model, source_type: base
12
+
8
13
  has_many :friendships, class_name: 'Popular::Friendship', as: :popular_model, dependent: :destroy
9
14
  has_many :friends, through: :friendships, source_type: base
10
15
  has_many :inverse_friendships, class_name: 'Popular::Friendship', as: :friend, foreign_key: :friend_id
@@ -16,6 +21,18 @@ module Popular
16
21
  [:before_unfriend, :after_unfriend, :before_befriend, :after_befriend].each do |callback|
17
22
  send callback
18
23
  end
24
+
25
+ aliases = {
26
+ befriend: [:follow],
27
+ befriend!: [:follow!],
28
+ unfriend: [:unfollow],
29
+ friends_with?: [:following?],
30
+ friended_by?: [:followed_by?]
31
+ }
32
+
33
+ aliases.each do |method, links|
34
+ links.each { |linked_method| alias_method( linked_method, method ) }
35
+ end
19
36
  end
20
37
 
21
38
  # Adds a friend to an instance's friend's list
@@ -1,3 +1,3 @@
1
1
  module Popular
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -1,10 +1,19 @@
1
1
  shared_examples "a popular model" do
2
2
 
3
3
  describe 'mutual friendships' do
4
- it '.inverse_friends includes popular_models who have added an instance as a friend' do
5
- another_popular_model.befriend popular_model
4
+ describe '.inverse_friends' do
5
+ it 'includes popular_models who have added an instance as a friend' do
6
+ another_popular_model.befriend popular_model
7
+
8
+ expect( popular_model ).to be_friended_by another_popular_model
9
+ end
6
10
 
7
- expect( popular_model ).to be_friended_by another_popular_model
11
+ it 'can be called with followers' do
12
+ another_popular_model.follow popular_model
13
+
14
+ expect( popular_model ).to be_followed_by another_popular_model
15
+ expect( popular_model.followers ).to match_array [another_popular_model]
16
+ end
8
17
  end
9
18
 
10
19
  it '#mutual_friends_with? returns false if instances are not mutual friends' do
@@ -20,6 +29,12 @@ shared_examples "a popular model" do
20
29
  end
21
30
 
22
31
  describe '.befriend!' do
32
+ it 'can be called with .follow!' do
33
+ popular_model.follow! another_popular_model
34
+
35
+ expect( popular_model).to be_following another_popular_model
36
+ end
37
+
23
38
  it 'creates a one way friendship' do
24
39
  popular_model.befriend! another_popular_model
25
40
 
@@ -42,6 +57,12 @@ shared_examples "a popular model" do
42
57
  end
43
58
 
44
59
  describe '.befriend' do
60
+ it 'can be called with .follow' do
61
+ popular_model.follow another_popular_model
62
+
63
+ expect( popular_model).to be_following another_popular_model
64
+ end
65
+
45
66
 
46
67
  context 'successful' do
47
68
  it 'triggers before_befriend callback' do
@@ -66,7 +87,7 @@ shared_examples "a popular model" do
66
87
  end
67
88
 
68
89
  describe '#friends_with?' do
69
- it 'returns true if a popular_model is friends with a given popular_model' do
90
+ it 'returns false if a popular_model is not friends with a given popular_model' do
70
91
  expect( popular_model ).to_not be_friends_with another_popular_model
71
92
  end
72
93
 
@@ -78,6 +99,14 @@ shared_examples "a popular model" do
78
99
  end
79
100
 
80
101
  describe '.unfriend' do
102
+ it 'can be called with .unfollow' do
103
+ [:follow, :unfollow].each do |method|
104
+ popular_model.send method, another_popular_model
105
+ end
106
+
107
+ expect( popular_model).to_not be_following another_popular_model
108
+ end
109
+
81
110
  it 'destroys a friendship' do
82
111
  [:befriend, :unfriend].each do |method|
83
112
  popular_model.send method, another_popular_model
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: popular
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thejchap