PageRenderTime 1323ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/app/controllers/spree/api/products_controller_decorator.rb

https://gitlab.com/srihas/openfoodnetwork
Ruby | 71 lines | 53 code | 15 blank | 3 comment | 2 complexity | 29baec6bef4789b76ce75b52387ec773 MD5 | raw file
  1. require 'open_food_network/permissions'
  2. Spree::Api::ProductsController.class_eval do
  3. def managed
  4. authorize! :admin, Spree::Product
  5. authorize! :read, Spree::Product
  6. @products = product_scope.ransack(params[:q]).result.managed_by(current_api_user).page(params[:page]).per(params[:per_page])
  7. respond_with(@products, default_template: :index)
  8. end
  9. # TODO: This should be named 'managed'. Is the action above used? Maybe we should remove it.
  10. def bulk_products
  11. @products = OpenFoodNetwork::Permissions.new(current_api_user).editable_products.
  12. merge(product_scope).
  13. order('created_at DESC').
  14. ransack(params[:q]).result.
  15. page(params[:page]).per(params[:per_page])
  16. render_paged_products @products
  17. end
  18. def overridable
  19. producers = OpenFoodNetwork::Permissions.new(current_api_user).
  20. variant_override_producers.by_name
  21. @products = paged_products_for_producers producers
  22. render_paged_products @products
  23. end
  24. def soft_delete
  25. authorize! :delete, Spree::Product
  26. @product = find_product(params[:product_id])
  27. authorize! :delete, @product
  28. @product.delete
  29. respond_with(@product, :status => 204)
  30. end
  31. private
  32. # Copied and modified from Spree::Api::BaseController to allow
  33. # enterprise users to access inactive products
  34. def product_scope
  35. if current_api_user.has_spree_role?("admin") || current_api_user.enterprises.present? # This line modified
  36. scope = Spree::Product
  37. unless params[:show_deleted]
  38. scope = scope.not_deleted
  39. end
  40. else
  41. scope = Spree::Product.active
  42. end
  43. scope.includes(:master)
  44. end
  45. def paged_products_for_producers(producers)
  46. Spree::Product.scoped.
  47. merge(product_scope).
  48. where(supplier_id: producers).
  49. by_producer.by_name.
  50. ransack(params[:q]).result.
  51. page(params[:page]).per(params[:per_page])
  52. end
  53. def render_paged_products(products)
  54. render text: { products: ActiveModel::ArraySerializer.new(products, each_serializer: Api::Admin::ProductSerializer), pages: products.num_pages }.to_json
  55. end
  56. end