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
- #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"
}
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/controllers/spree/api/products_controller.rb', line 60 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
89 90 91 92 93 94 |
# File 'app/controllers/spree/api/products_controller.rb', line 89 def destroy @product = find_product(params[:id]) :destroy, @product @product.destroy respond_with(@product, :status => 204) end |
#index ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'app/controllers/spree/api/products_controller.rb', line 5 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 = @products.distinct.page(params[:page]).per(params[:per_page]) expires_in 15.minutes, :public => true headers['Surrogate-Control'] = "max-age=#{15.minutes}" respond_with(@products) end |
#show ⇒ Object
19 20 21 22 23 24 25 |
# File 'app/controllers/spree/api/products_controller.rb', line 19 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
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'app/controllers/spree/api/products_controller.rb', line 75 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 |