rating 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +64 -24
  4. data/lib/generators/rating/templates/db/migrate/create_rating_tables.rb +8 -8
  5. data/lib/rating/models/rating/extension.rb +2 -2
  6. data/lib/rating/models/rating/rate.rb +5 -3
  7. data/lib/rating/models/rating/rating.rb +13 -8
  8. data/lib/rating/version.rb +1 -1
  9. data/spec/factories/rating/rate.rb +1 -1
  10. data/spec/factories/rating/rating.rb +1 -1
  11. data/spec/models/extension/after_create_spec.rb +5 -5
  12. data/spec/models/extension/order_by_rating_spec.rb +37 -53
  13. data/spec/models/extension/rate_for_spec.rb +5 -5
  14. data/spec/models/extension/rate_spec.rb +31 -5
  15. data/spec/models/extension/rated_question_spec.rb +9 -9
  16. data/spec/models/extension/rated_records_spec.rb +3 -17
  17. data/spec/models/extension/rated_spec.rb +9 -27
  18. data/spec/models/extension/rates_records_spec.rb +2 -16
  19. data/spec/models/extension/rates_spec.rb +5 -19
  20. data/spec/models/extension/rating_records_spec.rb +2 -18
  21. data/spec/models/extension/rating_spec.rb +3 -17
  22. data/spec/models/rate/create_spec.rb +56 -15
  23. data/spec/models/rate/rate_for_spec.rb +7 -7
  24. data/spec/models/rate_spec.rb +2 -2
  25. data/spec/models/rating/averager_data_spec.rb +8 -24
  26. data/spec/models/rating/data_spec.rb +12 -28
  27. data/spec/models/rating/update_rating_spec.rb +2 -18
  28. data/spec/models/rating/values_data_spec.rb +10 -26
  29. data/spec/models/rating_spec.rb +6 -0
  30. data/spec/support/db/migrate/add_comment_on_rating_rates_table.rb +7 -0
  31. data/spec/support/db/migrate/{create_category_spec.rb → create_categories_table.rb} +0 -0
  32. data/spec/support/migrate.rb +3 -1
  33. data/spec/support/shared_context/with_database_records.rb +20 -0
  34. metadata +35 -37
  35. data/spec/factories/user.rb +0 -7
  36. data/spec/support/db/migrate/create_users_table.rb +0 -9
  37. data/spec/support/models/user.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b7eb5b802982259c2ec3101c38bbfe18302226f2
4
- data.tar.gz: cce443ffafbf9887de9d9261fa5e0223ad190b47
3
+ metadata.gz: 7828759c72eb95c9dc6562c8c56b2b42c2b266e6
4
+ data.tar.gz: ad5a258d49d2bbf05f0d2fbc54800e590850d5a9
5
5
  SHA512:
6
- metadata.gz: a29fc4b2a26a3f8cd40d3d97ad2d1691a3bd5cbd70a5bd436c9f57b5dbbb11470185a602394f6629989dda254f68aa0ff01ce4ca22c59291a1f83f81ad36cb11
7
- data.tar.gz: f79ec758ff607f735e9452b45705c52eacc6df4898cc4c8826a90fa6fe7cdf86fa0cde79c67321540aa262328afede7167f471e694b7df6744e944bbc52a41ae
6
+ metadata.gz: 880d5a7fe68b86e91d9b7eaf1c3f3ab3b7ef40eac8db2942daa8a7beca89e5887abbf92fbdc05b5bc751dd9ea292362bb5513c6adb43f74391a832027e5e15e4
7
+ data.tar.gz: 94e6666f1174c77da6cd9db33fd2415aa4af621813689da0ff7c1f082c55b39015d2538add63cff10b4972a4a5797859f1b3c42d061d4611b1b14106d6b703fb
@@ -1,3 +1,9 @@
1
+ ## v0.3.0
2
+
3
+ ### News
4
+
5
+ - The `vote` method now can receive `metadata` to be persisted with vote data.
6
+
1
7
  ## v0.2.0
2
8
 
3
9
  ### News
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/wbotelhos/rating.svg)](https://travis-ci.org/wbotelhos/rating)
4
4
  [![Gem Version](https://badge.fury.io/rb/rating.svg)](https://badge.fury.io/rb/rating)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/cc5efe8b06bc1d5e9e8a/maintainability)](https://codeclimate.com/github/wbotelhos/rating/maintainability)
6
+ [![Support](https://img.shields.io/badge/donate-%3C3-brightgreen.svg)](https://liberapay.com/wbotelhos)
5
7
 
6
8
  A true Bayesian rating system with scope and cache enabled.
7
9
 
@@ -66,7 +68,7 @@ rake db:migrate
66
68
  Just add the callback `rating` to your model:
67
69
 
68
70
  ```ruby
69
- class User < ApplicationRecord
71
+ class Author < ApplicationRecord
70
72
  rating
71
73
  end
72
74
  ```
@@ -78,10 +80,10 @@ Now this model can vote or receive votes.
78
80
  You can vote on some resource:
79
81
 
80
82
  ```ruby
81
- author = User.last
83
+ author = Author.last
82
84
  resource = Article.last
83
85
 
84
- author.rate(resource, 3)
86
+ author.rate resource, 3
85
87
  ```
86
88
 
87
89
  ### rating
@@ -109,7 +111,7 @@ It will return a `Rating` object that keeps:
109
111
  You can retrieve the rate of some author gave to some resource:
110
112
 
111
113
  ```ruby
112
- author = User.last
114
+ author = Author.last
113
115
  resource = Article.last
114
116
 
115
117
  author.rate_for resource
@@ -128,7 +130,7 @@ It will return a `Rate` object that keeps:
128
130
  Maybe you want just to know if some author already rated some resource and receive `true` or `false`:
129
131
 
130
132
  ```ruby
131
- author = User.last
133
+ author = Author.last
132
134
  resource = Article.last
133
135
 
134
136
  author.rated? resource
@@ -136,12 +138,12 @@ author.rated? resource
136
138
 
137
139
  ### rates
138
140
 
139
- You can retrieve all rates made by some author:
141
+ You can retrieve all rates received by some resource:
140
142
 
141
143
  ```ruby
142
- author = User.last
144
+ resource = Article.last
143
145
 
144
- author.rates
146
+ resource.rates
145
147
  ```
146
148
 
147
149
  It will return a collection of `Rate` object.
@@ -151,7 +153,7 @@ It will return a collection of `Rate` object.
151
153
  In the same way you can retrieve all rates that some author received:
152
154
 
153
155
  ```ruby
154
- author = User.last
156
+ author = Author.last
155
157
 
156
158
  author.rated
157
159
  ```
@@ -183,7 +185,7 @@ Let's say an article belongs to one or more categories and you want to vote on s
183
185
  ```ruby
184
186
  category_1 = Category.first
185
187
  category_2 = Category.second
186
- author = User.last
188
+ author = Author.last
187
189
  resource = Article.last
188
190
  ```
189
191
 
@@ -192,28 +194,28 @@ In this situation you should scope the vote of article with some category:
192
194
  **rate**
193
195
 
194
196
  ```ruby
195
- author.rate resource, 3, scopeable: category_1
196
- author.rate resource, 5, scopeable: category_2
197
+ author.rate resource, 3, scope: category_1
198
+ author.rate resource, 5, scope: category_2
197
199
  ```
198
200
 
199
- Now `article` has a rating for `category_1` and another one for `category_2`.
201
+ Now `resource` has a rating for `category_1` and another one for `category_2`.
200
202
 
201
203
  **rating**
202
204
 
203
- Recovering the rating values for article, we have:
205
+ Recovering the rating values for resource, we have:
204
206
 
205
207
  ```ruby
206
- author.rating
208
+ resource.rating
207
209
  # nil
208
210
  ```
209
211
 
210
212
  But using the scope to make the right query:
211
213
 
212
214
  ```ruby
213
- author.rating scope: category_1
215
+ resource.rating scope: category_1
214
216
  # { average: 3, estimate: 3, sum: 3, total: 1 }
215
217
 
216
- author.rating scope: category_2
218
+ resource.rating scope: category_2
217
219
  # { average: 5, estimate: 5, sum: 5, total: 1 }
218
220
  ```
219
221
 
@@ -222,7 +224,7 @@ author.rating scope: category_2
222
224
  On the same way you can find your rates with a scoped query:
223
225
 
224
226
  ```ruby
225
- user.rated scope: category_1
227
+ author.rated scope: category_1
226
228
  # { value: 3, scopeable: category_1 }
227
229
  ```
228
230
 
@@ -253,19 +255,19 @@ Maybe you want to recover all records with or without scope, so you can add the
253
255
  ```ruby
254
256
  category_1 = Category.first
255
257
  category_2 = Category.second
256
- author = User.last
258
+ author = Author.last
257
259
  resource = Article.last
258
260
 
259
261
  author.rate resource, 1
260
- author.rate resource, 3, scopeable: category_1
261
- author.rate resource, 5, scopeable: category_2
262
+ author.rate resource, 3, scope: category_1
263
+ author.rate resource, 5, scope: category_2
262
264
 
263
265
  author.rating_records
264
266
  # { average: 1, estimate: 1, scopeable: nil , sum: 1, total: 1 },
265
267
  # { average: 3, estimate: 3, scopeable: category_1, sum: 3, total: 1 },
266
268
  # { average: 5, estimate: 5, scopeable: category_2, sum: 5, total: 1 }
267
269
 
268
- user.rated_records
270
+ author.rated_records
269
271
  # { value: 1 }, { value: 3, scopeable: category_1 }, { value: 5, scopeable: category_2 }
270
272
 
271
273
  article.rates_records
@@ -275,12 +277,50 @@ article.rates_records
275
277
  ### As
276
278
 
277
279
  If you have a model that will only be able to rate but not to receive a rate, configure it as `author`.
278
- An author model still can be rated, but won't genarate a Rating record with all values as zero to be easier to display.
280
+ An author model still can be rated, but won't genarate a Rating record with all values as zero to warm up the cache.
279
281
 
280
282
  ```ruby
281
283
  rating as: :author
282
284
  ```
283
285
 
286
+ ### Metadata
287
+
288
+ Maybe you want include a `comment` together your rating or even a `fingerprint` field to make your rating more secure.
289
+ So, first you will need to add more fields to the `Rating::Rate` table:
290
+
291
+ ```ruby
292
+ class AddCommentAndFingerprintOnRatingRates < ActiveRecord::Migration
293
+ def change
294
+ add_column :rating_rates, :comment, :text
295
+
296
+ add_reference :rating_rates, :fingerprint, foreign_key: true, index: true, null: false
297
+ end
298
+ end
299
+ ```
300
+
301
+ As you can seed, we can add any kind of field we want. Now we just provide this values when we make the rate:
302
+
303
+ ```ruby
304
+ author = Author.last
305
+ resource = Article.last
306
+ comment = 'This is a very nice rating. s2'
307
+ fingerprint = Fingerprint.new(ip: '127.0.0.1')
308
+
309
+ author.rate resource, 3, metadata: { comment: comment, fingerprint: fingerprint }
310
+ ```
311
+
312
+ Now you can have this data into your model normally:
313
+
314
+
315
+ ```ruby
316
+ author = Author.last
317
+ rate = author.rates.last
318
+
319
+ rate.comment # 'This is a very nice rating. s2'
320
+ rate.fingerprint # <Fingerprint id:...>
321
+ rate.value # 3
322
+ ```
323
+
284
324
  ## Love it!
285
325
 
286
- Via [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=X8HEP2878NDEG&item_name=rating) or [Gratipay](https://gratipay.com/rating). Thanks! (:
326
+ Via [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=X8HEP2878NDEG&item_name=rating) or [Support](https://liberapay.com/wbotelhos). Thanks! (:
@@ -5,9 +5,9 @@ class CreateRatingTables < ActiveRecord::Migration[5.0]
5
5
  create_table :rating_rates do |t|
6
6
  t.decimal :value, default: 0, precision: 17, scale: 14
7
7
 
8
- t.references :author , index: true, null: false, polymorphic: true
9
- t.references :resource , index: true, null: false, polymorphic: true
10
- t.references :scopeable, index: true, null: true , polymorphic: true
8
+ t.references :author, index: true, null: false, polymorphic: true
9
+ t.references :resource, index: true, null: false, polymorphic: true
10
+ t.references :scopeable, index: true, null: true, polymorphic: true
11
11
 
12
12
  t.timestamps null: false
13
13
  end
@@ -17,13 +17,13 @@ class CreateRatingTables < ActiveRecord::Migration[5.0]
17
17
  unique: true
18
18
 
19
19
  create_table :rating_ratings do |t|
20
- t.decimal :average , default: 0, mull: false, precision: 17, scale: 14
20
+ t.decimal :average, default: 0, mull: false, precision: 17, scale: 14
21
21
  t.decimal :estimate, default: 0, mull: false, precision: 17, scale: 14
22
- t.integer :sum , default: 0, mull: false
23
- t.integer :total , default: 0, mull: false
22
+ t.integer :sum, default: 0, mull: false
23
+ t.integer :total, default: 0, mull: false
24
24
 
25
- t.references :resource , index: true, null: false, polymorphic: true
26
- t.references :scopeable, index: true, null: true , polymorphic: true
25
+ t.references :resource, index: true, null: false, polymorphic: true
26
+ t.references :scopeable, index: true, null: true, polymorphic: true
27
27
 
28
28
  t.timestamps null: false
29
29
  end
@@ -5,8 +5,8 @@ module Rating
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- def rate(resource, value, author: self, scope: nil)
9
- Rate.create author: author, resource: resource, scopeable: scope, value: value
8
+ def rate(resource, value, author: self, metadata: {}, scope: nil)
9
+ Rate.create author: author, metadata: metadata, resource: resource, scopeable: scope, value: value
10
10
  end
11
11
 
12
12
  def rate_for(resource, scope: nil)
@@ -6,8 +6,8 @@ module Rating
6
6
 
7
7
  after_save :update_rating
8
8
 
9
- belongs_to :author , polymorphic: true
10
- belongs_to :resource , polymorphic: true
9
+ belongs_to :author, polymorphic: true
10
+ belongs_to :resource, polymorphic: true
11
11
  belongs_to :scopeable, polymorphic: true
12
12
 
13
13
  validates :author, :resource, :value, presence: true
@@ -18,11 +18,13 @@ module Rating
18
18
  scope: %i[author_type resource_id resource_type scopeable_id scopeable_type]
19
19
  }
20
20
 
21
- def self.create(author:, resource:, scopeable: nil, value:)
21
+ def self.create(author:, metadata:, resource:, scopeable: nil, value:)
22
22
  record = find_or_initialize_by(author: author, resource: resource, scopeable: scopeable)
23
23
 
24
24
  return record if record.persisted? && value == record.value
25
25
 
26
+ metadata.each { |k, v| record[k] = v } if metadata.present?
27
+
26
28
  record.value = value
27
29
  record.save
28
30
 
@@ -4,16 +4,21 @@ module Rating
4
4
  class Rating < ActiveRecord::Base
5
5
  self.table_name = 'rating_ratings'
6
6
 
7
- belongs_to :resource , polymorphic: true
7
+ belongs_to :resource, polymorphic: true
8
8
  belongs_to :scopeable, polymorphic: true
9
9
 
10
10
  validates :average, :estimate, :resource, :sum, :total, presence: true
11
11
  validates :average, :estimate, :sum, :total, numericality: true
12
12
 
13
+ validates :resource_id, uniqueness: {
14
+ case_sensitive: false,
15
+ scope: %i[resource_type scopeable_id scopeable_type]
16
+ }
17
+
13
18
  class << self
14
19
  def averager_data(resource, scopeable)
15
20
  total_count = how_many_resource_received_votes_sql?(distinct: false, scopeable: scopeable)
16
- distinct_count = how_many_resource_received_votes_sql?(distinct: true , scopeable: scopeable)
21
+ distinct_count = how_many_resource_received_votes_sql?(distinct: true, scopeable: scopeable)
17
22
  values = { resource_type: resource.class.base_class.name }
18
23
 
19
24
  values[:scopeable_type] = scopeable.class.base_class.name unless scopeable.nil?
@@ -23,7 +28,7 @@ module Rating
23
28
  (#{total_count} / CAST(#{distinct_count} AS float)) count_avg,
24
29
  COALESCE(AVG(value), 0) rating_avg
25
30
  FROM #{rate_table_name}
26
- WHERE resource_type = :resource_type and #{scope_type_query(scopeable)}
31
+ WHERE resource_type = :resource_type AND #{scope_type_query(scopeable)}
27
32
  ).squish
28
33
 
29
34
  execute_sql [sql, values]
@@ -43,9 +48,9 @@ module Rating
43
48
 
44
49
  def values_data(resource, scopeable)
45
50
  scope_query = if scopeable.nil?
46
- 'scopeable_type is NULL and scopeable_id is NULL'
51
+ 'scopeable_type is NULL AND scopeable_id is NULL'
47
52
  else
48
- 'scopeable_type = ? and scopeable_id = ?'
53
+ 'scopeable_type = ? AND scopeable_id = ?'
49
54
  end
50
55
 
51
56
  sql = %(
@@ -54,10 +59,10 @@ module Rating
54
59
  COALESCE(SUM(value), 0) rating_sum,
55
60
  COUNT(1) rating_count
56
61
  FROM #{rate_table_name}
57
- WHERE resource_type = ? and resource_id = ? and #{scope_query}
62
+ WHERE resource_type = ? AND resource_id = ? AND #{scope_query}
58
63
  ).squish
59
64
 
60
- values = [sql, resource.class.base_class.name, resource.id]
65
+ values = [sql, resource.class.base_class.name, resource.id]
61
66
  values += [scopeable.class.base_class.name, scopeable.id] unless scopeable.nil?
62
67
 
63
68
  execute_sql values
@@ -97,7 +102,7 @@ module Rating
97
102
  %((
98
103
  SELECT #{count}
99
104
  FROM #{rate_table_name}
100
- WHERE resource_type = :resource_type and #{scope_type_query(scopeable)}
105
+ WHERE resource_type = :resource_type AND #{scope_type_query(scopeable)}
101
106
  ))
102
107
  end
103
108
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rating
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -4,7 +4,7 @@ FactoryBot.define do
4
4
  factory :rating_rate, class: Rating::Rate do
5
5
  value 100
6
6
 
7
- author { create :user }
7
+ author { create :author }
8
8
  resource { create :article }
9
9
  end
10
10
  end
@@ -7,6 +7,6 @@ FactoryBot.define do
7
7
  sum 100
8
8
  total 1
9
9
 
10
- resource { create :article }
10
+ association :resource, factory: :article, strategy: :build
11
11
  end
12
12
  end
@@ -3,22 +3,22 @@
3
3
  require 'rails_helper'
4
4
 
5
5
  RSpec.describe Rating::Extension, ':after_create' do
6
- context 'with :as as nil' do
7
- let!(:user) { create :user }
6
+ context 'when :as is nil' do
7
+ let!(:article) { create :article }
8
8
 
9
9
  it 'creates a rating record with zero values just to be easy to make the count' do
10
- rating = Rating::Rating.find_by(resource: user)
10
+ rating = Rating::Rating.find_by(resource: article)
11
11
 
12
12
  expect(rating.average).to eq 0
13
13
  expect(rating.estimate).to eq 0
14
- expect(rating.resource).to eq user
14
+ expect(rating.resource).to eq article
15
15
  expect(rating.scopeable).to eq nil
16
16
  expect(rating.sum).to eq 0
17
17
  expect(rating.total).to eq 0
18
18
  end
19
19
  end
20
20
 
21
- context 'with :as as :author' do
21
+ context 'when :as is :author' do
22
22
  let!(:author) { create :author }
23
23
 
24
24
  it 'does not creates a rating record' do
@@ -1,26 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rails_helper'
4
+ require 'support/shared_context/with_database_records'
4
5
 
5
6
  RSpec.describe Rating::Extension, ':order_by_rating' do
6
- let!(:category) { create :category }
7
-
8
- let!(:user_1) { create :user }
9
- let!(:user_2) { create :user }
10
-
11
- let!(:article_1) { create :article }
12
- let!(:article_2) { create :article }
13
- let!(:article_3) { create :article }
14
-
15
- before do
16
- create :rating_rate, author: user_1, resource: article_1, value: 100
17
- create :rating_rate, author: user_1, resource: article_2, value: 11
18
- create :rating_rate, author: user_1, resource: article_3, value: 10
19
- create :rating_rate, author: user_2, resource: article_1, value: 1
20
-
21
- create :rating_rate, author: user_1, resource: article_1, scopeable: category, value: 1
22
- create :rating_rate, author: user_2, resource: article_1, scopeable: category, value: 2
23
- end
7
+ include_context 'with_database_records'
24
8
 
25
9
  context 'with default filters' do
26
10
  it 'sorts by :estimate :desc' do
@@ -32,8 +16,8 @@ RSpec.describe Rating::Extension, ':order_by_rating' do
32
16
  end
33
17
  end
34
18
 
35
- context 'filtering by :average' do
36
- context 'as asc' do
19
+ context 'when filtering by :average' do
20
+ context 'with as asc' do
37
21
  it 'works' do
38
22
  expect(Article.order_by_rating(:average, :asc)).to eq [
39
23
  article_3,
@@ -51,7 +35,7 @@ RSpec.describe Rating::Extension, ':order_by_rating' do
51
35
  end
52
36
  end
53
37
 
54
- context 'as desc' do
38
+ context 'with as desc' do
55
39
  it 'works' do
56
40
  expect(Article.order_by_rating(:average, :desc)).to eq [
57
41
  article_1,
@@ -70,8 +54,8 @@ RSpec.describe Rating::Extension, ':order_by_rating' do
70
54
  end
71
55
  end
72
56
 
73
- context 'filtering by :estimate' do
74
- context 'as asc' do
57
+ context 'when filtering by :estimate' do
58
+ context 'with as asc' do
75
59
  it 'works' do
76
60
  expect(Article.order_by_rating(:estimate, :asc)).to eq [
77
61
  article_3,
@@ -89,7 +73,7 @@ RSpec.describe Rating::Extension, ':order_by_rating' do
89
73
  end
90
74
  end
91
75
 
92
- context 'as desc' do
76
+ context 'with as desc' do
93
77
  it 'works' do
94
78
  expect(Article.order_by_rating(:estimate, :desc)).to eq [
95
79
  article_1,
@@ -108,7 +92,7 @@ RSpec.describe Rating::Extension, ':order_by_rating' do
108
92
  end
109
93
  end
110
94
 
111
- context 'filtering by :sum' do
95
+ context 'when filtering by :sum' do
112
96
  context 'as asc' do
113
97
  it 'works' do
114
98
  expect(Article.order_by_rating(:sum, :asc)).to eq [
@@ -127,7 +111,7 @@ RSpec.describe Rating::Extension, ':order_by_rating' do
127
111
  end
128
112
  end
129
113
 
130
- context 'as desc' do
114
+ context 'with as desc' do
131
115
  it 'works' do
132
116
  expect(Article.order_by_rating(:sum, :desc)).to eq [
133
117
  article_1,
@@ -144,39 +128,39 @@ RSpec.describe Rating::Extension, ':order_by_rating' do
144
128
  end
145
129
  end
146
130
  end
131
+ end
147
132
 
148
- context 'filtering by :total' do
149
- context 'as asc' do
150
- it 'works' do
151
- result = Article.order_by_rating(:total, :asc)
133
+ context 'when filtering by :total' do
134
+ context 'with as asc' do
135
+ it 'works' do
136
+ result = Article.order_by_rating(:total, :asc)
152
137
 
153
- expect(result[0..1]).to match_array [article_2, article_3]
154
- expect(result.last).to eq article_1
155
- end
138
+ expect(result[0..1]).to match_array [article_2, article_3]
139
+ expect(result.last).to eq article_1
140
+ end
156
141
 
157
- context 'with scope' do
158
- it 'works' do
159
- expect(Article.order_by_rating(:total, :asc, scope: category)).to eq [
160
- article_1
161
- ]
162
- end
142
+ context 'with scope' do
143
+ it 'works' do
144
+ expect(Article.order_by_rating(:total, :asc, scope: category)).to eq [
145
+ article_1
146
+ ]
163
147
  end
164
148
  end
149
+ end
165
150
 
166
- context 'as desc' do
167
- it 'works' do
168
- result = Article.order_by_rating(:total, :desc)
151
+ context 'with as desc' do
152
+ it 'works' do
153
+ result = Article.order_by_rating(:total, :desc)
169
154
 
170
- expect(result.first).to eq article_1
171
- expect(result[1..2]).to match_array [article_2, article_3]
172
- end
155
+ expect(result.first).to eq article_1
156
+ expect(result[1..2]).to match_array [article_2, article_3]
157
+ end
173
158
 
174
- context 'with scope' do
175
- it 'works' do
176
- expect(Article.order_by_rating(:total, :desc, scope: category)).to eq [
177
- article_1
178
- ]
179
- end
159
+ context 'with scope' do
160
+ it 'works' do
161
+ expect(Article.order_by_rating(:total, :desc, scope: category)).to eq [
162
+ article_1
163
+ ]
180
164
  end
181
165
  end
182
166
  end
@@ -184,12 +168,12 @@ RSpec.describe Rating::Extension, ':order_by_rating' do
184
168
 
185
169
  context 'with other resource' do
186
170
  it 'works' do
187
- expect(User.order_by_rating(:total, :desc)).to match_array [user_1, user_2]
171
+ expect(Author.order_by_rating(:total, :desc)).to match_array [author_1, author_2]
188
172
  end
189
173
 
190
174
  context 'with scope' do
191
175
  it 'returns empty since creation has no scope' do
192
- expect(User.order_by_rating(:total, :desc, scope: category)).to eq []
176
+ expect(Author.order_by_rating(:total, :desc, scope: category)).to eq []
193
177
  end
194
178
  end
195
179
  end