class Spree::Api::ReviewsController
Public Instance Methods
create()
click to toggle source
# File lib/controllers/spree/api/reviews_controller.rb, line 28 def create return not_found if @product.nil? @review = Spree::Review.new(review_params) @review.product = @product @review.user = @current_api_user @review.ip_address = request.remote_ip @review.locale = I18n.locale.to_s if Spree::Reviews::Config[:track_locale] authorize! :create, @review if @review.save render json: @review, include: [:images, :feedback_reviews], status: :created else invalid_resource!(@review) end end
destroy()
click to toggle source
# File lib/controllers/spree/api/reviews_controller.rb, line 57 def destroy authorize! :destroy, @review if @review.destroy render json: @review, status: :ok else invalid_resource!(@review) end end
index()
click to toggle source
# File lib/controllers/spree/api/reviews_controller.rb, line 13 def index @reviews = if @product Spree::Review.default_approval_filter.where(product: @product) else Spree::Review.where(user: @current_api_user) end respond_with(@reviews) end
show()
click to toggle source
# File lib/controllers/spree/api/reviews_controller.rb, line 23 def show authorize! :read, @review render json: @review, include: [:images, :feedback_reviews] end
update()
click to toggle source
# File lib/controllers/spree/api/reviews_controller.rb, line 45 def update authorize! :update, @review attributes = review_params.merge(ip_address: request.remote_ip, approved: false) if @review.update(attributes) render json: @review, include: [:images, :feedback_reviews], status: :ok else invalid_resource!(@review) end end
Private Instance Methods
find_review_user()
click to toggle source
Finds user based on api_key or by user_id if api_key belongs to an admin.
# File lib/controllers/spree/api/reviews_controller.rb, line 87 def find_review_user if params[:user_id] && @current_user_roles.include?('admin') @current_api_user = Spree.user_class.find(params[:user_id]) end end
load_product()
click to toggle source
Loads product from product id.
# File lib/controllers/spree/api/reviews_controller.rb, line 78 def load_product @product = if params[:product_id] Spree::Product.friendly.find(params[:product_id]) else @review&.product end end
load_review()
click to toggle source
Loads any review that is shared between the user and product
# File lib/controllers/spree/api/reviews_controller.rb, line 94 def load_review @review = Spree::Review.find(params[:id]) end
permitted_review_attributes()
click to toggle source
# File lib/controllers/spree/api/reviews_controller.rb, line 69 def permitted_review_attributes [:product_id, :rating, :title, :review, :name, :show_identifier] end
prevent_multiple_reviews()
click to toggle source
Ensures that a user can’t create more than 1 review per product
# File lib/controllers/spree/api/reviews_controller.rb, line 99 def prevent_multiple_reviews @review = @current_api_user.reviews.find_by(product: @product) if @review.present? invalid_resource!(@review) end end
review_params()
click to toggle source
# File lib/controllers/spree/api/reviews_controller.rb, line 73 def review_params params.permit(permitted_review_attributes) end
sanitize_rating()
click to toggle source
Converts rating strings like “5 units” to “5” Operates on params
# File lib/controllers/spree/api/reviews_controller.rb, line 108 def sanitize_rating params[:rating].sub!(/\s*[^0-9]*\z/, '') if params[:rating].present? end