solidus_reviews 1.0.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 +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.travis.yml +18 -0
- data/CONTRIBUTING.md +28 -0
- data/Gemfile +14 -0
- data/LICENSE.md +26 -0
- data/README.md +93 -0
- data/Rakefile +21 -0
- data/app/assets/images/store/reviews/delete.gif +0 -0
- data/app/assets/images/store/reviews/star.gif +0 -0
- data/app/assets/javascripts/spree/backend/solidus_reviews.js +7 -0
- data/app/assets/javascripts/spree/frontend/solidus_reviews.js +7 -0
- data/app/assets/stylesheets/spree/backend/solidus_reviews.css +3 -0
- data/app/assets/stylesheets/spree/frontend/solidus_reviews.scss +83 -0
- data/app/controllers/spree/admin/feedback_reviews_controller.rb +6 -0
- data/app/controllers/spree/admin/review_settings_controller.rb +21 -0
- data/app/controllers/spree/admin/reviews_controller.rb +34 -0
- data/app/controllers/spree/feedback_reviews_controller.rb +41 -0
- data/app/controllers/spree/products_controller_decorator.rb +5 -0
- data/app/controllers/spree/reviews_controller.rb +48 -0
- data/app/helpers/spree/reviews_helper.rb +17 -0
- data/app/models/spree/feedback_review.rb +17 -0
- data/app/models/spree/product_decorator.rb +21 -0
- data/app/models/spree/review.rb +36 -0
- data/app/models/spree/reviews_ability.rb +17 -0
- data/app/models/spree/reviews_configuration.rb +26 -0
- data/app/overrides/add_reviews_after_product_properties.rb +5 -0
- data/app/overrides/add_reviews_tab_to_admin.rb +4 -0
- data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +5 -0
- data/app/views/spree/admin/feedback_reviews/index.html.erb +44 -0
- data/app/views/spree/admin/review_settings/edit.html.erb +40 -0
- data/app/views/spree/admin/reviews/_form.html.erb +22 -0
- data/app/views/spree/admin/reviews/edit.html.erb +26 -0
- data/app/views/spree/admin/reviews/index.html.erb +111 -0
- data/app/views/spree/feedback_reviews/_form.html.erb +13 -0
- data/app/views/spree/feedback_reviews/_summary.html.erb +6 -0
- data/app/views/spree/feedback_reviews/create.js.erb +7 -0
- data/app/views/spree/reviews/_form.html.erb +34 -0
- data/app/views/spree/reviews/_stars.html.erb +13 -0
- data/app/views/spree/reviews/index.html.erb +1 -0
- data/app/views/spree/reviews/new.html.erb +3 -0
- data/app/views/spree/shared/_rating.html.erb +15 -0
- data/app/views/spree/shared/_review.html.erb +28 -0
- data/app/views/spree/shared/_review_summary.html.erb +9 -0
- data/app/views/spree/shared/_reviews.html.erb +15 -0
- data/app/views/spree/shared/_shortrating.html.erb +9 -0
- data/bin/rails +5 -0
- data/config/initializers/constants.rb +1 -0
- data/config/initializers/load_preferences.rb +5 -0
- data/config/locales/de-CH.yml +68 -0
- data/config/locales/de.yml +68 -0
- data/config/locales/en-GB.yml +68 -0
- data/config/locales/en.yml +67 -0
- data/config/locales/es.yml +68 -0
- data/config/locales/fr.yml +68 -0
- data/config/locales/pl.yml +72 -0
- data/config/locales/pt-BR.yml +68 -0
- data/config/locales/pt.yml +69 -0
- data/config/locales/ro.yml +76 -0
- data/config/locales/ru.yml +73 -0
- data/config/locales/sv.yml +66 -0
- data/config/locales/tr.yml +68 -0
- data/config/locales/uk.yml +75 -0
- data/config/locales/zh-CN.yml +65 -0
- data/config/locales/zh-TW.yml +65 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20081020220724_create_reviews.rb +18 -0
- data/db/migrate/20101222083309_create_feedback_reviews.rb +17 -0
- data/db/migrate/20110406083603_add_rating_to_products.rb +21 -0
- data/db/migrate/20110606150524_add_user_to_reviews.rb +9 -0
- data/db/migrate/20110806093221_add_ip_address_to_reviews.rb +9 -0
- data/db/migrate/20120110172331_namespace_tables.rb +6 -0
- data/db/migrate/20120123141326_recalculate_ratings.rb +20 -0
- data/db/migrate/20120712182514_add_locale_to_reviews.rb +9 -0
- data/db/migrate/20120712182627_add_locale_to_feedback_reviews.rb +9 -0
- data/db/migrate/20140703200946_add_show_identifier_to_reviews.rb +6 -0
- data/db/sample/ratings.yml +16 -0
- data/db/sample/reviews.yml +59 -0
- data/lib/generators/solidus_reviews/install/install_generator.rb +30 -0
- data/lib/solidus_reviews/factories/feedback_review_factory.rb +8 -0
- data/lib/solidus_reviews/factories/review_factory.rb +20 -0
- data/lib/solidus_reviews/factories.rb +5 -0
- data/lib/solidus_reviews.rb +6 -0
- data/lib/spree_reviews/engine.rb +17 -0
- data/solidus_reviews.gemspec +35 -0
- data/spec/controllers/admin/feedback_reviews_controller_spec.rb +29 -0
- data/spec/controllers/admin/review_settings_controller_spec.rb +57 -0
- data/spec/controllers/admin/reviews_controller_spec.rb +63 -0
- data/spec/controllers/feedback_reviews_controller_spec.rb +71 -0
- data/spec/controllers/products_controller_spec.rb +9 -0
- data/spec/controllers/reviews_controller_spec.rb +136 -0
- data/spec/features/admin_spec.rb +35 -0
- data/spec/features/reviews_spec.rb +122 -0
- data/spec/helpers/review_helper_spec.rb +28 -0
- data/spec/models/feedback_review_spec.rb +78 -0
- data/spec/models/product_spec.rb +62 -0
- data/spec/models/review_spec.rb +168 -0
- data/spec/models/reviews_ability_spec.rb +46 -0
- data/spec/models/reviews_configuration_spec.rb +45 -0
- data/spec/spec_helper.rb +55 -0
- data/vendor/assets/javascripts/jquery.rating.js +376 -0
- metadata +357 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
tr:
|
|
3
|
+
activerecord:
|
|
4
|
+
attributes:
|
|
5
|
+
spree/review:
|
|
6
|
+
name: İsminiz
|
|
7
|
+
title: Başlık
|
|
8
|
+
review: Konu
|
|
9
|
+
rating: Değerlendirme
|
|
10
|
+
created_at: Tarih
|
|
11
|
+
ip_address: IP
|
|
12
|
+
user: Kullanıcı
|
|
13
|
+
models:
|
|
14
|
+
spree/review:
|
|
15
|
+
one: bir yorum
|
|
16
|
+
other: "%{count} yorumlar"
|
|
17
|
+
spree:
|
|
18
|
+
approval_status: Onay Durumu
|
|
19
|
+
approve: Onayla
|
|
20
|
+
approved_reviews: Onaylı
|
|
21
|
+
approved_text: Yorum 1-2 iş günü içinde yayımlanacaktır.
|
|
22
|
+
average_customer_rating: Ortalama Oy
|
|
23
|
+
back_reviews: Geri değerlendirme
|
|
24
|
+
based_upon_review_count:
|
|
25
|
+
one: bir incelemeye göre
|
|
26
|
+
other: "%{count} incelemeye göre"
|
|
27
|
+
by: tarafından
|
|
28
|
+
editing_review_for_html: 'Yorumu düzenle %{link}'
|
|
29
|
+
error_approve_review: Yorum onaylamada hata
|
|
30
|
+
error_no_product: Yorumlanan ürün artık yok
|
|
31
|
+
feedback: Geri bildirim
|
|
32
|
+
feedback_review_for: "Yorum: '%{review}'"
|
|
33
|
+
for: için
|
|
34
|
+
from: itibaren
|
|
35
|
+
info_approve_review: Onaylanmış yorum
|
|
36
|
+
leave_us_a_review_for: "%{name}"
|
|
37
|
+
no_reviews_available: "Bu ürün hakkında henüz herhangi bir yorum bulunmuyor.."
|
|
38
|
+
out_of_5: "5 üzerinden"
|
|
39
|
+
rating: değerlendirme
|
|
40
|
+
reviews: Yorumlar
|
|
41
|
+
admin:
|
|
42
|
+
tab:
|
|
43
|
+
review_management: Yorumlar
|
|
44
|
+
review_successfully_submitted: Yorumunuz başarıyla iletildi
|
|
45
|
+
spree_reviews:
|
|
46
|
+
feedback_rating: Geribildirimi değerlendir
|
|
47
|
+
include_unapproved: Listede ki onaylanmamış değerlendirmeleri dahil et
|
|
48
|
+
manage_review_settings: Yorum ekranını kontrol edin
|
|
49
|
+
preview_size: Yorum büyüklüğü
|
|
50
|
+
require_login: Yorumları görebilmek için kullanıcı girişi
|
|
51
|
+
review_settings: Yorum Ayarları
|
|
52
|
+
show_email: e-posta adresini göster
|
|
53
|
+
track_locale: Kullanıcının yerel bilgilerini kaydet/takip et
|
|
54
|
+
star:
|
|
55
|
+
one: "1"
|
|
56
|
+
other: "%{count}"
|
|
57
|
+
stars: Yıldızlar
|
|
58
|
+
submit_your_review: Gönder
|
|
59
|
+
submitted_on: "Gönderilme Tarihi:"
|
|
60
|
+
unapproved_reviews: Onaylanmamış
|
|
61
|
+
voice:
|
|
62
|
+
one: "1 değerlendirme"
|
|
63
|
+
other: "%{count} değerlendirme"
|
|
64
|
+
was_this_review_helpful: "Bu yorum size yardımcı oldu mu?"
|
|
65
|
+
write_your_own_review: Yorum Yap
|
|
66
|
+
you_must_enter_value_for_rating: "Yorum yazmak için giriş yapmalısınız."
|
|
67
|
+
anonymous: anonim
|
|
68
|
+
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
uk:
|
|
3
|
+
activerecord:
|
|
4
|
+
attributes:
|
|
5
|
+
spree/review:
|
|
6
|
+
name: Ваше ім’я
|
|
7
|
+
title: Заголовок
|
|
8
|
+
review: Відгук
|
|
9
|
+
rating: Оцінка
|
|
10
|
+
created_at: Дата
|
|
11
|
+
ip_address: IP
|
|
12
|
+
user: Користувач
|
|
13
|
+
show_identifier: Показувати автора
|
|
14
|
+
models:
|
|
15
|
+
spree/review:
|
|
16
|
+
one: один відгук
|
|
17
|
+
few: '%{count} відгуки'
|
|
18
|
+
many: '%{count} відгуків'
|
|
19
|
+
other: '%{count} відгуків'
|
|
20
|
+
spree:
|
|
21
|
+
approval_status: Підтвердження
|
|
22
|
+
approve: Схвалити
|
|
23
|
+
approved_reviews: Схвалено
|
|
24
|
+
average_customer_rating: Середня оцінка
|
|
25
|
+
back_reviews: Назад до відгуків
|
|
26
|
+
based_upon_review_count:
|
|
27
|
+
one: на основі одного відгуку
|
|
28
|
+
few: "на основі %{count} відгуків"
|
|
29
|
+
many: "на основі %{count} відгуків"
|
|
30
|
+
other: "на основі %{count} відгуків"
|
|
31
|
+
by: від
|
|
32
|
+
editing_review_for_html: 'Редагувати відгук на %{link}'
|
|
33
|
+
error_approve_review: Не вдалось схвалити відгук
|
|
34
|
+
error_no_product: Товару, на який писався відгук, більше не існує
|
|
35
|
+
feedback: Корисність
|
|
36
|
+
feedback_review_for: "Відгук: '%{review}'"
|
|
37
|
+
for: для
|
|
38
|
+
from: від
|
|
39
|
+
info_approve_review: Відгук схвалено
|
|
40
|
+
leave_us_a_review_for: "Будь ласка, залиште відгук та оцінку для '%{name}'"
|
|
41
|
+
no_reviews_available: 'Поки що немає відгуків на цей товар.'
|
|
42
|
+
out_of_5: 'з 5'
|
|
43
|
+
rating: оцінка
|
|
44
|
+
reviews: Відгуки
|
|
45
|
+
admin:
|
|
46
|
+
tab:
|
|
47
|
+
review_management: Відгуки
|
|
48
|
+
review_successfully_submitted: Відгук надіслано
|
|
49
|
+
spree_reviews:
|
|
50
|
+
feedback_rating: Оцінювати корисність
|
|
51
|
+
include_unapproved: Показувати незатверджені відгуки
|
|
52
|
+
manage_review_settings: Керувати відображенням відгуків
|
|
53
|
+
preview_size: Розмір скороченої версії
|
|
54
|
+
require_login: Тільки для зареєстрованих користувачів
|
|
55
|
+
review_settings: Налаштування відгуків
|
|
56
|
+
show_email: Показувати email
|
|
57
|
+
track_locale: Зберігати мову користувача
|
|
58
|
+
star:
|
|
59
|
+
one: '1'
|
|
60
|
+
few: '%{count}'
|
|
61
|
+
many: '%{count}'
|
|
62
|
+
other: '%{count}'
|
|
63
|
+
stars: Зірочок
|
|
64
|
+
submit_your_review: Надіслати відгук
|
|
65
|
+
submitted_on: Написано
|
|
66
|
+
unapproved_reviews: Непідтверджений
|
|
67
|
+
voice:
|
|
68
|
+
one: '1 голос'
|
|
69
|
+
few: '%{count} голоси'
|
|
70
|
+
many: '%{count} голосів'
|
|
71
|
+
other: '%{count} голосів'
|
|
72
|
+
was_this_review_helpful: 'Цей відгук корисний для вас?'
|
|
73
|
+
write_your_own_review: Напишіть свій відгук
|
|
74
|
+
you_must_enter_value_for_rating: 'Потрібно вибрати оцінку.'
|
|
75
|
+
anonymous: Анонім
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
zh-CN:
|
|
3
|
+
activerecord:
|
|
4
|
+
attributes:
|
|
5
|
+
spree/review:
|
|
6
|
+
name: 您的姓名
|
|
7
|
+
title: 标题
|
|
8
|
+
review: 內文
|
|
9
|
+
rating: 评级
|
|
10
|
+
created_at: 日期
|
|
11
|
+
ip_address: IP
|
|
12
|
+
user: 用戶
|
|
13
|
+
models:
|
|
14
|
+
spree/review:
|
|
15
|
+
one: 一个评论
|
|
16
|
+
other: "%{count}个评论"
|
|
17
|
+
spree:
|
|
18
|
+
approve: 核准
|
|
19
|
+
approved_reviews: 核准
|
|
20
|
+
average_customer_rating: 平均评级
|
|
21
|
+
back_reviews: 返回评论
|
|
22
|
+
based_upon_review_count:
|
|
23
|
+
one: 以评论为基础
|
|
24
|
+
other: "以 %{count} 個评论为基础"
|
|
25
|
+
by: 由
|
|
26
|
+
editing_review_for_html: '正在修改 %{link} 的评论'
|
|
27
|
+
error_approve_review: 出错了,不能核准评论
|
|
28
|
+
error_no_product: 被评论的产品不存在了。
|
|
29
|
+
feedback: 回馈
|
|
30
|
+
feedback_review_for: "评论: '%{review}'"
|
|
31
|
+
for: 給
|
|
32
|
+
from: 由
|
|
33
|
+
info_approve_review: 已核准评论
|
|
34
|
+
leave_us_a_review_for: "请给我们的 '%{name}' 评论和评级"
|
|
35
|
+
no_reviews_available: "此产品没有评论。"
|
|
36
|
+
out_of_5: "顶级为 5"
|
|
37
|
+
rating: 评级
|
|
38
|
+
reviews: 评论
|
|
39
|
+
admin:
|
|
40
|
+
tab:
|
|
41
|
+
review_management: 评论
|
|
42
|
+
review_successfully_submitted: 已成功递交评论。
|
|
43
|
+
spree_reviews:
|
|
44
|
+
feedback_rating: 评级回馈
|
|
45
|
+
include_unapproved: 包括未核准评论在列表中
|
|
46
|
+
manage_review_settings: 控制评论的显示
|
|
47
|
+
preview_size: 评论片段的大小
|
|
48
|
+
require_login: 用者必需登入
|
|
49
|
+
review_settings: 评论设定
|
|
50
|
+
show_email: 显示电邮地址
|
|
51
|
+
track_locale: 追踪用户地域
|
|
52
|
+
star:
|
|
53
|
+
one: "1"
|
|
54
|
+
other: "%{count}"
|
|
55
|
+
stars: 星
|
|
56
|
+
submit_your_review: 递交你的评论
|
|
57
|
+
submitted_on: 递交日期
|
|
58
|
+
unapproved_reviews: 沒核准
|
|
59
|
+
voice:
|
|
60
|
+
one: "1 聲音"
|
|
61
|
+
other: "%{count} 聲音"
|
|
62
|
+
was_this_review_helpful: "此评论对你是否有帮助?"
|
|
63
|
+
write_your_own_review: 写下您的评论
|
|
64
|
+
you_must_enter_value_for_rating: "您必需输入评级"
|
|
65
|
+
anonymous: 匿名者
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
zh-TW:
|
|
3
|
+
activerecord:
|
|
4
|
+
attributes:
|
|
5
|
+
spree/review:
|
|
6
|
+
name: 您的姓名
|
|
7
|
+
title: 標題
|
|
8
|
+
review: 內文
|
|
9
|
+
rating: 評級
|
|
10
|
+
created_at: 日期
|
|
11
|
+
ip_address: IP
|
|
12
|
+
user: 用戶
|
|
13
|
+
models:
|
|
14
|
+
spree/review:
|
|
15
|
+
one: 一個評論
|
|
16
|
+
other: '%{count}個評論'
|
|
17
|
+
spree:
|
|
18
|
+
approve: 核準
|
|
19
|
+
approved_reviews: 核準
|
|
20
|
+
average_customer_rating: 平均評級
|
|
21
|
+
back_reviews: 返回評論
|
|
22
|
+
based_upon_review_count:
|
|
23
|
+
one: 以評論為基礎
|
|
24
|
+
other: '以 %{count} 個評論為基礎'
|
|
25
|
+
by: 由
|
|
26
|
+
editing_review_for_html: '正在修改 %{link} 的評論'
|
|
27
|
+
error_approve_review: 出錯了,不能核準評論
|
|
28
|
+
error_no_product: 被評論的產品不存在了。
|
|
29
|
+
feedback: 回饋
|
|
30
|
+
feedback_review_for: "評論: '%{review}'"
|
|
31
|
+
for: 給
|
|
32
|
+
from: 由
|
|
33
|
+
info_approve_review: 已核準評論
|
|
34
|
+
leave_us_a_review_for: "請給我們的 '%{name}' 評論和評級"
|
|
35
|
+
no_reviews_available: '此產品沒有評論。'
|
|
36
|
+
out_of_5: '頂級為 5'
|
|
37
|
+
rating: 評級
|
|
38
|
+
reviews: 評論
|
|
39
|
+
admin:
|
|
40
|
+
tab:
|
|
41
|
+
review_management: 評論
|
|
42
|
+
review_successfully_submitted: 已成功遞交評論。
|
|
43
|
+
spree_reviews:
|
|
44
|
+
feedback_rating: 評級回饋
|
|
45
|
+
include_unapproved: 包括未核準評論在列表中
|
|
46
|
+
manage_review_settings: 控制評論的顯示
|
|
47
|
+
preview_size: 評論片段的大小
|
|
48
|
+
require_login: 用者必需登入
|
|
49
|
+
review_settings: 評論設定
|
|
50
|
+
show_email: 顯示電郵地址
|
|
51
|
+
track_locale: 追蹤用戶地域
|
|
52
|
+
star:
|
|
53
|
+
one: "1"
|
|
54
|
+
other: "%{count}"
|
|
55
|
+
stars: 星
|
|
56
|
+
submit_your_review: 遞交你的評論
|
|
57
|
+
submitted_on: 遞交日期
|
|
58
|
+
unapproved_reviews: 沒核準
|
|
59
|
+
voice:
|
|
60
|
+
one: "1 聲音"
|
|
61
|
+
other: "%{count} 聲音"
|
|
62
|
+
was_this_review_helpful: 此評論對你是否有幫助?
|
|
63
|
+
write_your_own_review: 寫下您的評論
|
|
64
|
+
you_must_enter_value_for_rating: 您必需輸入評級
|
|
65
|
+
anonymous: 匿名者
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Spree::Core::Engine.add_routes do
|
|
2
|
+
namespace :admin do
|
|
3
|
+
resources :reviews, only: [:index, :destroy, :edit, :update] do
|
|
4
|
+
member do
|
|
5
|
+
get :approve
|
|
6
|
+
end
|
|
7
|
+
resources :feedback_reviews, only: [:index, :destroy]
|
|
8
|
+
end
|
|
9
|
+
resource :review_settings, only: [:edit, :update]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
resources :products, only: [] do
|
|
13
|
+
resources :reviews, only: [:index, :new, :create] do
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
post '/reviews/:review_id/feedback(.:format)' => 'feedback_reviews#create', as: :feedback_reviews
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
class CreateReviews < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :reviews do |t|
|
|
4
|
+
t.integer :product_id
|
|
5
|
+
t.string :name
|
|
6
|
+
t.string :location
|
|
7
|
+
t.integer :rating
|
|
8
|
+
t.text :title
|
|
9
|
+
t.text :review
|
|
10
|
+
t.boolean :approved, :default => false
|
|
11
|
+
t.timestamps
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.down
|
|
16
|
+
drop_table :reviews
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class CreateFeedbackReviews < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :feedback_reviews do |t|
|
|
4
|
+
t.integer :user_id
|
|
5
|
+
t.integer :review_id, :null => false
|
|
6
|
+
t.integer :rating, :default => 0
|
|
7
|
+
t.text :comment
|
|
8
|
+
t.timestamps
|
|
9
|
+
end
|
|
10
|
+
add_index :feedback_reviews, :review_id
|
|
11
|
+
add_index :feedback_reviews, :user_id
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.down
|
|
15
|
+
drop_table :feedback_reviews
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class AddRatingToProducts < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
if table_exists?('products')
|
|
4
|
+
add_column :products, :avg_rating, :decimal, :default => 0.0, :null => false, :precision => 7, :scale => 5
|
|
5
|
+
add_column :products, :reviews_count, :integer, :default => 0, :null => false
|
|
6
|
+
elsif table_exists?('spree_products')
|
|
7
|
+
add_column :spree_products, :avg_rating, :decimal, :default => 0.0, :null => false, :precision => 7, :scale => 5
|
|
8
|
+
add_column :spree_products, :reviews_count, :integer, :default => 0, :null => false
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.down
|
|
13
|
+
if table_exists?('products')
|
|
14
|
+
remove_column :products, :reviews_count
|
|
15
|
+
remove_column :products, :avg_rating
|
|
16
|
+
elsif table_exists?('spree_products')
|
|
17
|
+
remove_column :spree_products, :reviews_count
|
|
18
|
+
remove_column :spree_products, :avg_rating
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class RecalculateRatings < ActiveRecord::Migration
|
|
2
|
+
def up
|
|
3
|
+
Spree::Product.reset_column_information
|
|
4
|
+
|
|
5
|
+
Spree::Product.update_all :reviews_count => 0
|
|
6
|
+
|
|
7
|
+
Spree::Product.joins(:reviews).where("spree_reviews.id IS NOT NULL").find_each do |p|
|
|
8
|
+
Spree::Product.update_counters p.id, :reviews_count => p.reviews.approved.length
|
|
9
|
+
|
|
10
|
+
# recalculate_product_rating exists on the review, not the product
|
|
11
|
+
if p.reviews.approved.count > 0
|
|
12
|
+
p.reviews.approved.first.recalculate_product_rating
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def down
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<%
|
|
2
|
+
require 'faker'
|
|
3
|
+
%>
|
|
4
|
+
r1:
|
|
5
|
+
product: ror_tote
|
|
6
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
|
7
|
+
location: here
|
|
8
|
+
rating: 4
|
|
9
|
+
title: "more uses for this item"
|
|
10
|
+
review: <%= Faker::Lorem.paragraph %>
|
|
11
|
+
approved: true
|
|
12
|
+
r2:
|
|
13
|
+
product: ror_tote
|
|
14
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
|
15
|
+
location: here
|
|
16
|
+
rating: 3
|
|
17
|
+
title: "further comments"
|
|
18
|
+
review: <%= Faker::Lorem.paragraph %>
|
|
19
|
+
approved: false
|
|
20
|
+
r3:
|
|
21
|
+
product: ror_ringer
|
|
22
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
|
23
|
+
location: here
|
|
24
|
+
rating: 4
|
|
25
|
+
title: "essential wear"
|
|
26
|
+
review: <%= Faker::Lorem.paragraph %>
|
|
27
|
+
approved: false
|
|
28
|
+
r4:
|
|
29
|
+
product: apache_baseball_jersey
|
|
30
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
|
31
|
+
location: here
|
|
32
|
+
rating: 2
|
|
33
|
+
title: "not impressed"
|
|
34
|
+
review: <%= Faker::Lorem.paragraph %>
|
|
35
|
+
approved: true
|
|
36
|
+
r5:
|
|
37
|
+
product: ror_ringer
|
|
38
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
|
39
|
+
location: an office
|
|
40
|
+
rating: 5
|
|
41
|
+
title: "I have one for every day of the week"
|
|
42
|
+
review: <%= Faker::Lorem.paragraph %>
|
|
43
|
+
approved: true
|
|
44
|
+
r6:
|
|
45
|
+
product: ror_ringer
|
|
46
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
|
47
|
+
location: here
|
|
48
|
+
rating: 4
|
|
49
|
+
title: "cooler than my toga"
|
|
50
|
+
review: <%= Faker::Lorem.paragraph %>
|
|
51
|
+
approved: true
|
|
52
|
+
r7:
|
|
53
|
+
product: ror_ringer
|
|
54
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
|
55
|
+
location: emerald city
|
|
56
|
+
rating: 2
|
|
57
|
+
title: "my other half didn't like it"
|
|
58
|
+
review: <%= Faker::Lorem.paragraph %>
|
|
59
|
+
approved: false
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module SolidusReviews
|
|
2
|
+
module Generators
|
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
|
4
|
+
|
|
5
|
+
class_option :auto_run_migrations, :type => :boolean, :default => false
|
|
6
|
+
|
|
7
|
+
def add_javascripts
|
|
8
|
+
append_file "vendor/assets/javascripts/spree/frontend/all.js", "//= require spree/frontend/solidus_reviews\n"
|
|
9
|
+
append_file "vendor/assets/javascripts/spree/backend/all.js", "//= require spree/backend/solidus_reviews\n"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def add_stylesheets
|
|
13
|
+
inject_into_file "vendor/assets/stylesheets/spree/frontend/all.css", " *= require spree/frontend/solidus_reviews\n", :before => /\*\//, :verbose => true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def add_migrations
|
|
17
|
+
run 'bundle exec rake railties:install:migrations FROM=solidus_reviews'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def run_migrations
|
|
21
|
+
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
|
|
22
|
+
if run_migrations
|
|
23
|
+
run 'bundle exec rake db:migrate'
|
|
24
|
+
else
|
|
25
|
+
puts 'Skipping rake db:migrate, don\'t forget to run it!'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
FactoryGirl.define do
|
|
2
|
+
factory :review, :class => Spree::Review do |f|
|
|
3
|
+
name { generate(:random_email) }
|
|
4
|
+
title { generate(:random_string) }
|
|
5
|
+
review { generate(:random_description) }
|
|
6
|
+
rating { rand(1..5) }
|
|
7
|
+
approved false
|
|
8
|
+
show_identifier true
|
|
9
|
+
user
|
|
10
|
+
product
|
|
11
|
+
|
|
12
|
+
trait :approved do
|
|
13
|
+
approved true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
trait :hide_identifier do
|
|
17
|
+
show_identifier false
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeReviews
|
|
2
|
+
class Engine < Rails::Engine
|
|
3
|
+
require 'spree/core'
|
|
4
|
+
isolate_namespace Spree
|
|
5
|
+
engine_name 'solidus_reviews'
|
|
6
|
+
|
|
7
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
|
8
|
+
|
|
9
|
+
def self.activate
|
|
10
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
|
11
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
|
12
|
+
end
|
|
13
|
+
Spree::Ability.register_ability(Spree::ReviewsAbility)
|
|
14
|
+
end
|
|
15
|
+
config.to_prepare &method(:activate).to_proc
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
Gem::Specification.new do |s|
|
|
2
|
+
s.platform = Gem::Platform::RUBY
|
|
3
|
+
s.name = 'solidus_reviews'
|
|
4
|
+
s.version = '1.0.0'
|
|
5
|
+
s.summary = 'Basic review and ratings facility for Spree'
|
|
6
|
+
s.authors = ['Paul Callaghan']
|
|
7
|
+
s.description = s.summary
|
|
8
|
+
s.required_ruby_version = '>= 1.9.3'
|
|
9
|
+
|
|
10
|
+
s.authors = ['Paul Callaghan', 'Alex Blackie']
|
|
11
|
+
s.email = 'paulcc.two@gmail.com'
|
|
12
|
+
s.homepage = 'https://github.com/solidusio-contrib/solidus-reviews/'
|
|
13
|
+
s.license = 'BSD-3'
|
|
14
|
+
|
|
15
|
+
s.files = `git ls-files`.split("\n")
|
|
16
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
|
17
|
+
s.require_path = 'lib'
|
|
18
|
+
s.requirements << 'none'
|
|
19
|
+
|
|
20
|
+
s.add_dependency 'solidus', '~> 1.0'
|
|
21
|
+
s.add_dependency 'deface', '~> 1.0'
|
|
22
|
+
s.add_dependency 'solidus_auth_devise', '~> 1.0'
|
|
23
|
+
|
|
24
|
+
s.add_development_dependency 'ffaker'
|
|
25
|
+
s.add_development_dependency 'capybara', '~> 2.7'
|
|
26
|
+
s.add_development_dependency 'database_cleaner', '1.2.0'
|
|
27
|
+
s.add_development_dependency 'poltergeist', '~> 1.10.0'
|
|
28
|
+
s.add_development_dependency 'rspec-rails', '~> 3'
|
|
29
|
+
s.add_development_dependency 'factory_girl', '~> 4.4'
|
|
30
|
+
s.add_development_dependency 'sqlite3'
|
|
31
|
+
s.add_development_dependency 'simplecov', '~> 0.7.1'
|
|
32
|
+
s.add_development_dependency 'coffee-rails', '~> 4.0.0'
|
|
33
|
+
s.add_development_dependency 'sass-rails', '~> 5.0'
|
|
34
|
+
s.add_development_dependency 'pry'
|
|
35
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Admin::FeedbackReviewsController do
|
|
4
|
+
stub_authorization!
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
user = create(:admin_user)
|
|
8
|
+
controller.stub(:try_spree_current_user => user)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context '#index' do
|
|
12
|
+
let!(:review) { create(:review)}
|
|
13
|
+
let!(:other_review) { create(:review) }
|
|
14
|
+
|
|
15
|
+
let!(:feedback_review_1) { create(:feedback_review, created_at: 10.days.ago, review: review) }
|
|
16
|
+
let!(:feedback_review_2) { create(:feedback_review, created_at: 2.days.ago, review: review) }
|
|
17
|
+
let!(:feedback_review_3) { create(:feedback_review, created_at: 5.days.ago, review: review) }
|
|
18
|
+
|
|
19
|
+
let!(:other_feedback_review_1) { create(:feedback_review, created_at: 10.days.ago, review: other_review) }
|
|
20
|
+
let!(:other_feedback_review_2) { create(:feedback_review, created_at: 2.days.ago, review: other_review) }
|
|
21
|
+
|
|
22
|
+
it 'looks up feedback reviews for the specified review and renders the template' do
|
|
23
|
+
spree_get :index, review_id: review.id
|
|
24
|
+
response.status.should eq(200)
|
|
25
|
+
response.should render_template(:index)
|
|
26
|
+
assigns(:collection).should eq([feedback_review_2, feedback_review_3, feedback_review_1])
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|