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.
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