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, #set_jsonp_format
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 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'app/controllers/spree/api/products_controller.rb', line 59 def create :create, Product params[:product][:available_on] ||= Time.now set_up_shipping_category @product = Product.new(product_params) if @product.save variants_params.each do |variant_attribute| # make sure the product is assigned before the options= @product.variants.create({ product: @product }.merge(variant_attribute)) end option_types_params.each do |name| option_type = OptionType.where(name: name).first_or_initialize do |option_type| option_type.presentation = name option_type.save! end @product.option_types << option_type unless @product.option_types.include?(option_type) end respond_with(@product, :status => 201, :default_template => :show) else invalid_resource!(@product) end end |
#destroy ⇒ Object
116 117 118 119 120 121 |
# File 'app/controllers/spree/api/products_controller.rb', line 116 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(",")) 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
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'app/controllers/spree/api/products_controller.rb', line 86 def update @product = find_product(params[:id]) :update, @product if @product.update_attributes(product_params) variants_params.each do |variant_attribute| # update the variant if the id is present in the payload if variant_attribute['id'].present? @product.variants.find(variant_attribute['id'].to_i).update_attributes(variant_attribute) else # make sure the product is assigned before the options= @product.variants.create({ product: @product }.merge(variant_attribute)) end end option_types_params.each do |name| option_type = OptionType.where(name: name).first_or_initialize do |option_type| option_type.presentation = name option_type.save! end @product.option_types << option_type unless @product.option_types.include?(option_type) end respond_with(@product.reload, :status => 200, :default_template => :show) else invalid_resource!(@product) end end |