rating 0.11.0 → 0.12.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 +4 -4
- data/CHANGELOG.md +23 -9
- data/README.md +16 -5
- data/lib/rating/models/rating/extension.rb +1 -2
- data/lib/rating/models/rating/rate.rb +2 -2
- data/lib/rating/models/rating/rating.rb +2 -2
- data/lib/rating/version.rb +1 -1
- metadata +56 -130
- data/spec/config/rate_table_spec.rb +0 -17
- data/spec/config/rating_table_spec.rb +0 -17
- data/spec/config/validations_spec.rb +0 -33
- data/spec/factories/article.rb +0 -7
- data/spec/factories/author.rb +0 -7
- data/spec/factories/category.rb +0 -7
- data/spec/factories/comment.rb +0 -5
- data/spec/factories/global.rb +0 -6
- data/spec/factories/rating/rate.rb +0 -10
- data/spec/factories/rating/rating.rb +0 -12
- data/spec/factories/toy.rb +0 -6
- data/spec/models/extension/after_create_spec.rb +0 -47
- data/spec/models/extension/order_by_rating_spec.rb +0 -180
- data/spec/models/extension/rate_for_spec.rb +0 -41
- data/spec/models/extension/rate_spec.rb +0 -60
- data/spec/models/extension/rated_question_spec.rb +0 -48
- data/spec/models/extension/rated_records_spec.rb +0 -12
- data/spec/models/extension/rated_spec.rb +0 -50
- data/spec/models/extension/rates_records_spec.rb +0 -12
- data/spec/models/extension/rates_spec.rb +0 -50
- data/spec/models/extension/rating_records_spec.rb +0 -12
- data/spec/models/extension/rating_spec.rb +0 -40
- data/spec/models/extension/rating_warm_up_spec.rb +0 -115
- data/spec/models/extension/unscoped_rating_spec.rb +0 -99
- data/spec/models/extension/where_spec.rb +0 -33
- data/spec/models/rate/create_spec.rb +0 -422
- data/spec/models/rate/rate_for_spec.rb +0 -107
- data/spec/models/rate_spec.rb +0 -28
- data/spec/models/rating/averager_data_spec.rb +0 -32
- data/spec/models/rating/data_spec.rb +0 -48
- data/spec/models/rating/update_rating_spec.rb +0 -48
- data/spec/models/rating/values_data_spec.rb +0 -40
- data/spec/models/rating_spec.rb +0 -24
- data/spec/rails_helper.rb +0 -17
- data/spec/support/common.rb +0 -22
- data/spec/support/database_cleaner.rb +0 -19
- data/spec/support/db/migrate/add_comment_on_rating_rates_table.rb +0 -8
- data/spec/support/db/migrate/add_extra_fields_on_rating_rates_table.rb +0 -8
- data/spec/support/db/migrate/create_articles_table.rb +0 -9
- data/spec/support/db/migrate/create_authors_table.rb +0 -9
- data/spec/support/db/migrate/create_categories_table.rb +0 -12
- data/spec/support/db/migrate/create_comments_table.rb +0 -7
- data/spec/support/db/migrate/create_globals_table.rb +0 -8
- data/spec/support/db/migrate/create_rates_table.rb +0 -19
- data/spec/support/db/migrate/create_rating_table.rb +0 -20
- data/spec/support/db/migrate/create_review_ratings_table.rb +0 -17
- data/spec/support/db/migrate/create_reviews_table.rb +0 -15
- data/spec/support/db/migrate/create_toys_table.rb +0 -8
- data/spec/support/factory_bot.rb +0 -9
- data/spec/support/migrate.rb +0 -21
- data/spec/support/models/article.rb +0 -7
- data/spec/support/models/author.rb +0 -5
- data/spec/support/models/category.rb +0 -6
- data/spec/support/models/comment.rb +0 -5
- data/spec/support/models/global.rb +0 -7
- data/spec/support/models/review.rb +0 -5
- data/spec/support/models/review_rating.rb +0 -4
- data/spec/support/models/toy.rb +0 -5
- data/spec/support/shared_context/with_database_records.rb +0 -20
- data/spec/support/shoulda.rb +0 -10
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
require 'support/shared_context/with_database_records'
|
5
|
-
|
6
|
-
RSpec.describe Rating::Rating, ':averager_data' do
|
7
|
-
include_context 'with_database_records'
|
8
|
-
|
9
|
-
context 'with no scopeable' do
|
10
|
-
subject(:result) { described_class.averager_data article_1, nil }
|
11
|
-
|
12
|
-
it 'returns the values average of given resource type' do
|
13
|
-
expect(result.as_json['rating_avg'].to_f.to_s).to eq '30.5'
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'returns the average of number of records for the given resource type' do
|
17
|
-
expect(result.as_json['count_avg'].to_s).to eq '1.333333333333333333'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'with scopeable' do
|
22
|
-
subject(:result) { described_class.averager_data article_1, category }
|
23
|
-
|
24
|
-
it 'returns the values average of given resource type' do
|
25
|
-
expect(result.as_json['rating_avg'].to_f.to_s).to eq '1.5'
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'returns the average of number of records for the given resource type' do
|
29
|
-
expect(result.as_json['count_avg'].to_f.to_s).to eq '2.0'
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
require 'support/shared_context/with_database_records'
|
5
|
-
|
6
|
-
RSpec.describe Rating::Rating, ':data' do
|
7
|
-
include_context 'with_database_records'
|
8
|
-
|
9
|
-
context 'with no scopeable' do
|
10
|
-
subject(:result) { described_class.data article_1, nil }
|
11
|
-
|
12
|
-
it 'returns the average of value for a resource' do
|
13
|
-
expect(result[:average]).to eq 50.5
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'returns the sum of values for a resource' do
|
17
|
-
expect(result[:sum]).to eq 101
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns the count of votes for a resource' do
|
21
|
-
expect(result[:total]).to eq 2
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'returns the estimate for a resource' do
|
25
|
-
expect(result[:estimate].to_s).to eq '42.5000000000000000012000000505'
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'with scopeable' do
|
30
|
-
subject(:result) { described_class.data article_1, category }
|
31
|
-
|
32
|
-
it 'returns the average of value for a resource' do
|
33
|
-
expect(result[:average]).to eq 1.5
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'returns the sum of values for a resource' do
|
37
|
-
expect(result[:sum]).to eq 3
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'returns the count of votes for a resource' do
|
41
|
-
expect(result[:total]).to eq 2
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'returns the estimate for a resource' do
|
45
|
-
expect(result[:estimate]).to eq 1.5
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
require 'support/shared_context/with_database_records'
|
5
|
-
|
6
|
-
RSpec.describe Rating::Rating, ':update_rating' do
|
7
|
-
context 'with no scopeable' do
|
8
|
-
include_context 'with_database_records'
|
9
|
-
|
10
|
-
it 'updates the rating data of the given resource' do
|
11
|
-
record = described_class.find_by(resource: article_1)
|
12
|
-
|
13
|
-
expect(record.average).to eq 50.5
|
14
|
-
expect(record.estimate).to eq 42.5
|
15
|
-
expect(record.sum).to eq 101
|
16
|
-
expect(record.total).to eq 2
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context 'with scopeable' do
|
21
|
-
include_context 'with_database_records'
|
22
|
-
|
23
|
-
it 'updates the rating data of the given resource respecting the scope' do
|
24
|
-
record = described_class.find_by(resource: article_1, scopeable: category)
|
25
|
-
|
26
|
-
expect(record.average).to eq 1.5
|
27
|
-
expect(record.estimate).to eq 1.5
|
28
|
-
expect(record.sum).to eq 3
|
29
|
-
expect(record.total).to eq 2
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'when rate table has no record' do
|
34
|
-
let!(:resource) { create :article }
|
35
|
-
let!(:scope) { nil }
|
36
|
-
|
37
|
-
it 'calculates with counts values as zero' do
|
38
|
-
described_class.update_rating resource, scope
|
39
|
-
|
40
|
-
record = described_class.last
|
41
|
-
|
42
|
-
expect(record.average).to eq 0
|
43
|
-
expect(record.estimate).to eq 0
|
44
|
-
expect(record.sum).to eq 0
|
45
|
-
expect(record.total).to eq 0
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
require 'support/shared_context/with_database_records'
|
5
|
-
|
6
|
-
RSpec.describe Rating::Rating, ':values_data' do
|
7
|
-
include_context 'with_database_records'
|
8
|
-
|
9
|
-
context 'with no scopeable' do
|
10
|
-
subject(:result) { described_class.values_data article_1, nil }
|
11
|
-
|
12
|
-
it 'returns the average of value for a resource' do
|
13
|
-
expect(result.as_json['rating_avg'].to_f.to_s).to eq '50.5'
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'returns the sum of values for a resource' do
|
17
|
-
expect(result.as_json['rating_sum'].to_f.to_s).to eq '101.0'
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns the count of votes for a resource' do
|
21
|
-
expect(result.as_json['rating_count'].to_f.to_s).to eq '2.0'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'with scopeable' do
|
26
|
-
subject(:result) { described_class.values_data article_1, category }
|
27
|
-
|
28
|
-
it 'returns the average of value for a resource' do
|
29
|
-
expect(result.as_json['rating_avg'].to_f.to_s).to eq '1.5'
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns the sum of values for a resource' do
|
33
|
-
expect(result.as_json['rating_sum'].to_f.to_s).to eq '3.0'
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'returns the count of votes for a resource' do
|
37
|
-
expect(result.as_json['rating_count'].to_f.to_s).to eq '2.0'
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/spec/models/rating_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.describe Rating::Rating do
|
6
|
-
let!(:object) { build :rating_rating }
|
7
|
-
|
8
|
-
it { expect(object).to be_valid }
|
9
|
-
|
10
|
-
it { is_expected.to belong_to :resource }
|
11
|
-
it { is_expected.to belong_to :scopeable }
|
12
|
-
|
13
|
-
it { is_expected.to validate_presence_of :average }
|
14
|
-
it { is_expected.to validate_presence_of :estimate }
|
15
|
-
it { is_expected.to validate_presence_of :resource }
|
16
|
-
it { is_expected.to validate_presence_of :sum }
|
17
|
-
it { is_expected.to validate_presence_of :total }
|
18
|
-
|
19
|
-
it do
|
20
|
-
expect(object).to validate_uniqueness_of(:resource_id)
|
21
|
-
.scoped_to(%i[resource_type scopeable_id scopeable_type])
|
22
|
-
.case_insensitive
|
23
|
-
end
|
24
|
-
end
|
data/spec/rails_helper.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
ENV['RAILS_ENV'] ||= 'test'
|
4
|
-
|
5
|
-
require 'active_record/railtie'
|
6
|
-
require 'mysql2'
|
7
|
-
require 'pry-byebug'
|
8
|
-
require 'rating'
|
9
|
-
|
10
|
-
client = Mysql2::Client.new(host: :localhost, username: :root)
|
11
|
-
|
12
|
-
client.query 'DROP DATABASE IF EXISTS rating_test;'
|
13
|
-
client.query 'CREATE DATABASE IF NOT EXISTS rating_test;'
|
14
|
-
|
15
|
-
ActiveRecord::Base.establish_connection adapter: :mysql2, database: :rating_test, username: :root
|
16
|
-
|
17
|
-
Dir[File.expand_path('support/**/*.rb', __dir__)].each { |file| require file }
|
data/spec/support/common.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rspec/rails'
|
4
|
-
|
5
|
-
RSpec.configure do |config|
|
6
|
-
config.filter_run_when_matching :focus
|
7
|
-
|
8
|
-
config.disable_monkey_patching!
|
9
|
-
config.infer_spec_type_from_file_location!
|
10
|
-
|
11
|
-
config.expect_with :rspec do |expectations|
|
12
|
-
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
13
|
-
end
|
14
|
-
|
15
|
-
config.mock_with :rspec do |mocks|
|
16
|
-
mocks.verify_partial_doubles = true
|
17
|
-
end
|
18
|
-
|
19
|
-
config.infer_base_class_for_anonymous_controllers = false
|
20
|
-
config.order = :random
|
21
|
-
config.profile_examples = true
|
22
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'database_cleaner'
|
4
|
-
|
5
|
-
RSpec.configure do |config|
|
6
|
-
config.before :suite do
|
7
|
-
DatabaseCleaner.strategy = :transaction
|
8
|
-
|
9
|
-
DatabaseCleaner.clean_with :truncation
|
10
|
-
end
|
11
|
-
|
12
|
-
config.before { DatabaseCleaner.start }
|
13
|
-
|
14
|
-
config.around do |spec|
|
15
|
-
DatabaseCleaner.cleaning do
|
16
|
-
spec.run
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class CreateCategoriesTable < ActiveRecord::Migration[5.0]
|
4
|
-
def change
|
5
|
-
create_table :categories do |t|
|
6
|
-
t.string :name, null: false
|
7
|
-
|
8
|
-
t.references :article, foreign_key: true, index: true
|
9
|
-
t.references :global, foreign_key: true, index: true
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class CreateRateTable < ActiveRecord::Migration[5.0]
|
4
|
-
def change
|
5
|
-
create_table :rating_rates do |t|
|
6
|
-
t.decimal :value, default: 0, precision: 25, scale: 16
|
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
|
11
|
-
|
12
|
-
t.timestamps null: false
|
13
|
-
end
|
14
|
-
|
15
|
-
change_column :rating_rates, :author_type, :string, limit: 10
|
16
|
-
change_column :rating_rates, :resource_type, :string, limit: 10
|
17
|
-
change_column :rating_rates, :scopeable_type, :string, limit: 10
|
18
|
-
end
|
19
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class CreateRatingTable < ActiveRecord::Migration[5.0]
|
4
|
-
def change
|
5
|
-
create_table :rating_ratings do |t|
|
6
|
-
t.decimal :average, default: 0, mull: false, precision: 25, scale: 16
|
7
|
-
t.decimal :estimate, default: 0, mull: false, precision: 25, scale: 16
|
8
|
-
t.integer :sum, default: 0, mull: false
|
9
|
-
t.integer :total, default: 0, mull: false
|
10
|
-
|
11
|
-
t.references :resource, index: true, null: false, polymorphic: true
|
12
|
-
t.references :scopeable, index: true, null: true, polymorphic: true
|
13
|
-
|
14
|
-
t.timestamps null: false
|
15
|
-
end
|
16
|
-
|
17
|
-
change_column :rating_ratings, :resource_type, :string, limit: 10
|
18
|
-
change_column :rating_ratings, :scopeable_type, :string, limit: 10
|
19
|
-
end
|
20
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class CreateReviewRatingsTable < ActiveRecord::Migration[5.0]
|
4
|
-
def change
|
5
|
-
create_table :review_ratings do |t|
|
6
|
-
t.decimal :average, default: 0, mull: false, precision: 25, scale: 16
|
7
|
-
t.decimal :estimate, default: 0, mull: false, precision: 25, scale: 16
|
8
|
-
t.integer :sum, default: 0, mull: false
|
9
|
-
t.integer :total, default: 0, mull: false
|
10
|
-
|
11
|
-
t.references :resource, index: true, null: false, polymorphic: true
|
12
|
-
t.references :scopeable, index: true, null: true, polymorphic: true
|
13
|
-
|
14
|
-
t.timestamps null: false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class CreateReviewsTable < ActiveRecord::Migration[5.0]
|
4
|
-
def change
|
5
|
-
create_table :reviews do |t|
|
6
|
-
t.decimal :value, default: 0, precision: 25, scale: 16
|
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
|
11
|
-
|
12
|
-
t.timestamps null: false
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/spec/support/factory_bot.rb
DELETED
data/spec/support/migrate.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Dir[File.expand_path('db/migrate/*.rb', __dir__)].each { |file| require file }
|
4
|
-
|
5
|
-
CreateRateTable.new.change
|
6
|
-
CreateRatingTable.new.change
|
7
|
-
|
8
|
-
CreateArticlesTable.new.change
|
9
|
-
CreateAuthorsTable.new.change
|
10
|
-
CreateToysTable.new.change
|
11
|
-
|
12
|
-
CreateGlobalsTable.new.change
|
13
|
-
CreateCategoriesTable.new.change
|
14
|
-
|
15
|
-
CreateCommentsTable.new.change
|
16
|
-
|
17
|
-
CreateReviewRatingsTable.new.change
|
18
|
-
CreateReviewsTable.new.change
|
19
|
-
|
20
|
-
AddCommentOnRatingRatesTable.new.change
|
21
|
-
AddExtraScopesOnRatingRatesTable.new.change if ENV['CONFIG_ENABLED_WITH_EXTRA_SCOPES'] == 'true'
|
data/spec/support/models/toy.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.shared_context 'with_database_records' do
|
4
|
-
let!(:category) { create :category }
|
5
|
-
|
6
|
-
let!(:author_1) { create :author }
|
7
|
-
let!(:author_2) { create :author }
|
8
|
-
|
9
|
-
let!(:article_1) { create :article }
|
10
|
-
let!(:article_2) { create :article }
|
11
|
-
let!(:article_3) { create :article }
|
12
|
-
|
13
|
-
let!(:rate_1) { create :rating_rate, author: author_1, resource: article_1, value: 100 }
|
14
|
-
let!(:rate_2) { create :rating_rate, author: author_1, resource: article_2, value: 11 }
|
15
|
-
let!(:rate_3) { create :rating_rate, author: author_1, resource: article_3, value: 10 }
|
16
|
-
let!(:rate_4) { create :rating_rate, author: author_2, resource: article_1, value: 1 }
|
17
|
-
|
18
|
-
let!(:rate_5) { create :rating_rate, author: author_1, resource: article_1, scopeable: category, value: 1 }
|
19
|
-
let!(:rate_6) { create :rating_rate, author: author_2, resource: article_1, scopeable: category, value: 2 }
|
20
|
-
end
|