popular 0.1.0 → 0.3.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
- MDk1NGEzNDZlYjNkZjEzMmFkZTQ1MjFhYmY3YzYxMTk2ZGY2YjdiOA==
4
+ NDZkMzQzZDk2OTIzYTc3ZjMzNzA1NWU0NzQ1MTA3ZjcwYzJhNDYzYw==
5
5
  data.tar.gz: !binary |-
6
- ODM2MjhhODY1NmJjZjZlMzQzYzljMTM3ZTFkZjExOTgzMDZmMmQxZQ==
6
+ OWM2YjUyZTExMTVjYWUwYjJmMTUyNWFiZWNjNjA4ZGQ3N2U3MjQwYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODY5YzY4YzYxNzU5NTc1MzVjNTMwMmE5YzBiOTgzNmQ4MjVjMzE5Y2ExMTIy
10
- YmU3YTAxZWY4NmM4YjlmMTIxY2YyN2U2MjNlMjAxNmY3MzRiMDI5ZjVjODA0
11
- YTEyM2EwYWI5NjcwMzhkNmZhZjE2MTU2NDlkNWM2ZTg4MTg5ODQ=
9
+ ZmFkZjJmZWJkOWU0ZTFhNmJjZDBmNjY1OTJhYmM2YjY3YjI0M2VkNmY2YjYx
10
+ ZGU0MWJjNTFlYzllYTZkNzFiNDQ4MTAzMjgxNWM0ZWY0NTdmOTk5MDQwMzU5
11
+ OTdjYWRhYmRjYWJmMWU2MTEzODljYTU1ZDBjYzdhM2MwOWFjYTg=
12
12
  data.tar.gz: !binary |-
13
- MTcwYjYwMTU4Njk3YTY0YTE1M2JjNmIwMzIyN2QxYzFkZjU5NjQ2ODY1OTFl
14
- ZmQxZjE3NjI5MjEwNzBlMzBiNTNkZjk2Mzk5NGU2NmRmMDljZmE4ZWYxNDdk
15
- YWNlOWMwODg4ZTZjNTRmZWZlNWQ1ZjkwY2ZhYjI4OWI3ZTEyNWY=
13
+ NDRjZThlZWM2YWQ5MWFmOWFhNWYyMDE5OTFlNTJjOGIwZjkwOTc3YzUyMTZm
14
+ ZTk5MDk3M2IwYmIzZWEwNThhYTFiYWNhOTViMTI0OThjNWZlZjVlZDIyNDU0
15
+ MzE3N2ZmZTJkNzc3YTE1ZjgyZGVhZTJhNGVlMmM2NzAyYTgyZGE=
@@ -2,15 +2,18 @@ module Popular
2
2
 
3
3
  module Popular
4
4
 
5
- def self.included base
5
+ extend ActiveSupport::Concern
6
6
 
7
- base.class_eval do
7
+ included do |base|
8
+ has_many :friendships, class_name: 'Popular::Friendship', as: :popular_model, dependent: :destroy
9
+ has_many :friends, through: :friendships, source_type: base
8
10
 
9
- has_many :friendships, class_name: 'Popular::Friendship', as: :popular_model, dependent: :destroy
10
- has_many :friends, through: :friendships, source_type: base
11
+ include ActiveSupport::Callbacks
12
+ define_callbacks :befriend
11
13
 
14
+ [:before_befriend, :after_befriend].each do |callback|
15
+ send callback
12
16
  end
13
-
14
17
  end
15
18
 
16
19
  # Adds a friend to an instance's friend's list
@@ -24,7 +27,9 @@ module Popular
24
27
  #
25
28
  # user.friends_with? other_user #=> true
26
29
  def befriend new_friend
27
- friendships.create friend: new_friend
30
+ run_callbacks :befriend do
31
+ friendships.create friend: new_friend
32
+ end
28
33
  end
29
34
 
30
35
  # Adds a friend to an instance's friend's list
@@ -36,10 +41,12 @@ module Popular
36
41
  # user = User.create name: "Justin"
37
42
  # other_user = User.create name: "Jenny"
38
43
  # user.befriend! other_user
39
- # user.reload
44
+ #
40
45
  # user.friends_with? other_user # => true
41
46
  def befriend! new_friend
42
- friendships.create! friend: new_friend
47
+ run_callbacks :befriend do
48
+ friendships.create! friend: new_friend
49
+ end
43
50
  end
44
51
 
45
52
  # Removes a friend from an instance's friend's list
@@ -76,6 +83,52 @@ module Popular
76
83
  friendships.where( friend: popular_model ).any?
77
84
  end
78
85
 
86
+ module ClassMethods
87
+
88
+ # before_befriend callback convenience class method
89
+ #
90
+ # @since 0.3.0
91
+ #
92
+ # @example
93
+ #
94
+ # class User < ActiveRecord::Base
95
+ # before_befriend :do_something_amazing
96
+ #
97
+ # def do_something_amazing
98
+ # puts name
99
+ # end
100
+ # end
101
+ #
102
+ # user = User.create name: "Justin"
103
+ # another_user = User.create name: "Jenny"
104
+ #
105
+ # user.befriend another_user #=> "Justin"
106
+ def before_befriend *args, &blk
107
+ set_callback :befriend, :before, *args, &blk
108
+ end
109
+
110
+ # after_befriend callback convenience class method
111
+ #
112
+ # @since 0.3.0
113
+ #
114
+ # @example
115
+ #
116
+ # class User < ActiveRecord::Base
117
+ # after_befriend :do_something_amazing
118
+ #
119
+ # def do_something_amazing
120
+ # puts name
121
+ # end
122
+ # end
123
+ #
124
+ # user = User.create name: "Justin"
125
+ # another_user = User.create name: "Jenny"
126
+ #
127
+ # user.befriend another_user #=> "Justin"
128
+ def after_befriend *args, &blk
129
+ set_callback :befriend, :after, *args, &blk
130
+ end
131
+ end
79
132
  end
80
133
 
81
134
  end
@@ -1,3 +1,3 @@
1
1
  module Popular
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/popular.gemspec CHANGED
@@ -26,5 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "yard", "~> 0.8"
27
27
  spec.add_development_dependency "redcarpet", "~> 3.1"
28
28
  spec.add_development_dependency "inch", "~> 0.3"
29
- spec.add_development_dependency "gem-release", '~> 0.7.1'
29
+ spec.add_development_dependency "gem-release", '~> 0.7'
30
30
  end
@@ -4,16 +4,49 @@ shared_examples "a popular model" do
4
4
  it 'creates a one way friendship' do
5
5
  popular_model.befriend! another_popular_model
6
6
 
7
- expect( popular_model.friends ).to match_array [another_popular_model]
7
+ expect( popular_model).to be_friends_with another_popular_model
8
+ end
9
+
10
+ it 'triggers before_befriend callback' do
11
+ popular_model_with_before_befriend_callback
12
+ .should_receive( :callback_worked )
13
+ .once
14
+ .and_return true
15
+
16
+ popular_model_with_before_befriend_callback.befriend! another_popular_model
17
+ end
18
+
19
+ context 'successful' do
20
+ it 'triggers after_befriend callback' do
21
+ popular_model_with_after_befriend_callback
22
+ .should_receive( :callback_worked )
23
+ .once
24
+ .and_return true
25
+
26
+ popular_model_with_after_befriend_callback.befriend! another_popular_model
27
+ end
8
28
  end
9
29
  end
10
30
 
11
31
  describe '.befriend' do
12
- it 'creates a one way friendship' do
13
- popular_model.befriend another_popular_model
14
32
 
15
- expect( popular_model.friends ).to match_array [another_popular_model]
33
+ context 'successful' do
34
+ it 'triggers after_befriend callback' do
35
+ popular_model_with_after_befriend_callback
36
+ .should_receive( :callback_worked )
37
+ .once
38
+ .and_return true
39
+
40
+ popular_model_with_after_befriend_callback.befriend another_popular_model
41
+ end
42
+
43
+ it 'creates a one way friendship' do
44
+ popular_model.befriend another_popular_model
45
+
46
+ expect( popular_model).to be_friends_with another_popular_model
47
+ end
16
48
  end
49
+
17
50
  end
18
51
 
19
52
  describe '#friends_with?' do
@@ -33,7 +66,7 @@ shared_examples "a popular model" do
33
66
  popular_model.send method, another_popular_model
34
67
  end
35
68
 
36
- expect( popular_model.friends ).to be_empty
69
+ expect( popular_model).to_not be_friends_with another_popular_model
37
70
  end
38
71
  end
39
72
 
@@ -15,8 +15,11 @@ describe Popular::Popular do
15
15
  end
16
16
 
17
17
  it_behaves_like 'a popular model' do
18
+ let ( :random_object ) { RandomClass.new }
18
19
  let ( :popular_model ) { PopularModel.create }
19
20
  let ( :another_popular_model ) { PopularModel.create }
21
+ let ( :popular_model_with_after_befriend_callback ) { PopularModelWithAfterBefriendCallback.create }
22
+ let ( :popular_model_with_before_befriend_callback ) { PopularModelWithBeforeBefriendCallback.create }
20
23
  end
21
24
 
22
25
  end
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,8 @@ end
6
6
  require 'sqlite3'
7
7
  require 'popular'
8
8
 
9
+ Dir["./spec/support/**/*.rb"].sort.each { |f| require f }
10
+
9
11
  ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
10
12
 
11
13
  ActiveRecord::Schema.define version: 1 do
@@ -19,12 +21,6 @@ ActiveRecord::Schema.define version: 1 do
19
21
 
20
22
  end
21
23
 
22
- UnpopularModel = Class.new ActiveRecord::Base
23
-
24
- class PopularModel < ActiveRecord::Base
25
- popular
26
- end
27
-
28
24
  RSpec.configure do |config|
29
25
  config.order = 'random'
30
26
  end
@@ -0,0 +1,3 @@
1
+ class PopularModel < ActiveRecord::Base
2
+ popular
3
+ end
@@ -0,0 +1,7 @@
1
+ class PopularModelWithAfterBefriendCallback < PopularModel
2
+ after_befriend :callback_worked
3
+
4
+ def callback_worked
5
+ true
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class PopularModelWithBeforeBefriendCallback < PopularModel
2
+ before_befriend :callback_worked
3
+
4
+ def callback_worked
5
+ true
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ RandomClass = Class.new
@@ -0,0 +1 @@
1
+ UnpopularModel = Class.new ActiveRecord::Base
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.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thejchap
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - ~>
130
130
  - !ruby/object:Gem::Version
131
- version: 0.7.1
131
+ version: '0.7'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ~>
137
137
  - !ruby/object:Gem::Version
138
- version: 0.7.1
138
+ version: '0.7'
139
139
  description: Friendship gem for Rails/ActiveRecord. Popular saves time when developing
140
140
  social apps
141
141
  email:
@@ -161,6 +161,11 @@ files:
161
161
  - spec/popular/popular_model_spec.rb
162
162
  - spec/popular/popular_spec.rb
163
163
  - spec/spec_helper.rb
164
+ - spec/support/popular_model.rb
165
+ - spec/support/popular_model_with_after_befriend_callback.rb
166
+ - spec/support/popular_model_with_before_befriend_callback.rb
167
+ - spec/support/random_class.rb
168
+ - spec/support/unpopular_model.rb
164
169
  homepage: http://thejchap.github.io/popular
165
170
  licenses:
166
171
  - MIT
@@ -189,4 +194,9 @@ test_files:
189
194
  - spec/popular/popular_model_spec.rb
190
195
  - spec/popular/popular_spec.rb
191
196
  - spec/spec_helper.rb
197
+ - spec/support/popular_model.rb
198
+ - spec/support/popular_model_with_after_befriend_callback.rb
199
+ - spec/support/popular_model_with_before_befriend_callback.rb
200
+ - spec/support/random_class.rb
201
+ - spec/support/unpopular_model.rb
192
202
  has_rdoc: