up: enable pass metadata to create method
parent
71925e3dc9
commit
0b6c6879db
|
@ -5,8 +5,8 @@ module Rating
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
def rate(resource, value, author: self, scope: nil)
|
def rate(resource, value, author: self, metadata: {}, scope: nil)
|
||||||
Rate.create author: author, resource: resource, scopeable: scope, value: value
|
Rate.create author: author, metadata: metadata, resource: resource, scopeable: scope, value: value
|
||||||
end
|
end
|
||||||
|
|
||||||
def rate_for(resource, scope: nil)
|
def rate_for(resource, scope: nil)
|
||||||
|
|
|
@ -18,7 +18,7 @@ module Rating
|
||||||
scope: %i[author_type resource_id resource_type scopeable_id scopeable_type]
|
scope: %i[author_type resource_id resource_type scopeable_id scopeable_type]
|
||||||
}
|
}
|
||||||
|
|
||||||
def self.create(author:, resource:, scopeable: nil, value:)
|
def self.create(author:, metadata:, resource:, scopeable: nil, value:)
|
||||||
record = find_or_initialize_by(author: author, resource: resource, scopeable: scopeable)
|
record = find_or_initialize_by(author: author, resource: resource, scopeable: scopeable)
|
||||||
|
|
||||||
return record if record.persisted? && value == record.value
|
return record if record.persisted? && value == record.value
|
||||||
|
|
|
@ -8,7 +8,9 @@ RSpec.describe Rating::Extension, ':rate' do
|
||||||
|
|
||||||
context 'with no scopeable' do
|
context 'with no scopeable' do
|
||||||
it 'delegates to rate object' do
|
it 'delegates to rate object' do
|
||||||
expect(Rating::Rate).to receive(:create).with author: author, resource: article, scopeable: nil, value: 3
|
expect(Rating::Rate).to receive(:create).with(
|
||||||
|
author: author, metadata: {}, resource: article, scopeable: nil, value: 3
|
||||||
|
)
|
||||||
|
|
||||||
author.rate article, 3
|
author.rate article, 3
|
||||||
end
|
end
|
||||||
|
@ -18,9 +20,33 @@ RSpec.describe Rating::Extension, ':rate' do
|
||||||
let!(:category) { build :category }
|
let!(:category) { build :category }
|
||||||
|
|
||||||
it 'delegates to rate object' do
|
it 'delegates to rate object' do
|
||||||
expect(Rating::Rate).to receive(:create).with author: author, resource: article, scopeable: category, value: 3
|
expect(Rating::Rate).to receive(:create).with(
|
||||||
|
author: author, metadata: {}, resource: article, scopeable: category, value: 3
|
||||||
|
)
|
||||||
|
|
||||||
author.rate article, 3, scope: category
|
author.rate article, 3, scope: category
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'with no metadata' do
|
||||||
|
it 'delegates an empty hash to rate object' do
|
||||||
|
expect(Rating::Rate).to receive(:create).with(
|
||||||
|
author: author, resource: article, metadata: {}, scopeable: nil, value: 3
|
||||||
|
)
|
||||||
|
|
||||||
|
author.rate article, 3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with metadata' do
|
||||||
|
let!(:category) { build :category }
|
||||||
|
|
||||||
|
it 'delegates to rate object' do
|
||||||
|
expect(Rating::Rate).to receive(:create).with(
|
||||||
|
author: author, metadata: { comment: 'comment' }, resource: article, scopeable: nil, value: 3
|
||||||
|
)
|
||||||
|
|
||||||
|
author.rate article, 3, metadata: { comment: 'comment' }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue