popular 0.3.2 → 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.
- checksums.yaml +8 -8
- data/README.md +10 -2
- data/lib/popular/popular.rb +51 -3
- data/lib/popular/version.rb +1 -1
- data/spec/popular/popular_model_spec.rb +32 -15
- data/spec/popular/popular_spec.rb +1 -2
- data/spec/support/popular_model_with_callbacks.rb +14 -0
- metadata +3 -5
- data/spec/support/popular_model_with_after_befriend_callback.rb +0 -7
- data/spec/support/popular_model_with_before_befriend_callback.rb +0 -7
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NzNkYjliYTc5YjZhMTQ0YzYzZDQ3NGY0ZGI1M2VkMjRhMjBlZDcyZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MzdlYjQzM2UwNWJkZGI3NTVmMDVlMDgzNTg3YWMzMmM4NzUxMDY5Zg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2YyOGQ2ZmUwNDczNzVhNjhlYjA3N2M2N2MzNjJkODQ4ODMzNWU0YjJkODcz
|
10
|
+
ZWM0Yzc0OGU3OWU5OTBiMTAzMGI2YWEwMTZkNDM0MDNhZDVkOGQ2NGU0MTYy
|
11
|
+
NmFhOGIwMTE5NjdjZDU2YTQ3ZGE1NjY1YWZmMWViMWNiOTU3MmY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Y2YwNTRhZDI5YWNkMzc5NjNjYjg3ZDRmZDQzNWQ0NmEzMjYwMjU1N2IzODk5
|
14
|
+
ZjUxOTNiOWM5NWM0ZjZhNmIwZjY5MzU3OWFmYTc3ZjM2ZDFhZGY3ODRhYjc2
|
15
|
+
NzQxZDM5ZWYyZDJjMjhmN2JhMmRkZTQwYWIxZDJmYjI2NzY1NjQ=
|
data/README.md
CHANGED
@@ -59,22 +59,30 @@ end
|
|
59
59
|
Popular provides callbacks that are fired around friendship creation. Available callbacks are:
|
60
60
|
- after_befriend
|
61
61
|
- before_befriend
|
62
|
+
- after_unfriend
|
63
|
+
- before_unfriend
|
62
64
|
|
63
65
|
|
64
66
|
```ruby
|
65
67
|
class User < ActiveRecord::Base
|
66
68
|
popular
|
67
|
-
after_befriend :
|
69
|
+
after_befriend :notify_friendship_created
|
70
|
+
after_unfriend :notify_unfriended
|
68
71
|
|
69
|
-
def
|
72
|
+
def notify_friendship_created
|
70
73
|
puts "Friendship created successfully"
|
71
74
|
end
|
75
|
+
|
76
|
+
def notify_unfriended
|
77
|
+
puts ":("
|
78
|
+
end
|
72
79
|
end
|
73
80
|
|
74
81
|
@justin = User.create name: "Justin"
|
75
82
|
@jenny = User.create name: "Jenny"
|
76
83
|
|
77
84
|
@justin.befriend @jenny #=> "Friendship created successfully"
|
85
|
+
@justin.unfriend @jenny #=> ":("
|
78
86
|
```
|
79
87
|
|
80
88
|
## Contributing
|
data/lib/popular/popular.rb
CHANGED
@@ -9,9 +9,9 @@ module Popular
|
|
9
9
|
has_many :friends, through: :friendships, source_type: base
|
10
10
|
|
11
11
|
include ActiveSupport::Callbacks
|
12
|
-
define_callbacks :befriend
|
12
|
+
define_callbacks :befriend, :unfriend
|
13
13
|
|
14
|
-
[:before_befriend, :after_befriend].each do |callback|
|
14
|
+
[:before_unfriend, :after_unfriend, :before_befriend, :after_befriend].each do |callback|
|
15
15
|
send callback
|
16
16
|
end
|
17
17
|
end
|
@@ -61,7 +61,9 @@ module Popular
|
|
61
61
|
#
|
62
62
|
# user.friends_with? other_user # => false
|
63
63
|
def unfriend friend
|
64
|
-
|
64
|
+
run_callbacks :unfriend do
|
65
|
+
friendships.where( friend: friend ).first.destroy
|
66
|
+
end
|
65
67
|
end
|
66
68
|
|
67
69
|
# Helper method for finding whether or not the instance is friends with
|
@@ -86,6 +88,52 @@ module Popular
|
|
86
88
|
# ClassMethods included in popular models
|
87
89
|
module ClassMethods
|
88
90
|
|
91
|
+
# after_unfriend callback convenience class method
|
92
|
+
#
|
93
|
+
# @since 0.4.0
|
94
|
+
#
|
95
|
+
# @example
|
96
|
+
#
|
97
|
+
# class User < ActiveRecord::Base
|
98
|
+
# after_unfriend :do_something_amazing
|
99
|
+
#
|
100
|
+
# def do_something_amazing
|
101
|
+
# puts name
|
102
|
+
# end
|
103
|
+
# end
|
104
|
+
#
|
105
|
+
# user = User.create name: "Justin"
|
106
|
+
# another_user = User.create name: "Jenny"
|
107
|
+
#
|
108
|
+
# user.befriend another_user
|
109
|
+
# user.unfriend another_user #=> "Justin"
|
110
|
+
def after_unfriend *args, &blk
|
111
|
+
set_callback :unfriend, :after, *args, &blk
|
112
|
+
end
|
113
|
+
|
114
|
+
# before_unfriend callback convenience class method
|
115
|
+
#
|
116
|
+
# @since 0.4.0
|
117
|
+
#
|
118
|
+
# @example
|
119
|
+
#
|
120
|
+
# class User < ActiveRecord::Base
|
121
|
+
# before_unfriend :do_something_amazing
|
122
|
+
#
|
123
|
+
# def do_something_amazing
|
124
|
+
# puts name
|
125
|
+
# end
|
126
|
+
# end
|
127
|
+
#
|
128
|
+
# user = User.create name: "Justin"
|
129
|
+
# another_user = User.create name: "Jenny"
|
130
|
+
#
|
131
|
+
# user.befriend another_user
|
132
|
+
# user.unfriend another_user #=> "Justin"
|
133
|
+
def before_unfriend *args, &blk
|
134
|
+
set_callback :unfriend, :before, *args, &blk
|
135
|
+
end
|
136
|
+
|
89
137
|
# before_befriend callback convenience class method
|
90
138
|
#
|
91
139
|
# @since 0.3.0
|
data/lib/popular/version.rb
CHANGED
@@ -8,22 +8,16 @@ shared_examples "a popular model" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'triggers before_befriend callback' do
|
11
|
-
|
12
|
-
.should_receive( :callback_worked )
|
13
|
-
.once
|
14
|
-
.and_return true
|
11
|
+
ensure_callback_fired_on popular_model_with_callbacks, :before_befriend_callback
|
15
12
|
|
16
|
-
|
13
|
+
popular_model_with_callbacks.befriend! another_popular_model
|
17
14
|
end
|
18
15
|
|
19
16
|
context 'successful' do
|
20
17
|
it 'triggers after_befriend callback' do
|
21
|
-
|
22
|
-
.should_receive( :callback_worked )
|
23
|
-
.once
|
24
|
-
.and_return true
|
18
|
+
ensure_callback_fired_on popular_model_with_callbacks, :after_befriend_callback
|
25
19
|
|
26
|
-
|
20
|
+
popular_model_with_callbacks.befriend! another_popular_model
|
27
21
|
end
|
28
22
|
end
|
29
23
|
end
|
@@ -31,13 +25,16 @@ shared_examples "a popular model" do
|
|
31
25
|
describe '.befriend' do
|
32
26
|
|
33
27
|
context 'successful' do
|
28
|
+
it 'triggers before_befriend callback' do
|
29
|
+
ensure_callback_fired_on popular_model_with_callbacks, :before_befriend_callback
|
30
|
+
|
31
|
+
popular_model_with_callbacks.befriend another_popular_model
|
32
|
+
end
|
33
|
+
|
34
34
|
it 'triggers after_befriend callback' do
|
35
|
-
|
36
|
-
.should_receive( :callback_worked )
|
37
|
-
.once
|
38
|
-
.and_return true
|
35
|
+
ensure_callback_fired_on popular_model_with_callbacks, :after_befriend_callback
|
39
36
|
|
40
|
-
|
37
|
+
popular_model_with_callbacks.befriend another_popular_model
|
41
38
|
end
|
42
39
|
|
43
40
|
it 'creates a one way friendship' do
|
@@ -53,6 +50,7 @@ shared_examples "a popular model" do
|
|
53
50
|
it 'returns true if a popular_model is friends with a given popular_model' do
|
54
51
|
expect( popular_model ).to_not be_friends_with another_popular_model
|
55
52
|
end
|
53
|
+
|
56
54
|
it 'returns true if a popular_model is friends with a given popular_model' do
|
57
55
|
popular_model.befriend another_popular_model
|
58
56
|
|
@@ -68,6 +66,25 @@ shared_examples "a popular model" do
|
|
68
66
|
|
69
67
|
expect( popular_model).to_not be_friends_with another_popular_model
|
70
68
|
end
|
69
|
+
|
70
|
+
it 'triggers before_unfriend callback' do
|
71
|
+
ensure_callback_fired_on popular_model_with_callbacks, :before_unfriend_callback
|
72
|
+
|
73
|
+
[:befriend, :unfriend].each do |method|
|
74
|
+
popular_model_with_callbacks.send method, another_popular_model
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'triggers after_unfriend callback' do
|
79
|
+
ensure_callback_fired_on popular_model_with_callbacks, :after_unfriend_callback
|
80
|
+
|
81
|
+
[:befriend, :unfriend].each do |method|
|
82
|
+
popular_model_with_callbacks.send method, another_popular_model
|
83
|
+
end
|
84
|
+
end
|
71
85
|
end
|
72
86
|
|
87
|
+
def ensure_callback_fired_on model, method
|
88
|
+
model.send( :should_receive, method ).once.and_return true
|
89
|
+
end
|
73
90
|
end
|
@@ -18,8 +18,7 @@ describe Popular::Popular do
|
|
18
18
|
let ( :random_object ) { RandomClass.new }
|
19
19
|
let ( :popular_model ) { PopularModel.create }
|
20
20
|
let ( :another_popular_model ) { PopularModel.create }
|
21
|
-
let ( :
|
22
|
-
let ( :popular_model_with_before_befriend_callback ) { PopularModelWithBeforeBefriendCallback.create }
|
21
|
+
let ( :popular_model_with_callbacks ) { PopularModelWithCallbacks.create }
|
23
22
|
end
|
24
23
|
|
25
24
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class PopularModelWithCallbacks < PopularModel
|
2
|
+
[:after, :before].each do |filter|
|
3
|
+
[:befriend, :unfriend].each do |action|
|
4
|
+
hook = "#{filter}_#{action}".to_sym
|
5
|
+
method_name = "#{hook}_callback".to_sym
|
6
|
+
|
7
|
+
send hook, method_name
|
8
|
+
|
9
|
+
define_method method_name do
|
10
|
+
true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
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.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thejchap
|
@@ -167,8 +167,7 @@ files:
|
|
167
167
|
- spec/popular/popular_spec.rb
|
168
168
|
- spec/spec_helper.rb
|
169
169
|
- spec/support/popular_model.rb
|
170
|
-
- spec/support/
|
171
|
-
- spec/support/popular_model_with_before_befriend_callback.rb
|
170
|
+
- spec/support/popular_model_with_callbacks.rb
|
172
171
|
- spec/support/random_class.rb
|
173
172
|
- spec/support/unpopular_model.rb
|
174
173
|
homepage: http://thejchap.github.io/popular
|
@@ -202,8 +201,7 @@ test_files:
|
|
202
201
|
- spec/popular/popular_spec.rb
|
203
202
|
- spec/spec_helper.rb
|
204
203
|
- spec/support/popular_model.rb
|
205
|
-
- spec/support/
|
206
|
-
- spec/support/popular_model_with_before_befriend_callback.rb
|
204
|
+
- spec/support/popular_model_with_callbacks.rb
|
207
205
|
- spec/support/random_class.rb
|
208
206
|
- spec/support/unpopular_model.rb
|
209
207
|
has_rdoc:
|