solidus_reviews 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|