parole 0.1.3 → 0.1.4
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 +4 -4
- data/.travis.yml +8 -0
- data/CHANGELOG.md +5 -0
- data/LICENSE.md +1 -1
- data/README.md +20 -11
- data/lib/parole/comment.rb +10 -1
- data/lib/parole/version.rb +1 -1
- data/spec/parole/comment_spec.rb +14 -2
- metadata +21 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 838fd260344d7edc5895fdb763bf4c620916096f
|
4
|
+
data.tar.gz: 38e7429fd0ea23bc0b95f92154c779624225c007
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0c2609fa1850536ceae8464d4ff7a2f4084ca7a2128715dfedc1ffc639f8957e2221153f5b883ebd436c111ccaa26d5d16203b5905146bb3a02e445c9a26c38
|
7
|
+
data.tar.gz: 0b45b10e8f8626506bb981e02ee5b7ff5feb362d112d0183a9c6692ad142972b23f072bc6738fd2efe0d2f90d17411294331746da1860941e67b9345de2aa8ef
|
data/.travis.yml
CHANGED
@@ -8,3 +8,11 @@ gemfile:
|
|
8
8
|
- gemfiles/Gemfile.activerecord-4.0
|
9
9
|
|
10
10
|
script: "echo 'DO IT' && bundle exec rake spec"
|
11
|
+
|
12
|
+
notifications:
|
13
|
+
hipchat:
|
14
|
+
rooms:
|
15
|
+
secure: "kgVFUfn1gDlKVX9kIWC7AWaxhBa+nLI9R9I25BcvvbqstMVtQAEu5qfKYUvFGDlYU7R9lSNiwz55nGxAnr7izh1dLd40phlBTWH0tWx6QvjQ14M4xwWYoLjj+rif2izR3lEZS+rJdVYNfUjocVHUnDiFQqH3gZzyfETmQGOwR6k="
|
16
|
+
template:
|
17
|
+
- '%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message} (<a href="%{build_url}">Build</a>/<a href="%{compare_url}">Changes</a>)'
|
18
|
+
format: 'html'
|
data/CHANGELOG.md
ADDED
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -5,11 +5,12 @@
|
|
5
5
|
<br />
|
6
6
|
Parole adds the ability to comment on ActiveRecord records.
|
7
7
|
<br /><br />
|
8
|
-
<a href="https://rubygems.org/gems/parole"><img src="
|
9
|
-
<a href="https://codeclimate.com/github/mirego/parole"><img src="
|
10
|
-
<a href="https://travis-ci.org/mirego/parole"><img src="
|
8
|
+
<a href="https://rubygems.org/gems/parole"><img src="http://img.shields.io/gem/v/parole.svg" /></a>
|
9
|
+
<a href="https://codeclimate.com/github/mirego/parole"><img src="http://img.shields.io/codeclimate/github/mirego/parole.svg" /></a>
|
10
|
+
<a href="https://travis-ci.org/mirego/parole"><img src="http://img.shields.io/travis/mirego/parole.svg" /></a>
|
11
11
|
</p>
|
12
12
|
|
13
|
+
|
13
14
|
---
|
14
15
|
|
15
16
|
## Installation
|
@@ -63,17 +64,23 @@ article.comments.count # => 1
|
|
63
64
|
|
64
65
|
### Cache counters
|
65
66
|
|
66
|
-
Whenever a comment is created or destroyed, Parole looks into the commentable record and
|
67
|
-
if there’s a `<role>_comments_count` column and/or a `comments_count` column.
|
68
|
-
them so they reflect the total number of comments and the number of comments
|
69
|
-
the record.
|
67
|
+
Whenever a comment is created or destroyed, Parole looks into the commentable record and the commenter
|
68
|
+
record and check if there’s a `<role>_comments_count` column and/or a `comments_count` column.
|
69
|
+
If so, it updates them so they reflect the total number of comments and the number of comments
|
70
|
+
of this role for the record.
|
71
|
+
|
72
|
+
_Note:_ The commenter model must implements a `has_many` relationship that fetch its comments.
|
70
73
|
|
71
|
-
So let’s say the `Article` model has the following columns: `photos_comments_count`, `videos_comments_count` and `comments_count
|
74
|
+
So let’s say the `Article` model has the following columns: `photos_comments_count`, `videos_comments_count` and `comments_count`,
|
75
|
+
and the `User` model has the following column: `comments_count`.
|
72
76
|
|
73
77
|
```ruby
|
74
78
|
class Article < ActiveRecord::Base
|
75
79
|
acts_as_commentable roles: [:photos, :videos]
|
76
80
|
end
|
81
|
+
class User < ActiveRecord::Base
|
82
|
+
has_many :comments, -> { where(commenter_type: 'User') }, foreign_key: :commenter_id
|
83
|
+
end
|
77
84
|
|
78
85
|
user = User.find(1)
|
79
86
|
article = Article.find(1)
|
@@ -82,19 +89,21 @@ article.photos_comments.create(commenter: user, comment: 'Hello world!')
|
|
82
89
|
article.photos_comments_count # => 1
|
83
90
|
article.videos_comments_count # => 0
|
84
91
|
article.comments_count # => 1
|
92
|
+
user.comments_count # => 1
|
85
93
|
|
86
94
|
article.videos_comments.create(commenter: user, comment: 'Hello world again!')
|
87
95
|
article.photos_comments_count # => 1
|
88
96
|
article.videos_comments_count # => 1
|
89
97
|
article.comments_count # => 2
|
98
|
+
user.comments_count # => 2
|
90
99
|
```
|
91
100
|
|
92
101
|
## License
|
93
102
|
|
94
|
-
`Parole` is © 2013 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/parole/blob/master/LICENSE.md) file.
|
103
|
+
`Parole` is © 2013-2015 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/parole/blob/master/LICENSE.md) file.
|
95
104
|
|
96
105
|
## About Mirego
|
97
106
|
|
98
|
-
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We
|
107
|
+
[Mirego](http://mirego.com) is a team of passionate people who believe that work is a place where you can innovate and have fun. We're a team of [talented people](http://life.mirego.com) who imagine and build beautiful Web and mobile applications. We come together to share ideas and [change the world](http://mirego.org).
|
99
108
|
|
100
|
-
We also love
|
109
|
+
We also [love open-source software](http://open.mirego.com) and we try to give back to the community as much as we can.
|
data/lib/parole/comment.rb
CHANGED
@@ -24,19 +24,28 @@ module Parole
|
|
24
24
|
# Update the commentable cache counter columns
|
25
25
|
#
|
26
26
|
# Look for a `<role>_comments_count` and a `comments_count` column
|
27
|
-
# in the commentable model and update their value with the count.
|
27
|
+
# in the commentable model and the commenter model and update their value with the count.
|
28
28
|
def update_cache_counters
|
29
|
+
commenter_has_comments = commenter.respond_to?(:comments)
|
30
|
+
|
29
31
|
role_method = :"#{self.role}_comments_count="
|
30
32
|
if commentable.respond_to?(role_method)
|
31
33
|
commentable.send role_method, commentable.comments.where(role: self.role).count
|
32
34
|
end
|
35
|
+
if commenter_has_comments && commenter.respond_to?(role_method)
|
36
|
+
commenter.send role_method, commenter.comments.where(role: self.role).count
|
37
|
+
end
|
33
38
|
|
34
39
|
total_method = :comments_count=
|
35
40
|
if commentable.respond_to?(total_method)
|
36
41
|
commentable.send total_method, commentable.comments.count
|
37
42
|
end
|
43
|
+
if commenter_has_comments && commenter.respond_to?(total_method)
|
44
|
+
commenter.send total_method, commenter.comments.count
|
45
|
+
end
|
38
46
|
|
39
47
|
commentable.save(validate: false)
|
48
|
+
commenter.save(validate: false)
|
40
49
|
end
|
41
50
|
|
42
51
|
# Make sure that the value of the `role` attribute is a valid role
|
data/lib/parole/version.rb
CHANGED
data/spec/parole/comment_spec.rb
CHANGED
@@ -124,13 +124,19 @@ describe Parole::Comment do
|
|
124
124
|
describe :update_cache_counters do
|
125
125
|
before do
|
126
126
|
spawn_comment_model
|
127
|
-
spawn_commenter_model 'User'
|
127
|
+
spawn_commenter_model 'User' do
|
128
|
+
has_many :comments, -> { where(commenter_type: 'User') }, foreign_key: :commenter_id
|
129
|
+
end
|
128
130
|
spawn_commentable_model 'Article' do
|
129
131
|
acts_as_commentable roles: [:photos, :videos]
|
130
132
|
end
|
131
133
|
|
132
134
|
run_migration do
|
133
|
-
create_table(:users, force: true)
|
135
|
+
create_table(:users, force: true) do |t|
|
136
|
+
t.integer :photos_comments_count, default: 0
|
137
|
+
t.integer :videos_comments_count, default: 0
|
138
|
+
t.integer :comments_count, default: 0
|
139
|
+
end
|
134
140
|
create_table(:articles, force: true) do |t|
|
135
141
|
t.integer :photos_comments_count, default: 0
|
136
142
|
t.integer :videos_comments_count, default: 0
|
@@ -143,9 +149,15 @@ describe Parole::Comment do
|
|
143
149
|
let(:commentable) { Article.create }
|
144
150
|
let(:create_comment!) { commentable.photos_comments.create(commenter: commenter, comment: 'Booya') }
|
145
151
|
|
152
|
+
# Commentable cache counter
|
146
153
|
it { expect { create_comment! }.to change { commentable.reload.photos_comments_count }.from(0).to(1) }
|
147
154
|
it { expect { create_comment! }.to_not change { commentable.reload.videos_comments_count } }
|
148
155
|
it { expect { create_comment! }.to change { commentable.reload.comments_count }.from(0).to(1) }
|
156
|
+
|
157
|
+
# Commenter cache counter
|
158
|
+
it { expect { create_comment! }.to change { commenter.reload.photos_comments_count }.from(0).to(1) }
|
159
|
+
it { expect { create_comment! }.to_not change { commenter.reload.videos_comments_count } }
|
160
|
+
it { expect { create_comment! }.to change { commenter.reload.comments_count }.from(0).to(1) }
|
149
161
|
end
|
150
162
|
end
|
151
163
|
|
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parole
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rémi Prévost
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: sqlite3
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '2.14'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.14'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: activerecord
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 4.0.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 4.0.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: activesupport
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 4.0.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 4.0.0
|
97
97
|
description: Parole adds the ability to comment on ActiveRecord models.
|
@@ -101,9 +101,10 @@ executables: []
|
|
101
101
|
extensions: []
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
|
-
- .gitignore
|
105
|
-
- .rspec
|
106
|
-
- .travis.yml
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rspec"
|
106
|
+
- ".travis.yml"
|
107
|
+
- CHANGELOG.md
|
107
108
|
- Gemfile
|
108
109
|
- LICENSE.md
|
109
110
|
- README.md
|
@@ -133,17 +134,17 @@ require_paths:
|
|
133
134
|
- lib
|
134
135
|
required_ruby_version: !ruby/object:Gem::Requirement
|
135
136
|
requirements:
|
136
|
-
- -
|
137
|
+
- - ">="
|
137
138
|
- !ruby/object:Gem::Version
|
138
139
|
version: '0'
|
139
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
141
|
requirements:
|
141
|
-
- -
|
142
|
+
- - ">="
|
142
143
|
- !ruby/object:Gem::Version
|
143
144
|
version: '0'
|
144
145
|
requirements: []
|
145
146
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
147
|
+
rubygems_version: 2.4.5
|
147
148
|
signing_key:
|
148
149
|
specification_version: 4
|
149
150
|
summary: Parole adds the ability to comment on ActiveRecord models.
|