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