Class: Spree::Api::ProductsController
- Inherits:
-
BaseController
- Object
- ActionController::Base
- BaseController
- Spree::Api::ProductsController
- Defined in:
- app/controllers/spree/api/products_controller.rb
Instance Attribute Summary
Attributes inherited from BaseController
Instance Method Summary collapse
-
#create ⇒ Object
Takes besides the products attributes either an array of variants or an array of option types.
- #destroy ⇒ Object
- #index ⇒ Object
- #new ⇒ Object
- #show ⇒ Object
- #update ⇒ Object
Instance Method Details
#create ⇒ Object
Takes besides the products attributes either an array of variants or an array of option types.
By submitting an array of variants the option types will be created using the name key in options hash. e.g
product: {
...
variants: {
price: 19.99,
sku: "hey_you",
options: [
{ name: "size", value: "small" },
{ name: "color", value: "black" }
]
}
}
Or just pass in the option types hash:
product: {
...
option_types: ['size', 'color']
}
By passing the shipping category name you can fetch or create that shipping category on the fly. e.g.
product: {
...
shipping_category: "Free Shipping Items"
}
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'app/controllers/spree/api/products_controller.rb', line 64 def create :create, Product params[:product][:available_on] ||= Time.current set_up_shipping_category = { variants_attrs: variants_params, options_attrs: option_types_params } @product = Core::Importer::Product.new(nil, product_params, ).create if @product.persisted? respond_with(@product, status: 201, default_template: :show) else invalid_resource!(@product) end end |
#destroy ⇒ Object
93 94 95 96 97 98 |
# File 'app/controllers/spree/api/products_controller.rb', line 93 def destroy @product = find_product(params[:id]) :destroy, @product @product.discard respond_with(@product, status: 204) end |
#index ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'app/controllers/spree/api/products_controller.rb', line 6 def index if params[:ids] ids = params[:ids].split(",").flatten @products = product_scope.where(id: ids) else @products = product_scope.ransack(params[:q]).result end @products = paginate(@products.distinct) expires_in 15.minutes, public: true headers['Surrogate-Control'] = "max-age=#{15.minutes}" respond_with(@products) end |
#new ⇒ Object
20 21 |
# File 'app/controllers/spree/api/products_controller.rb', line 20 def new end |
#show ⇒ Object
23 24 25 26 27 28 29 |
# File 'app/controllers/spree/api/products_controller.rb', line 23 def show @product = find_product(params[:id]) expires_in 15.minutes, public: true headers['Surrogate-Control'] = "max-age=#{15.minutes}" headers['Surrogate-Key'] = "product_id=1" respond_with(@product) end |
#update ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'app/controllers/spree/api/products_controller.rb', line 79 def update @product = find_product(params[:id]) :update, @product = { variants_attrs: variants_params, options_attrs: option_types_params } @product = Core::Importer::Product.new(@product, product_params, ).update if @product.errors.empty? respond_with(@product.reload, status: 200, default_template: :show) else invalid_resource!(@product) end end |