solidus_reviews 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +18 -0
  5. data/CONTRIBUTING.md +28 -0
  6. data/Gemfile +14 -0
  7. data/LICENSE.md +26 -0
  8. data/README.md +93 -0
  9. data/Rakefile +21 -0
  10. data/app/assets/images/store/reviews/delete.gif +0 -0
  11. data/app/assets/images/store/reviews/star.gif +0 -0
  12. data/app/assets/javascripts/spree/backend/solidus_reviews.js +7 -0
  13. data/app/assets/javascripts/spree/frontend/solidus_reviews.js +7 -0
  14. data/app/assets/stylesheets/spree/backend/solidus_reviews.css +3 -0
  15. data/app/assets/stylesheets/spree/frontend/solidus_reviews.scss +83 -0
  16. data/app/controllers/spree/admin/feedback_reviews_controller.rb +6 -0
  17. data/app/controllers/spree/admin/review_settings_controller.rb +21 -0
  18. data/app/controllers/spree/admin/reviews_controller.rb +34 -0
  19. data/app/controllers/spree/feedback_reviews_controller.rb +41 -0
  20. data/app/controllers/spree/products_controller_decorator.rb +5 -0
  21. data/app/controllers/spree/reviews_controller.rb +48 -0
  22. data/app/helpers/spree/reviews_helper.rb +17 -0
  23. data/app/models/spree/feedback_review.rb +17 -0
  24. data/app/models/spree/product_decorator.rb +21 -0
  25. data/app/models/spree/review.rb +36 -0
  26. data/app/models/spree/reviews_ability.rb +17 -0
  27. data/app/models/spree/reviews_configuration.rb +26 -0
  28. data/app/overrides/add_reviews_after_product_properties.rb +5 -0
  29. data/app/overrides/add_reviews_tab_to_admin.rb +4 -0
  30. data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +5 -0
  31. data/app/views/spree/admin/feedback_reviews/index.html.erb +44 -0
  32. data/app/views/spree/admin/review_settings/edit.html.erb +40 -0
  33. data/app/views/spree/admin/reviews/_form.html.erb +22 -0
  34. data/app/views/spree/admin/reviews/edit.html.erb +26 -0
  35. data/app/views/spree/admin/reviews/index.html.erb +111 -0
  36. data/app/views/spree/feedback_reviews/_form.html.erb +13 -0
  37. data/app/views/spree/feedback_reviews/_summary.html.erb +6 -0
  38. data/app/views/spree/feedback_reviews/create.js.erb +7 -0
  39. data/app/views/spree/reviews/_form.html.erb +34 -0
  40. data/app/views/spree/reviews/_stars.html.erb +13 -0
  41. data/app/views/spree/reviews/index.html.erb +1 -0
  42. data/app/views/spree/reviews/new.html.erb +3 -0
  43. data/app/views/spree/shared/_rating.html.erb +15 -0
  44. data/app/views/spree/shared/_review.html.erb +28 -0
  45. data/app/views/spree/shared/_review_summary.html.erb +9 -0
  46. data/app/views/spree/shared/_reviews.html.erb +15 -0
  47. data/app/views/spree/shared/_shortrating.html.erb +9 -0
  48. data/bin/rails +5 -0
  49. data/config/initializers/constants.rb +1 -0
  50. data/config/initializers/load_preferences.rb +5 -0
  51. data/config/locales/de-CH.yml +68 -0
  52. data/config/locales/de.yml +68 -0
  53. data/config/locales/en-GB.yml +68 -0
  54. data/config/locales/en.yml +67 -0
  55. data/config/locales/es.yml +68 -0
  56. data/config/locales/fr.yml +68 -0
  57. data/config/locales/pl.yml +72 -0
  58. data/config/locales/pt-BR.yml +68 -0
  59. data/config/locales/pt.yml +69 -0
  60. data/config/locales/ro.yml +76 -0
  61. data/config/locales/ru.yml +73 -0
  62. data/config/locales/sv.yml +66 -0
  63. data/config/locales/tr.yml +68 -0
  64. data/config/locales/uk.yml +75 -0
  65. data/config/locales/zh-CN.yml +65 -0
  66. data/config/locales/zh-TW.yml +65 -0
  67. data/config/routes.rb +17 -0
  68. data/db/migrate/20081020220724_create_reviews.rb +18 -0
  69. data/db/migrate/20101222083309_create_feedback_reviews.rb +17 -0
  70. data/db/migrate/20110406083603_add_rating_to_products.rb +21 -0
  71. data/db/migrate/20110606150524_add_user_to_reviews.rb +9 -0
  72. data/db/migrate/20110806093221_add_ip_address_to_reviews.rb +9 -0
  73. data/db/migrate/20120110172331_namespace_tables.rb +6 -0
  74. data/db/migrate/20120123141326_recalculate_ratings.rb +20 -0
  75. data/db/migrate/20120712182514_add_locale_to_reviews.rb +9 -0
  76. data/db/migrate/20120712182627_add_locale_to_feedback_reviews.rb +9 -0
  77. data/db/migrate/20140703200946_add_show_identifier_to_reviews.rb +6 -0
  78. data/db/sample/ratings.yml +16 -0
  79. data/db/sample/reviews.yml +59 -0
  80. data/lib/generators/solidus_reviews/install/install_generator.rb +30 -0
  81. data/lib/solidus_reviews/factories/feedback_review_factory.rb +8 -0
  82. data/lib/solidus_reviews/factories/review_factory.rb +20 -0
  83. data/lib/solidus_reviews/factories.rb +5 -0
  84. data/lib/solidus_reviews.rb +6 -0
  85. data/lib/spree_reviews/engine.rb +17 -0
  86. data/solidus_reviews.gemspec +35 -0
  87. data/spec/controllers/admin/feedback_reviews_controller_spec.rb +29 -0
  88. data/spec/controllers/admin/review_settings_controller_spec.rb +57 -0
  89. data/spec/controllers/admin/reviews_controller_spec.rb +63 -0
  90. data/spec/controllers/feedback_reviews_controller_spec.rb +71 -0
  91. data/spec/controllers/products_controller_spec.rb +9 -0
  92. data/spec/controllers/reviews_controller_spec.rb +136 -0
  93. data/spec/features/admin_spec.rb +35 -0
  94. data/spec/features/reviews_spec.rb +122 -0
  95. data/spec/helpers/review_helper_spec.rb +28 -0
  96. data/spec/models/feedback_review_spec.rb +78 -0
  97. data/spec/models/product_spec.rb +62 -0
  98. data/spec/models/review_spec.rb +168 -0
  99. data/spec/models/reviews_ability_spec.rb +46 -0
  100. data/spec/models/reviews_configuration_spec.rb +45 -0
  101. data/spec/spec_helper.rb +55 -0
  102. data/vendor/assets/javascripts/jquery.rating.js +376 -0
  103. 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,9 @@
1
+ class AddUserToReviews < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :reviews, :user_id, :integer, :null => true
4
+ end
5
+
6
+ def self.down
7
+ remove_column :reviews, :user_id
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddIpAddressToReviews < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :reviews, :ip_address, :string
4
+ end
5
+
6
+ def self.down
7
+ remove_column :reviews, :ip_address
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class NamespaceTables < ActiveRecord::Migration
2
+ def change
3
+ rename_table :reviews, :spree_reviews
4
+ rename_table :feedback_reviews, :spree_feedback_reviews
5
+ end
6
+ 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,9 @@
1
+ class AddLocaleToReviews < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :spree_reviews, :locale, :string, :default => 'en'
4
+ end
5
+
6
+ def self.down
7
+ remove_column :spree_reviews, :locale
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddLocaleToFeedbackReviews < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :spree_feedback_reviews, :locale, :string, :default => 'en'
4
+ end
5
+
6
+ def self.down
7
+ remove_column :spree_feedback_reviews, :locale
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class AddShowIdentifierToReviews < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_reviews, :show_identifier, :boolean, default: true
4
+ add_index :spree_reviews, :show_identifier
5
+ end
6
+ end
@@ -0,0 +1,16 @@
1
+ t1:
2
+ product: ror_jr_spaghetti
3
+ value: 3.56
4
+ count: 20
5
+ t2:
6
+ product: ror_bag
7
+ value: 2.56
8
+ count: 30
9
+ t3:
10
+ product: ror_tote
11
+ value: 3.94
12
+ count: 10
13
+ t4:
14
+ product: apache_baseball_jersey
15
+ value: 1.49
16
+ count: 6
@@ -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,8 @@
1
+ FactoryGirl.define do
2
+ factory :feedback_review, :class => Spree::FeedbackReview do |f|
3
+ user
4
+ review
5
+ comment { generate(:random_description) }
6
+ rating { rand(1..5) }
7
+ end
8
+ 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,5 @@
1
+ require "factory_girl"
2
+
3
+ Dir["#{File.dirname(__FILE__)}/factories/**"].each do |f|
4
+ require File.expand_path(f)
5
+ end
@@ -0,0 +1,6 @@
1
+ require 'sass/rails'
2
+ require 'solidus'
3
+ require 'deface'
4
+ require 'solidus_auth_devise'
5
+ require 'spree_reviews/engine'
6
+ require 'coffee_script'
@@ -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