Sha256: 3972a802b33ebe329cb515a0e76049ed07a283014e9155ca9551d72fb9631cac

Contents?: true

Size: 1.89 KB

Versions: 24

Compression:

Stored size: 1.89 KB

Contents

module Spree
  module Api
    class LineItemsController < Spree::Api::BaseController
      class_attribute :line_item_options

      self.line_item_options = []

      def create
        variant = Spree::Variant.find(params[:line_item][:variant_id])
        @line_item = order.contents.add(
            variant,
            params[:line_item][:quantity] || 1,
            line_item_params[:options] || {}
        )

        if @line_item.errors.empty?
          respond_with(@line_item, status: 201, default_template: :show)
        else
          invalid_resource!(@line_item)
        end
      end

      def update
        @line_item = find_line_item
        if @order.contents.update_cart(line_items_attributes)
          @line_item.reload
          respond_with(@line_item, default_template: :show)
        else
          invalid_resource!(@line_item)
        end
      end

      def destroy
        @line_item = find_line_item
        variant = Spree::Variant.unscoped.find(@line_item.variant_id)
        @order.contents.remove(variant, @line_item.quantity)
        respond_with(@line_item, status: 204)
      end

      private
        def order
          @order ||= Spree::Order.includes(:line_items).find_by!(number: order_id)
          authorize! :update, @order, order_token
        end

        def find_line_item
          id = params[:id].to_i
          order.line_items.detect { |line_item| line_item.id == id } or
              raise ActiveRecord::RecordNotFound
        end

        def line_items_attributes
          {line_items_attributes: {
              id: params[:id],
              quantity: params[:line_item][:quantity],
              options: line_item_params[:options] || {}
          }}
        end

        def line_item_params
          params.require(:line_item).permit(
              :quantity,
              :variant_id,
              options: line_item_options
          )
        end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
spree_api-3.0.10 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.9 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.8 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.7 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.6.1 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.6 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.5 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.4 app/controllers/spree/api/line_items_controller.rb
spree_api-2.4.10 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.3 app/controllers/spree/api/line_items_controller.rb
spree_api-2.4.9 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.2 app/controllers/spree/api/line_items_controller.rb
spree_api-2.4.8 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.1 app/controllers/spree/api/line_items_controller.rb
spree_api-2.4.7 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.0 app/controllers/spree/api/line_items_controller.rb
spree_api-2.4.6 app/controllers/spree/api/line_items_controller.rb
spree_api-2.4.5 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.0.rc4 app/controllers/spree/api/line_items_controller.rb
spree_api-3.0.0.rc3 app/controllers/spree/api/line_items_controller.rb