solidus_reviews 1.2.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +6 -0
  3. data/.gem_release.yml +5 -0
  4. data/.gitignore +13 -6
  5. data/.rspec +1 -1
  6. data/.rubocop.yml +3 -321
  7. data/.rubocop_todo.yml +197 -0
  8. data/CHANGELOG.md +155 -0
  9. data/Gemfile +14 -17
  10. data/{LICENSE.md → LICENSE} +1 -1
  11. data/README.md +63 -41
  12. data/Rakefile +3 -20
  13. data/app/assets/stylesheets/spree/frontend/solidus_reviews.css +4 -0
  14. data/app/controllers/spree/feedback_reviews_controller.rb +2 -8
  15. data/app/controllers/spree/reviews_controller.rb +29 -2
  16. data/app/decorators/controllers/solidus_reviews/spree/{admin/products_controller_decorator.rb → products_controller_decorator.rb} +0 -4
  17. data/app/decorators/models/solidus_reviews/spree/product_decorator.rb +6 -5
  18. data/app/helpers/spree/reviews_helper.rb +6 -6
  19. data/app/models/spree/feedback_review.rb +2 -2
  20. data/app/models/spree/permission_sets/review_display.rb +11 -0
  21. data/app/models/spree/permission_sets/review_management.rb +11 -0
  22. data/app/models/spree/review.rb +25 -10
  23. data/app/models/spree/reviews_ability.rb +7 -2
  24. data/app/models/spree/reviews_configuration.rb +10 -1
  25. data/app/overrides/add_reviews_tab_to_admin.rb +12 -4
  26. data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +12 -5
  27. data/app/views/spree/admin/review_settings/edit.html.erb +7 -0
  28. data/app/views/spree/admin/reviews/edit.html.erb +4 -2
  29. data/app/views/spree/admin/reviews/index.html.erb +9 -5
  30. data/app/views/spree/api/reviews/_feedback_review.json.jbuilder +1 -1
  31. data/app/views/spree/api/reviews/_review.json.jbuilder +1 -1
  32. data/app/views/spree/reviews/_form.html.erb +6 -4
  33. data/app/views/spree/reviews/edit.html.erb +3 -0
  34. data/app/views/spree/shared/_review.html.erb +6 -4
  35. data/bin/console +17 -0
  36. data/bin/rails +5 -5
  37. data/bin/rails-engine +13 -0
  38. data/bin/rails-sandbox +16 -0
  39. data/bin/rake +7 -0
  40. data/bin/sandbox +86 -0
  41. data/bin/setup +8 -0
  42. data/config/locales/de-CH.yml +1 -1
  43. data/config/locales/de.yml +1 -1
  44. data/config/locales/en-GB.yml +2 -1
  45. data/config/locales/en.yml +2 -1
  46. data/config/locales/es.yml +2 -1
  47. data/config/locales/fr.yml +1 -1
  48. data/config/locales/it.yml +1 -1
  49. data/config/locales/pl.yml +1 -1
  50. data/config/locales/pt-BR.yml +1 -1
  51. data/config/locales/pt.yml +1 -1
  52. data/config/locales/ro.yml +1 -1
  53. data/config/locales/sv.yml +1 -1
  54. data/config/locales/tr.yml +1 -1
  55. data/config/locales/uk.yml +1 -1
  56. data/config/locales/zh-CN.yml +1 -1
  57. data/config/locales/zh-TW.yml +1 -1
  58. data/config/routes.rb +3 -1
  59. data/db/migrate/20120123141326_recalculate_ratings.rb +1 -2
  60. data/db/migrate/20190613165528_add_verified_purchaser_to_reviews.rb +2 -0
  61. data/lib/controllers/spree/api/feedback_reviews_controller.rb +91 -0
  62. data/lib/controllers/spree/api/reviews_controller.rb +16 -14
  63. data/lib/generators/solidus_reviews/install/install_generator.rb +8 -7
  64. data/lib/solidus_reviews/engine.rb +26 -0
  65. data/lib/solidus_reviews/version.rb +5 -0
  66. data/lib/solidus_reviews.rb +4 -4
  67. data/solidus_reviews.gemspec +31 -34
  68. data/spec/controllers/spree/admin/feedback_reviews_controller_spec.rb +1 -1
  69. data/spec/controllers/spree/admin/review_settings_controller_spec.rb +3 -4
  70. data/spec/controllers/spree/admin/reviews_controller_spec.rb +3 -3
  71. data/spec/controllers/spree/api/feedback_reviews_controller_spec.rb +136 -0
  72. data/spec/controllers/spree/api/reviews_controller_spec.rb +27 -25
  73. data/spec/controllers/spree/feedback_reviews_controller_spec.rb +8 -8
  74. data/spec/controllers/spree/reviews_controller_spec.rb +145 -8
  75. data/spec/features/admin_spec.rb +6 -6
  76. data/spec/features/reviews_spec.rb +33 -32
  77. data/spec/fixtures/thinking-cat.jpg +0 -0
  78. data/spec/models/feedback_review_spec.rb +13 -13
  79. data/spec/models/product_spec.rb +13 -10
  80. data/spec/models/review_spec.rb +64 -41
  81. data/spec/models/reviews_ability_spec.rb +14 -14
  82. data/spec/models/reviews_configuration_spec.rb +21 -10
  83. data/spec/spec_helper.rb +18 -13
  84. data/spec/support/config.rb +7 -0
  85. data/spec/support/factories.rb +3 -0
  86. metadata +52 -213
  87. data/CONTRIBUTING.md +0 -28
  88. data/lib/spree_reviews/engine.rb +0 -22
  89. data/spec/controllers/spree/products_controller_spec.rb +0 -11
data/CHANGELOG.md ADDED
@@ -0,0 +1,155 @@
1
+ # Changelog
2
+
3
+ ## [v1.5.0](https://github.com/solidusio-contrib/solidus_reviews/tree/v1.5.0) (2021-09-20)
4
+
5
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_reviews/compare/v1.4.1...v1.5.0)
6
+
7
+ **Closed issues:**
8
+
9
+ - Dependabot can't resolve your Ruby dependency files [\#105](https://github.com/solidusio-contrib/solidus_reviews/issues/105)
10
+ - Prepare Solidus Reviews for Solidus 3.0 [\#101](https://github.com/solidusio-contrib/solidus_reviews/issues/101)
11
+ - Installing fresh solidus and solidus\_reviews, rails g solidus\_reviews:install fails [\#100](https://github.com/solidusio-contrib/solidus_reviews/issues/100)
12
+ - Dependabot can't resolve your Ruby dependency files [\#97](https://github.com/solidusio-contrib/solidus_reviews/issues/97)
13
+ - Dependabot can't resolve your Ruby dependency files [\#96](https://github.com/solidusio-contrib/solidus_reviews/issues/96)
14
+
15
+ **Merged pull requests:**
16
+
17
+ - bump to support ruby 3 and solidus 3 [\#103](https://github.com/solidusio-contrib/solidus_reviews/pull/103) ([peterberkenbosch](https://github.com/peterberkenbosch))
18
+ - Fix specs to allow support for solidus 3 [\#102](https://github.com/solidusio-contrib/solidus_reviews/pull/102) ([seriousammy](https://github.com/seriousammy))
19
+ - Update gem to latest solidus\_dev\_support [\#99](https://github.com/solidusio-contrib/solidus_reviews/pull/99) ([nirebu](https://github.com/nirebu))
20
+ - Make reviews:config like the config in solidus-frontend [\#98](https://github.com/solidusio-contrib/solidus_reviews/pull/98) ([marcrohloff](https://github.com/marcrohloff))
21
+
22
+ ## [v1.4.1](https://github.com/solidusio-contrib/solidus_reviews/tree/v1.4.1) (2020-08-10)
23
+
24
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_reviews/compare/v1.4.0...v1.4.1)
25
+
26
+ ## [v1.4.0](https://github.com/solidusio-contrib/solidus_reviews/tree/v1.4.0) (2020-08-06)
27
+
28
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_reviews/compare/v1.3.0...v1.4.0)
29
+
30
+ **Closed issues:**
31
+
32
+ - Cannot select star rating when creating or editing a review [\#88](https://github.com/solidusio-contrib/solidus_reviews/issues/88)
33
+ - uninitialized constant SolidusReviews::Spree::Admin \(NameError\) [\#77](https://github.com/solidusio-contrib/solidus_reviews/issues/77)
34
+ - Dependabot can't resolve your Ruby dependency files [\#75](https://github.com/solidusio-contrib/solidus_reviews/issues/75)
35
+ - Dependabot can't resolve your Ruby dependency files [\#74](https://github.com/solidusio-contrib/solidus_reviews/issues/74)
36
+ - Dependabot can't resolve your Ruby dependency files [\#73](https://github.com/solidusio-contrib/solidus_reviews/issues/73)
37
+ - Dependabot can't resolve your Ruby dependency files [\#71](https://github.com/solidusio-contrib/solidus_reviews/issues/71)
38
+ - Dependabot can't resolve your Ruby dependency files [\#70](https://github.com/solidusio-contrib/solidus_reviews/issues/70)
39
+ - Dependabot can't resolve your Ruby dependency files [\#69](https://github.com/solidusio-contrib/solidus_reviews/issues/69)
40
+ - Users should be able to upload images as part of their review [\#67](https://github.com/solidusio-contrib/solidus_reviews/issues/67)
41
+
42
+ **Merged pull requests:**
43
+
44
+ - Replace deprected ` SolidusSupport::EngineExtensions::Decorators` with ` SolidusSupport::EngineExtensions` [\#93](https://github.com/solidusio-contrib/solidus_reviews/pull/93) ([marcrohloff](https://github.com/marcrohloff))
45
+ - Allow solidus\_support 0.4 [\#92](https://github.com/solidusio-contrib/solidus_reviews/pull/92) ([mamhoff](https://github.com/mamhoff))
46
+ - Fixes review title [\#91](https://github.com/solidusio-contrib/solidus_reviews/pull/91) ([memotoro](https://github.com/memotoro))
47
+ - remove extraneous .css file [\#90](https://github.com/solidusio-contrib/solidus_reviews/pull/90) ([dhughesbc](https://github.com/dhughesbc))
48
+ - Relax solidus\_support dependency [\#86](https://github.com/solidusio-contrib/solidus_reviews/pull/86) ([kennyadsl](https://github.com/kennyadsl))
49
+ - Adds PermissionSets classes and checks for Reviews [\#85](https://github.com/solidusio-contrib/solidus_reviews/pull/85) ([memotoro](https://github.com/memotoro))
50
+ - Adds controls for image uploads [\#83](https://github.com/solidusio-contrib/solidus_reviews/pull/83) ([memotoro](https://github.com/memotoro))
51
+ - Add option to auto approve star only reviews [\#82](https://github.com/solidusio-contrib/solidus_reviews/pull/82) ([KaemonIsland](https://github.com/KaemonIsland))
52
+ - Add touch to feedback review model [\#81](https://github.com/solidusio-contrib/solidus_reviews/pull/81) ([KaemonIsland](https://github.com/KaemonIsland))
53
+ - Add feedback reviews to api [\#79](https://github.com/solidusio-contrib/solidus_reviews/pull/79) ([KaemonIsland](https://github.com/KaemonIsland))
54
+ - Fix path for Spree::ProductsControllerDecorator [\#78](https://github.com/solidusio-contrib/solidus_reviews/pull/78) ([aldesantis](https://github.com/aldesantis))
55
+ - Add edit and update methods to reviews controller [\#76](https://github.com/solidusio-contrib/solidus_reviews/pull/76) ([KaemonIsland](https://github.com/KaemonIsland))
56
+ - Update to solidus\_dev\_support [\#72](https://github.com/solidusio-contrib/solidus_reviews/pull/72) ([aldesantis](https://github.com/aldesantis))
57
+
58
+ ## [v1.3.0](https://github.com/solidusio-contrib/solidus_reviews/tree/v1.3.0) (2019-11-27)
59
+
60
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_reviews/compare/v1.2.0...v1.3.0)
61
+
62
+ **Closed issues:**
63
+
64
+ - sass/rails is deprecated. Please update to `require 'sassc/rails'` [\#48](https://github.com/solidusio-contrib/solidus_reviews/issues/48)
65
+ - Class variable access from toplevel [\#47](https://github.com/solidusio-contrib/solidus_reviews/issues/47)
66
+
67
+ **Merged pull requests:**
68
+
69
+ - Prepare v1.3.0 [\#68](https://github.com/solidusio-contrib/solidus_reviews/pull/68) ([aldesantis](https://github.com/aldesantis))
70
+ - Adopt solidus\_extension\_dev\_tools [\#66](https://github.com/solidusio-contrib/solidus_reviews/pull/66) ([aldesantis](https://github.com/aldesantis))
71
+ - Switch to sassc/rails [\#65](https://github.com/solidusio-contrib/solidus_reviews/pull/65) ([pelargir](https://github.com/pelargir))
72
+ - Fix flaky specs caused by bad preference stubbing [\#54](https://github.com/solidusio-contrib/solidus_reviews/pull/54) ([aldesantis](https://github.com/aldesantis))
73
+
74
+ ## [v1.2.0](https://github.com/solidusio-contrib/solidus_reviews/tree/v1.2.0) (2019-09-17)
75
+
76
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_reviews/compare/v1.1.1...v1.2.0)
77
+
78
+ **Merged pull requests:**
79
+
80
+ - Remove solidus\_auth\_devise as dependency [\#53](https://github.com/solidusio-contrib/solidus_reviews/pull/53) ([kennyadsl](https://github.com/kennyadsl))
81
+ - Adopt CircleCI instead of Travis [\#51](https://github.com/solidusio-contrib/solidus_reviews/pull/51) ([aldesantis](https://github.com/aldesantis))
82
+
83
+ ## [v1.1.1](https://github.com/solidusio-contrib/solidus_reviews/tree/v1.1.1) (2019-08-15)
84
+
85
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_reviews/compare/v1.1.0...v1.1.1)
86
+
87
+ **Closed issues:**
88
+
89
+ - Rubygems release [\#22](https://github.com/solidusio-contrib/solidus_reviews/issues/22)
90
+
91
+ **Merged pull requests:**
92
+
93
+ - Adds missing API features to the index and show endpoints [\#46](https://github.com/solidusio-contrib/solidus_reviews/pull/46) ([ericsaupe](https://github.com/ericsaupe))
94
+
95
+ ## [v1.1.0](https://github.com/solidusio-contrib/solidus_reviews/tree/v1.1.0) (2019-08-14)
96
+
97
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_reviews/compare/v1.0.0...v1.1.0)
98
+
99
+ **Closed issues:**
100
+
101
+ - Support rating only reviews [\#41](https://github.com/solidusio-contrib/solidus_reviews/issues/41)
102
+ - Settings \> Reviews styling is broken [\#35](https://github.com/solidusio-contrib/solidus_reviews/issues/35)
103
+ - Need add key to translate file ru.yml [\#23](https://github.com/solidusio-contrib/solidus_reviews/issues/23)
104
+ - Error in solidus 2.1 due to add\_routes method [\#5](https://github.com/solidusio-contrib/solidus_reviews/issues/5)
105
+
106
+ **Merged pull requests:**
107
+
108
+ - General Typos [\#45](https://github.com/solidusio-contrib/solidus_reviews/pull/45) ([ericsaupe](https://github.com/ericsaupe))
109
+ - Updated API to include new fields [\#44](https://github.com/solidusio-contrib/solidus_reviews/pull/44) ([ericsaupe](https://github.com/ericsaupe))
110
+ - Fix specs [\#43](https://github.com/solidusio-contrib/solidus_reviews/pull/43) ([ericsaupe](https://github.com/ericsaupe))
111
+ - Rating only reviews [\#42](https://github.com/solidusio-contrib/solidus_reviews/pull/42) ([ericsaupe](https://github.com/ericsaupe))
112
+ - Adds verified purchaser [\#40](https://github.com/solidusio-contrib/solidus_reviews/pull/40) ([ericsaupe](https://github.com/ericsaupe))
113
+ - Cleanup [\#39](https://github.com/solidusio-contrib/solidus_reviews/pull/39) ([ericsaupe](https://github.com/ericsaupe))
114
+ - Added Images to Reviews [\#38](https://github.com/solidusio-contrib/solidus_reviews/pull/38) ([ericsaupe](https://github.com/ericsaupe))
115
+ - Add missing admin translation [\#37](https://github.com/solidusio-contrib/solidus_reviews/pull/37) ([jtapia](https://github.com/jtapia))
116
+ - Fix wrong locale id for require login in admin [\#36](https://github.com/solidusio-contrib/solidus_reviews/pull/36) ([kevinnio](https://github.com/kevinnio))
117
+ - Gem maintenance [\#34](https://github.com/solidusio-contrib/solidus_reviews/pull/34) ([spaghetticode](https://github.com/spaghetticode))
118
+ - Remove Solidus v2.3 from Travis config \(EOL\) [\#33](https://github.com/solidusio-contrib/solidus_reviews/pull/33) ([aitbw](https://github.com/aitbw))
119
+ - Add Solidus v2.7 and v2.8 to Travis config [\#32](https://github.com/solidusio-contrib/solidus_reviews/pull/32) ([aitbw](https://github.com/aitbw))
120
+ - Fix deprecation warnings [\#31](https://github.com/solidusio-contrib/solidus_reviews/pull/31) ([aitbw](https://github.com/aitbw))
121
+ - Fix Travis build [\#30](https://github.com/solidusio-contrib/solidus_reviews/pull/30) ([aitbw](https://github.com/aitbw))
122
+ - Fix validation i18n [\#29](https://github.com/solidusio-contrib/solidus_reviews/pull/29) ([mamhoff](https://github.com/mamhoff))
123
+ - Avoid conflicts when same rating HTML is repeated on page [\#28](https://github.com/solidusio-contrib/solidus_reviews/pull/28) ([spaghetticode](https://github.com/spaghetticode))
124
+ - Add missing TH tag [\#27](https://github.com/solidusio-contrib/solidus_reviews/pull/27) ([spaghetticode](https://github.com/spaghetticode))
125
+ - Use default translation key structure for validation message [\#26](https://github.com/solidusio-contrib/solidus_reviews/pull/26) ([aldesantis](https://github.com/aldesantis))
126
+ - Remove redundant rescue\_from from api controller [\#24](https://github.com/solidusio-contrib/solidus_reviews/pull/24) ([dgra](https://github.com/dgra))
127
+ - Improve specs [\#21](https://github.com/solidusio-contrib/solidus_reviews/pull/21) ([kennyadsl](https://github.com/kennyadsl))
128
+ - Refactor spec helper to let specs pass [\#20](https://github.com/solidusio-contrib/solidus_reviews/pull/20) ([kennyadsl](https://github.com/kennyadsl))
129
+ - Fix Trevis CI badge to use master branch status [\#19](https://github.com/solidusio-contrib/solidus_reviews/pull/19) ([kennyadsl](https://github.com/kennyadsl))
130
+ - Fix bundle install issue with solidus\_auth\_devise 2.0 [\#18](https://github.com/solidusio-contrib/solidus_reviews/pull/18) ([kennyadsl](https://github.com/kennyadsl))
131
+ - Fix resetting preferences in specs [\#17](https://github.com/solidusio-contrib/solidus_reviews/pull/17) ([kennyadsl](https://github.com/kennyadsl))
132
+ - Add italian translations [\#16](https://github.com/solidusio-contrib/solidus_reviews/pull/16) ([vassalloandrea](https://github.com/vassalloandrea))
133
+ - Add user email to admin review editing page [\#15](https://github.com/solidusio-contrib/solidus_reviews/pull/15) ([pelargir](https://github.com/pelargir))
134
+ - Api interface [\#14](https://github.com/solidusio-contrib/solidus_reviews/pull/14) ([dgra](https://github.com/dgra))
135
+ - General Solidus 2.3 updates [\#13](https://github.com/solidusio-contrib/solidus_reviews/pull/13) ([dgra](https://github.com/dgra))
136
+ - Prefix named route [\#11](https://github.com/solidusio-contrib/solidus_reviews/pull/11) ([pelargir](https://github.com/pelargir))
137
+ - Add the has\_many association for reviews from a user [\#10](https://github.com/solidusio-contrib/solidus_reviews/pull/10) ([dgra](https://github.com/dgra))
138
+ - Updates to Solidus admin UI [\#9](https://github.com/solidusio-contrib/solidus_reviews/pull/9) ([tvdeyen](https://github.com/tvdeyen))
139
+ - Update for Solidus 2.1 [\#6](https://github.com/solidusio-contrib/solidus_reviews/pull/6) ([kennyadsl](https://github.com/kennyadsl))
140
+
141
+ ## [v1.0.0](https://github.com/solidusio-contrib/solidus_reviews/tree/v1.0.0) (2017-02-03)
142
+
143
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_reviews/compare/8640958dc42f9472cb5cbb85cab981a44f4c45db...v1.0.0)
144
+
145
+ **Merged pull requests:**
146
+
147
+ - Allow solidus\_auth\_devise \< 1.5 [\#8](https://github.com/solidusio-contrib/solidus_reviews/pull/8) ([tvdeyen](https://github.com/tvdeyen))
148
+ - Test against multiple Solidus 1.x versions [\#7](https://github.com/solidusio-contrib/solidus_reviews/pull/7) ([tvdeyen](https://github.com/tvdeyen))
149
+ - Fix install generator [\#3](https://github.com/solidusio-contrib/solidus_reviews/pull/3) ([andrewjwu](https://github.com/andrewjwu))
150
+ - Do not add CRUD product routes to frontend [\#2](https://github.com/solidusio-contrib/solidus_reviews/pull/2) ([mamhoff](https://github.com/mamhoff))
151
+ - Move factories into `lib` [\#1](https://github.com/solidusio-contrib/solidus_reviews/pull/1) ([alexblackie](https://github.com/alexblackie))
152
+
153
+
154
+
155
+ \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/Gemfile CHANGED
@@ -1,31 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  source 'https://rubygems.org'
4
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
4
5
 
5
6
  branch = ENV.fetch('SOLIDUS_BRANCH', 'master')
6
- gem 'solidus', git: 'https://github.com/solidusio/solidus.git', branch: branch
7
- gem 'solidus_auth_devise'
7
+ gem 'solidus', github: 'solidusio/solidus', branch: branch
8
8
 
9
- # Needed to help Bundler figure out how to resolve dependencies, otherwise it takes forever to
10
- # resolve them
11
- if branch == 'master' || Gem::Version.new(branch[1..-1]) >= Gem::Version.new('2.10.0')
12
- gem 'rails', '~> 6.0'
13
- else
14
- gem 'rails', '~> 5.0'
15
- end
9
+ # Needed to help Bundler figure out how to resolve dependencies,
10
+ # otherwise it takes forever to resolve them.
11
+ # See https://github.com/bundler/bundler/issues/6677
12
+ gem 'rails', '>0.a'
16
13
 
17
- gem 'puma'
18
- gem 'rails-controller-testing', group: :test
14
+ # Provides basic authentication functionality for testing parts of your engine
15
+ gem 'solidus_auth_devise'
19
16
 
20
17
  case ENV['DB']
21
18
  when 'mysql'
22
- gem 'mysql2', '~> 0.4.10'
23
- when 'postgres'
24
- gem 'pg', '~> 0.21'
19
+ gem 'mysql2'
20
+ when 'postgresql'
21
+ gem 'pg'
22
+ else
23
+ gem 'sqlite3'
25
24
  end
26
25
 
27
- group :development, :test do
28
- gem 'factory_bot', '> 4.10.0'
29
- end
26
+ gem 'rails-controller-testing', group: :test
30
27
 
31
28
  gemspec
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009-2019 Solidus and contributors.
1
+ Copyright (c) 2020 Solidus and contributors
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without modification,
data/README.md CHANGED
@@ -1,12 +1,10 @@
1
- # Reviews
1
+ # Solidus Reviews
2
2
 
3
3
  [![CircleCI](https://circleci.com/gh/solidusio-contrib/solidus_reviews.svg?style=svg)](https://circleci.com/gh/solidusio-contrib/solidus_reviews)
4
4
 
5
- Straightforward review/rating functionality, updated for
6
- [Solidus](https://solidus.io). While the Gem name has changed, the module
7
- namespace and commands are still `spree` for now.
5
+ Straightforward review/rating functionality, updated for [Solidus](https://solidus.io).
8
6
 
9
- ---
7
+ While the gem's name has changed, the module namespace and commands are still `spree` for now.
10
8
 
11
9
  ## Installation
12
10
 
@@ -15,77 +13,101 @@ Add the following to your `Gemfile` to install from git:
15
13
  ```ruby
16
14
  gem 'solidus_reviews', github: 'solidusio-contrib/solidus_reviews'
17
15
  ```
16
+
18
17
  Now bundle up with:
19
18
 
20
- bundle
19
+ ```console
20
+ $ bundle
21
+ ```
21
22
 
22
23
  Next, run the rake task that copies the necessary migrations and assets to your project:
23
24
 
24
- rails g solidus_reviews:install
25
+ ```console
26
+ $ rails g solidus_reviews:install
27
+ ```
25
28
 
26
29
  And finish with a migrate:
27
30
 
28
- rake db:migrate
31
+ ```console
32
+ $ rake db:migrate
33
+ ```
29
34
 
30
35
  Now you should be able to boot up your server with:
31
36
 
32
- rails s
37
+ ```console
38
+ $ rails s
39
+ ```
33
40
 
34
41
  That's all!
35
42
 
36
- ---
37
-
38
43
  ## Usage
39
44
 
40
- Action "submit" in "reviews" controller - goes to review entry form
45
+ The `Spree::ReviewsController` controller provides all the CRUD functionality for product reviews.
41
46
 
42
- Users must be logged in to submit a review
47
+ The `Spree::FeedbackReviewsController` allows user to express their feedback on a specific review.
48
+ You can think of these as meta-reviews (e.g. the classic "Was this useful?" modal).
43
49
 
44
- Three partials:
45
- - `app/views/spree/products/_rating.html.erb` -- display number of stars
46
- - `app/views/spree/products/_shortrating.html.erb` -- shorter version of above
47
- - `app/views/spree/products/_review.html.erb` -- display a single review
48
-
49
- Administrator can edit and/or approve and/or delete reviews.
50
+ You can approve, edit and delete reviews and feedback reviews from the backend.
50
51
 
51
52
  ## Factories
52
53
 
53
- If you want factories for our models available in your application, simply
54
- require our factories in your `spec_helper.rb`:
54
+ If you want factories for our models available in your application, simply require our factories in
55
+ your `spec_helper.rb`:
55
56
 
56
57
  ```ruby
57
- require "solidus_reviews/factories"
58
+ require 'solidus_reviews/factories'
58
59
  ```
59
60
 
60
- ## Implementation
61
-
62
- Reviews table is quite obvious - and note the "approved" flag which is for the
63
- administrator to update.
61
+ ### Testing the extension
64
62
 
65
- Ratings table holds current fractional value - avoids frequent recalc...
63
+ First bundle your dependencies, then run `bin/rake`. `bin/rake` will default to building the dummy
66
64
 
67
- ---
65
+ app if it does not exist, then it will run specs. The dummy app can be regenerated by using
66
+ `bin/rake extension:test_app`.
68
67
 
69
- ## Testing
68
+ ```shell
69
+ bin/rake
70
+ ```
70
71
 
71
- Just run the following to automatically build a dummy app if necessary and
72
- run the tests:
72
+ To run [Rubocop](https://github.com/bbatsov/rubocop) static code analysis run
73
73
 
74
74
  ```shell
75
- bundle exec rake
75
+ bundle exec rubocop
76
76
  ```
77
77
 
78
- ---
78
+ ### Running the sandbox
79
79
 
80
- ## Contributing
80
+ To run this extension in a sandboxed Solidus application, you can run `bin/sandbox`. The path for
81
81
 
82
- See corresponding [contributing guidelines][1].
82
+ the sandbox app is `./sandbox` and `bin/rails` will forward any Rails commands to
83
+ `sandbox/bin/rails`.
84
+
85
+ Here's an example:
86
+
87
+ ```
88
+ $ bin/rails server
89
+ => Booting Puma
90
+ => Rails 6.0.2.1 application starting in development
91
+ * Listening on tcp://127.0.0.1:3000
92
+ Use Ctrl-C to stop
93
+ ```
94
+
95
+ ### Updating the changelog
96
+
97
+ Before and after releases the changelog should be updated to reflect the up-to-date status of
98
+ the project:
99
+ ```shell
100
+
101
+ bin/rake changelog
102
+ git add CHANGELOG.md
103
+ git commit -m "Update the changelog"
104
+ ```
105
+
106
+ ## Contributing
83
107
 
84
- ---
108
+ Bug reports and pull requests are welcome on GitHub at <https://github.com/solidusio-contrib/solidus_reviews>.
85
109
 
86
- Copyright (c) 2009-2019 [Solidus][2] and [contributors][3], released under the [New BSD License][4]
110
+ ## License
87
111
 
88
- [1]: ./CONTRIBUTING.md
89
- [2]: https://github.com/solidusio
90
- [3]: https://github.com/solidusio-contrib/solidus_reviews/graphs/contributors
91
- [4]: ./LICENSE.md
112
+ Copyright (c) 2009-2020 [Solidus](https://github.com/solidusio) and [contributors](https://github.com/solidusio-contrib/solidus_reviews/graphs/contributors),
113
+ released under the [New BSD License](https://github.com/solidusio-contrib/solidus_reviews/blob/master/LICENSE.md).
data/Rakefile CHANGED
@@ -1,23 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler'
4
- Bundler::GemHelper.install_tasks
3
+ require 'solidus_dev_support/rake_tasks'
4
+ SolidusDevSupport::RakeTasks.install
5
5
 
6
- require 'rspec/core/rake_task'
7
- require 'spree/testing_support/extension_rake'
8
-
9
- RSpec::Core::RakeTask.new
10
-
11
- task :default do
12
- if Dir["spec/dummy"].empty?
13
- Rake::Task[:test_app].invoke
14
- Dir.chdir("../../")
15
- end
16
- Rake::Task[:spec].invoke
17
- end
18
-
19
- desc 'Generates a dummy app for testing'
20
- task :test_app do
21
- ENV['LIB_NAME'] = 'solidus_reviews'
22
- Rake::Task['extension:test_app'].invoke
23
- end
6
+ task default: 'extension:specs'
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css'
4
+ */
@@ -16,13 +16,7 @@ class Spree::FeedbackReviewsController < Spree::StoreController
16
16
  end
17
17
 
18
18
  respond_to do |format|
19
- format.html {
20
- if SolidusSupport.solidus_gem_version < Gem::Version.new('2.0')
21
- redirect_to(:back)
22
- else
23
- redirect_back(fallback_location: root_path)
24
- end
25
- }
19
+ format.html { redirect_back(fallback_location: root_path) }
26
20
  format.js { render action: :create }
27
21
  end
28
22
  end
@@ -30,7 +24,7 @@ class Spree::FeedbackReviewsController < Spree::StoreController
30
24
  protected
31
25
 
32
26
  def load_review
33
- @review ||= Spree::Review.find_by_id!(params[:review_id])
27
+ @review ||= Spree::Review.find_by!(id: params[:review_id])
34
28
  end
35
29
 
36
30
  def permitted_feedback_review_attributes
@@ -2,7 +2,7 @@
2
2
 
3
3
  class Spree::ReviewsController < Spree::StoreController
4
4
  helper Spree::BaseHelper
5
- before_action :load_product, only: [:index, :new, :create]
5
+ before_action :load_product, only: [:index, :new, :create, :edit, :update]
6
6
 
7
7
  def index
8
8
  @approved_reviews = Spree::Review.approved.where(product: @product)
@@ -13,9 +13,17 @@ class Spree::ReviewsController < Spree::StoreController
13
13
  authorize! :create, @review
14
14
  end
15
15
 
16
+ def edit
17
+ @review = Spree::Review.find(params[:id])
18
+ if @review.product.nil?
19
+ flash[:error] = I18n.t('spree.error_no_product')
20
+ end
21
+ authorize! :update, @review
22
+ end
23
+
16
24
  # save if all ok
17
25
  def create
18
- params[:review][:rating].sub!(/\s*[^0-9]*\z/, '') unless params[:review][:rating].blank?
26
+ review_params[:rating].sub!(/\s*[^0-9]*\z/, '') if review_params[:rating].present?
19
27
 
20
28
  @review = Spree::Review.new(review_params)
21
29
  @review.product = @product
@@ -36,6 +44,25 @@ class Spree::ReviewsController < Spree::StoreController
36
44
  end
37
45
  end
38
46
 
47
+ def update
48
+ review_params[:rating].sub!(/\s*[^0-9]*\z/, '') if params[:review][:rating].present?
49
+
50
+ @review = Spree::Review.find(params[:id])
51
+
52
+ # Handle images
53
+ params[:review][:images]&.each do |image|
54
+ @review.images.new(attachment: image)
55
+ end
56
+
57
+ authorize! :update, @review
58
+ if @review.update(review_params)
59
+ flash[:notice] = I18n.t('spree.review_successfully_submitted')
60
+ redirect_to spree.product_path(@product)
61
+ else
62
+ render :edit
63
+ end
64
+ end
65
+
39
66
  private
40
67
 
41
68
  def load_product
@@ -7,10 +7,6 @@ module SolidusReviews
7
7
  base.class_eval do
8
8
  helper ::Spree::ReviewsHelper
9
9
  end
10
-
11
- [:avg_rating, :reviews_count].each do |attribute|
12
- ::Spree::PermittedAttributes.product_attributes << attribute
13
- end
14
10
  end
15
11
 
16
12
  ::Spree::ProductsController.prepend self
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module SolidusReviews
3
4
  module Spree
4
5
  module ProductDecorator
@@ -16,11 +17,11 @@ module SolidusReviews
16
17
  reviews_count = reviews.reload.default_approval_filter.count
17
18
 
18
19
  self.reviews_count = reviews_count
19
- if reviews_count > 0
20
- self.avg_rating = '%.1f' % (reviews.default_approval_filter.sum(:rating).to_f / reviews_count)
21
- else
22
- self.avg_rating = 0
23
- end
20
+ self.avg_rating = if reviews_count > 0
21
+ '%.1f' % (reviews.default_approval_filter.sum(:rating).to_f / reviews_count)
22
+ else
23
+ 0
24
+ end
24
25
  save
25
26
  end
26
27
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree::ReviewsHelper
4
4
  def star(the_class)
5
- content_tag(:span, " &#10030; ".html_safe, class: the_class)
5
+ tag.span(" &#10030; ".html_safe, class: the_class)
6
6
  end
7
7
 
8
8
  def mk_stars(m)
@@ -18,10 +18,10 @@ module Spree::ReviewsHelper
18
18
  def display_verified_purchaser?(review)
19
19
  Spree::Reviews::Config[:show_verified_purchaser] && review.user &&
20
20
  Spree::LineItem.joins(:order, :variant)
21
- .where.not(spree_orders: { completed_at: nil })
22
- .find_by(
23
- spree_variants: { product_id: review.product_id },
24
- spree_orders: { user_id: review.user_id }
25
- ).present?
21
+ .where.not(spree_orders: { completed_at: nil })
22
+ .find_by(
23
+ spree_variants: { product_id: review.product_id },
24
+ spree_orders: { user_id: review.user_id }
25
+ ).present?
26
26
  end
27
27
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Spree::FeedbackReview < ActiveRecord::Base
3
+ class Spree::FeedbackReview < ApplicationRecord
4
4
  belongs_to :user, class_name: Spree.user_class.to_s, optional: true
5
5
 
6
- belongs_to :review, dependent: :destroy
6
+ belongs_to :review, touch: true
7
7
  validates :review, presence: true
8
8
 
9
9
  validates :rating, numericality: { only_integer: true,
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module PermissionSets
5
+ class ReviewDisplay < PermissionSets::Base
6
+ def activate!
7
+ can [:display, :admin], Spree::Review
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module PermissionSets
5
+ class ReviewManagement < PermissionSets::Base
6
+ def activate!
7
+ can :manage, Spree::Review
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Spree::Review < ActiveRecord::Base
3
+ class Spree::Review < ApplicationRecord
4
4
  belongs_to :product, touch: true, optional: true
5
5
  belongs_to :user, class_name: Spree.user_class.to_s, optional: true
6
- has_many :feedback_reviews
6
+ has_many :feedback_reviews, dependent: :destroy
7
7
  has_many :images, -> { order(:position) }, as: :viewable,
8
- dependent: :destroy, class_name: "Spree::Image"
8
+ dependent: :destroy, class_name: "Spree::Image"
9
9
 
10
- before_create :verify_purchaser
10
+ before_save :verify_purchaser
11
+ before_save :approve_review, unless: :approved?
11
12
  after_save :recalculate_product_rating, if: :approved?
12
13
  after_destroy :recalculate_product_rating
13
14
 
@@ -28,6 +29,7 @@ class Spree::Review < ActiveRecord::Base
28
29
 
29
30
  def feedback_stars
30
31
  return 0 if feedback_reviews.size <= 0
32
+
31
33
  ((feedback_reviews.sum(:rating) / feedback_reviews.size) + 0.5).floor
32
34
  end
33
35
 
@@ -36,19 +38,32 @@ class Spree::Review < ActiveRecord::Base
36
38
  end
37
39
 
38
40
  def email
39
- user.try!(:email)
41
+ user&.email
40
42
  end
41
43
 
42
44
  def verify_purchaser
43
45
  return unless user_id && product_id
44
46
 
45
47
  verified_purchase = Spree::LineItem.joins(:order, :variant)
46
- .where.not(spree_orders: { completed_at: nil })
47
- .find_by(
48
- spree_variants: { product_id: product_id },
49
- spree_orders: { user_id: user_id }
50
- ).present?
48
+ .where.not(spree_orders: { completed_at: nil })
49
+ .find_by(
50
+ spree_variants: { product_id: product_id },
51
+ spree_orders: { user_id: user_id }
52
+ ).present?
51
53
 
52
54
  self.verified_purchaser = verified_purchase
53
55
  end
56
+
57
+ def star_only?
58
+ [title, review].all?(&:blank?) && rating.present?
59
+ end
60
+
61
+ def approve_review
62
+ # Checks if we should auto approve the review.
63
+ if Spree::Reviews::Config[:approve_star_only]
64
+ self.approved = true if star_only?
65
+ elsif Spree::Reviews::Config[:approve_star_only_for_verified_purchaser]
66
+ self.approved = true if star_only? && verified_purchaser?
67
+ end
68
+ end
54
69
  end