popular 0.3.1 → 0.3.2

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
- MDZmMzVhOWMxNzU4YTQ0YjlmMTQwODcyNzcyZDBmMTY3MTk5N2I0NQ==
4
+ MDBkZDk2OTY1OTczYjYzMzkzOTVmN2QyZDMyMjYwNmE1ZjBjOWYxOA==
5
5
  data.tar.gz: !binary |-
6
- YmRlZWFlMjNjZTRlZWQ5NjgxZGY1NWIzZDIxZjcxZjIyY2NjMWQ2Yg==
6
+ NTA3NTI1MmUwY2UzMzk1MWY1MTMxM2FmZGQxNzE4NTZmMGVjY2ZhZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YTUzYjRjNzI2ZTk0YzFiZjA0NjU5YzQ0MzUzOWM2M2ZlMjM1M2JjMWYwYjcw
10
- OTQ0YjM1MzljZTBmNWFkNDczNDAxMDVmMzk5ZGQxMTMzNDRhOTk3OGM3ZmFm
11
- ZWZjYjlhYjE2NDJiZDhhZDI1OTAxOTVkMjIyZDNiNWRmMTgyYWE=
9
+ ZDc4MDI4NjI3OWNlNmM4MzRmNzVmMzYxZDBjYWRhYzFjNDgxM2E2NWExMDRk
10
+ ZjgwNjZmMDAyYzQzOGE3NzkxMDZjNjA3MWVlZTVkMzIyZDk4NjllMjQ4YzRj
11
+ NDU5ZjZhMjMxZGE4OGM2Njk2NGM0NGE5ZGRjNGU3ZDQ4MTMxMWU=
12
12
  data.tar.gz: !binary |-
13
- NTdmODI0Njk3M2ZjYTFkNWYwM2FjODBlOTMyMTA2ZTk2MjE4NzhlZDRjNTFj
14
- YjUxNjM2NmQ5MGRmZDk0ODM2MTJjZDg4YTEyZTNlYjcxNmVjYjZhMzkzODI3
15
- MmZmOGFiZGE3MDllNGI4YzQwN2UyNzVlZTg3ZGVjYzI3YTY3MGQ=
13
+ OThiOGJlNDljMmUzMTNmOTI4NGNkYmFmYzliOWJiNzgxODAwYzEzODljZGUx
14
+ N2YzNjg3NTVlODFjN2NhZjUyMDc1MzgzNTIyOGFhMTIxYTM0NGE5OTYyZjA4
15
+ MDI3Y2E5YmI1MmVkOTJhYjZhZDlmMTlmMWZlNjEwMjFiNzM3OTA=
data/.inch.yml ADDED
@@ -0,0 +1,3 @@
1
+ files:
2
+ excluded:
3
+ - lib/generators
data/README.md CHANGED
@@ -44,11 +44,14 @@ end
44
44
  @sam = User.create name: "Samuel"
45
45
  @jackson = User.create name: "Jackson"
46
46
 
47
- @sam.friends_with? @jackson #=> false
47
+ # Adding and removing friends
48
+ @sam.friends_with? @jackson #=> false
49
+ @sam.friends.length #=> 0
48
50
  @sam.befriend @jackson
49
- @sam.friends_with? @jackson #=> true
51
+ @sam.friends_with? @jackson #=> true
52
+ @sam.friends.length #=> 1
50
53
  @sam.unfriend @jackson
51
- @sam.friends_with? @jackson #=> false
54
+ @sam.friends_with? @jackson #=> false
52
55
  ```
53
56
 
54
57
  ### Callbacks
@@ -2,7 +2,7 @@ module Popular
2
2
  # Namespace for classes and modules that handle including the library's modules
3
3
  module Extenders
4
4
 
5
- # Namespace for classes and modules that handle making a given model friendly
5
+ # Namespace for classes and modules that handle making a given model popular
6
6
  module Popular
7
7
 
8
8
  # Helper method for determining whether or not a model has included
@@ -1,10 +1,25 @@
1
1
  module Popular
2
2
 
3
+ # Friendship class. Provides self-referential join for popular_models and their friends
3
4
  class Friendship < ::ActiveRecord::Base
4
5
 
5
6
  belongs_to :popular_model, polymorphic: true
6
7
  belongs_to :friend, polymorphic: true
7
8
 
9
+ validates_presence_of :friend, :popular_model
10
+
11
+ # Ensures that popular_models cannot add themselves as a friend
12
+ validate :ensure_popular_model_different_from_friend
13
+
14
+ private
15
+
16
+ # Checks friend against popular_model.
17
+ #
18
+ # TODO add more descriptive error message/i18n
19
+ def ensure_popular_model_different_from_friend
20
+ errors.add( :friend ) if friend == popular_model
21
+ end
22
+
8
23
  end
9
24
 
10
25
  end
@@ -1,5 +1,5 @@
1
1
  module Popular
2
-
2
+ # Namespace for methods included in popular models
3
3
  module Popular
4
4
 
5
5
  extend ActiveSupport::Concern
@@ -83,6 +83,7 @@ module Popular
83
83
  friendships.where( friend: popular_model ).any?
84
84
  end
85
85
 
86
+ # ClassMethods included in popular models
86
87
  module ClassMethods
87
88
 
88
89
  # before_befriend callback convenience class method
@@ -1,3 +1,3 @@
1
1
  module Popular
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -0,0 +1,24 @@
1
+ shared_examples 'a friendship model' do
2
+
3
+ it 'ensures the friend is not the same as the popular_model' do
4
+ invalid_model = described_class.new(
5
+ friend: popular_model,
6
+ popular_model: popular_model
7
+ )
8
+
9
+ expect( invalid_model ).to_not be_valid
10
+ end
11
+
12
+ it 'validates presence of popular_model' do
13
+ invalid_model = described_class.new friend: popular_model
14
+
15
+ expect( invalid_model ).to_not be_valid
16
+ end
17
+
18
+ it 'validates presence of friend' do
19
+ invalid_model = described_class.new popular_model: popular_model
20
+
21
+ expect( invalid_model ).to_not be_valid
22
+ end
23
+
24
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Popular::Friendship do
4
+
5
+ it_behaves_like 'a friendship model' do
6
+ let ( :popular_model ) { PopularModel.create }
7
+ let ( :another_popular_model ) { PopularModel.create }
8
+ end
9
+
10
+ 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.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - thejchap
@@ -146,6 +146,7 @@ extra_rdoc_files: []
146
146
  files:
147
147
  - .gemrelease
148
148
  - .gitignore
149
+ - .inch.yml
149
150
  - .rspec
150
151
  - .travis.yml
151
152
  - Gemfile
@@ -160,6 +161,8 @@ files:
160
161
  - lib/popular/popular.rb
161
162
  - lib/popular/version.rb
162
163
  - popular.gemspec
164
+ - spec/popular/friendship_model_spec.rb
165
+ - spec/popular/friendship_spec.rb
163
166
  - spec/popular/popular_model_spec.rb
164
167
  - spec/popular/popular_spec.rb
165
168
  - spec/spec_helper.rb
@@ -193,6 +196,8 @@ signing_key:
193
196
  specification_version: 4
194
197
  summary: Friendship gem for Rails/ActiveRecord
195
198
  test_files:
199
+ - spec/popular/friendship_model_spec.rb
200
+ - spec/popular/friendship_spec.rb
196
201
  - spec/popular/popular_model_spec.rb
197
202
  - spec/popular/popular_spec.rb
198
203
  - spec/spec_helper.rb