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
Methods inherited from BaseController
#map_nested_attributes_keys, #permitted_line_item_attributes
Methods included from ControllerSetup
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"
}
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'app/controllers/spree/api/products_controller.rb', line 59 def create :create, Product params[:product][:available_on] ||= Time.now 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
88 89 90 91 92 93 |
# File 'app/controllers/spree/api/products_controller.rb', line 88 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 |
# File 'app/controllers/spree/api/products_controller.rb', line 5 def index if params[:ids] @products = product_scope.where(id: params[:ids].split(",").flatten) 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
18 19 20 21 22 23 24 |
# File 'app/controllers/spree/api/products_controller.rb', line 18 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
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'app/controllers/spree/api/products_controller.rb', line 74 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 |