solidus_api 1.0.7 → 1.1.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solidus_api might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/controllers/spree/api/address_books_controller.rb +38 -0
- data/app/controllers/spree/api/addresses_controller.rb +19 -15
- data/app/controllers/spree/api/base_controller.rb +7 -28
- data/app/controllers/spree/api/checkouts_controller.rb +17 -8
- data/app/controllers/spree/api/option_values_controller.rb +1 -1
- data/app/controllers/spree/api/orders_controller.rb +13 -18
- data/app/controllers/spree/api/payments_controller.rb +0 -1
- data/app/controllers/spree/api/resource_controller.rb +75 -0
- data/app/controllers/spree/api/shipments_controller.rb +1 -0
- data/app/controllers/spree/api/stock_items_controller.rb +1 -3
- data/app/controllers/spree/api/stock_transfers_controller.rb +1 -0
- data/app/controllers/spree/api/users_controller.rb +13 -49
- data/app/controllers/spree/api/zones_controller.rb +7 -3
- data/app/helpers/spree/api/api_helpers.rb +9 -4
- data/app/views/spree/api/address_books/show.v1.rabl +4 -0
- data/app/views/spree/api/orders/show.v1.rabl +2 -2
- data/app/views/spree/api/variants/big.v1.rabl +3 -0
- data/config/locales/en.yml +0 -1
- data/config/routes.rb +3 -0
- data/lib/spree/api/testing_support/helpers.rb +1 -1
- data/lib/spree/api/testing_support/setup.rb +1 -4
- data/spec/controllers/spree/api/address_books_controller_spec.rb +60 -0
- data/spec/controllers/spree/api/addresses_controller_spec.rb +22 -9
- data/spec/controllers/spree/api/base_controller_spec.rb +0 -12
- data/spec/controllers/spree/api/checkouts_controller_spec.rb +107 -45
- data/spec/controllers/spree/api/credit_cards_controller_spec.rb +4 -11
- data/spec/controllers/spree/api/orders_controller_spec.rb +75 -105
- data/spec/controllers/spree/api/payments_controller_spec.rb +0 -11
- data/spec/controllers/spree/api/products_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/resource_controller_spec.rb +157 -0
- data/spec/controllers/spree/api/shipments_controller_spec.rb +12 -13
- data/spec/controllers/spree/api/stock_items_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/users_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/variants_controller_spec.rb +32 -3
- data/spec/models/spree/legacy_user_spec.rb +8 -2
- data/spec/spec_helper.rb +8 -3
- data/spec/test_views/spree/api/widgets/index.v1.rabl +7 -0
- data/spec/test_views/spree/api/widgets/new.v1.rabl +2 -0
- data/spec/test_views/spree/api/widgets/show.v1.rabl +2 -0
- metadata +20 -9
- data/CHANGELOG.md +0 -1
- data/app/views/spree/api/shared/stock_location_required.v1.rabl +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75a42cb0d36debac691c8f4f6cd0bf1fb2df5e63
|
4
|
+
data.tar.gz: 14ba98e1a06d1c1ba6e4c6c36455997a5c9d3d32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 138f2b8e9e0b57c26eb0303ef2c53a39e65fe6544bf3eb3ee1183d8018fd9c59fed68d63a70c61163246f0a1028f19b6d63645fbb9fa52e587d18013cd911394
|
7
|
+
data.tar.gz: 85ef69fd76f30f4514ffa7df05f3dd5bf49314d5b26339c7ad20f84a50288830a2cc5601db4220812375875d676e79b48de9e257af11aa29a2f27cbe7aba9615
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
class AddressBooksController < Spree::Api::BaseController
|
4
|
+
# Note: the AddressBook is the resource to think about here, not individual addresses
|
5
|
+
|
6
|
+
def show
|
7
|
+
render_address_book
|
8
|
+
end
|
9
|
+
|
10
|
+
def update
|
11
|
+
address_params = address_book_params
|
12
|
+
default_flag = address_params.delete(:default)
|
13
|
+
address = current_api_user.save_in_address_book(address_params, default_flag)
|
14
|
+
if address.valid?
|
15
|
+
render_address_book
|
16
|
+
else
|
17
|
+
invalid_resource!(address)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def destroy
|
22
|
+
current_api_user.remove_from_address_book(params[:address_id])
|
23
|
+
render_address_book
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def render_address_book
|
29
|
+
@user_addresses = current_api_user.user_addresses
|
30
|
+
render :show, status: :ok
|
31
|
+
end
|
32
|
+
|
33
|
+
def address_book_params
|
34
|
+
params.require(:address_book).permit(permitted_address_book_attributes)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -13,31 +13,35 @@ module Spree
|
|
13
13
|
authorize! :update, @order, order_token
|
14
14
|
find_address
|
15
15
|
|
16
|
-
if @
|
16
|
+
if @order.update_attributes({"#{@order_source}_attributes" => address_params})
|
17
|
+
@address = @order.send(@order_source)
|
17
18
|
respond_with(@address, :default_template => :show)
|
18
19
|
else
|
20
|
+
@address = @order.send(@order_source)
|
19
21
|
invalid_resource!(@address)
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
25
|
private
|
24
|
-
|
25
|
-
|
26
|
-
|
26
|
+
def address_params
|
27
|
+
params.require(:address).permit(permitted_address_attributes)
|
28
|
+
end
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
def find_order
|
31
|
+
@order = Spree::Order.find_by!(number: order_id)
|
32
|
+
end
|
31
33
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
def find_address
|
35
|
+
@address = if @order.bill_address_id == params[:id].to_i
|
36
|
+
@order_source = :bill_address
|
37
|
+
@order.bill_address
|
38
|
+
elsif @order.ship_address_id == params[:id].to_i
|
39
|
+
@order_source = :ship_address
|
40
|
+
@order.ship_address
|
41
|
+
else
|
42
|
+
raise CanCan::AccessDenied
|
40
43
|
end
|
44
|
+
end
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
@@ -3,9 +3,6 @@ require 'spree/api/responders'
|
|
3
3
|
module Spree
|
4
4
|
module Api
|
5
5
|
class BaseController < ActionController::Base
|
6
|
-
prepend_view_path Rails.root + "app/views"
|
7
|
-
append_view_path File.expand_path("../../../app/views", File.dirname(__FILE__))
|
8
|
-
|
9
6
|
self.responder = Spree::Api::Responders::AppResponder
|
10
7
|
respond_to :json
|
11
8
|
|
@@ -20,7 +17,6 @@ module Spree
|
|
20
17
|
|
21
18
|
class_attribute :error_notifier
|
22
19
|
|
23
|
-
before_action :set_content_type
|
24
20
|
before_action :load_user
|
25
21
|
before_action :authorize_for_order, if: Proc.new { order_token.present? }
|
26
22
|
before_action :authenticate_user
|
@@ -33,15 +29,6 @@ module Spree
|
|
33
29
|
|
34
30
|
helper Spree::Api::ApiHelpers
|
35
31
|
|
36
|
-
def map_nested_attributes_keys(klass, attributes)
|
37
|
-
nested_keys = klass.nested_attributes_options.keys
|
38
|
-
attributes.inject({}) do |h, (k,v)|
|
39
|
-
key = nested_keys.include?(k.to_sym) ? "#{k}_attributes" : k
|
40
|
-
h[key] = v
|
41
|
-
h
|
42
|
-
end.with_indifferent_access
|
43
|
-
end
|
44
|
-
|
45
32
|
private
|
46
33
|
|
47
34
|
# users should be able to set price when importing orders via api
|
@@ -53,16 +40,6 @@ module Spree
|
|
53
40
|
end
|
54
41
|
end
|
55
42
|
|
56
|
-
def set_content_type
|
57
|
-
content_type = case params[:format]
|
58
|
-
when "json"
|
59
|
-
"application/json; charset=utf-8"
|
60
|
-
when "xml"
|
61
|
-
"text/xml; charset=utf-8"
|
62
|
-
end
|
63
|
-
headers["Content-Type"] = content_type
|
64
|
-
end
|
65
|
-
|
66
43
|
def load_user
|
67
44
|
@current_api_user ||= Spree.user_class.find_by(spree_api_key: api_key.to_s)
|
68
45
|
end
|
@@ -70,9 +47,9 @@ module Spree
|
|
70
47
|
def authenticate_user
|
71
48
|
unless @current_api_user
|
72
49
|
if requires_authentication? && api_key.blank? && order_token.blank?
|
73
|
-
render "spree/api/errors/must_specify_api_key", :status => 401
|
50
|
+
render "spree/api/errors/must_specify_api_key", :status => 401
|
74
51
|
elsif order_token.blank? && (requires_authentication? || api_key.present?)
|
75
|
-
render "spree/api/errors/invalid_api_key", :status => 401
|
52
|
+
render "spree/api/errors/invalid_api_key", :status => 401
|
76
53
|
end
|
77
54
|
end
|
78
55
|
end
|
@@ -86,7 +63,7 @@ module Spree
|
|
86
63
|
end
|
87
64
|
|
88
65
|
def unauthorized
|
89
|
-
render "spree/api/errors/unauthorized", status: 401
|
66
|
+
render "spree/api/errors/unauthorized", status: 401
|
90
67
|
end
|
91
68
|
|
92
69
|
def error_during_processing(exception)
|
@@ -96,7 +73,7 @@ module Spree
|
|
96
73
|
error_notifier.call(exception, self) if error_notifier
|
97
74
|
|
98
75
|
render text: { exception: exception.message }.to_json,
|
99
|
-
status: 422
|
76
|
+
status: 422
|
100
77
|
end
|
101
78
|
|
102
79
|
def gateway_error(exception)
|
@@ -109,7 +86,7 @@ module Spree
|
|
109
86
|
end
|
110
87
|
|
111
88
|
def not_found
|
112
|
-
render "spree/api/errors/not_found", status: 404
|
89
|
+
render "spree/api/errors/not_found", status: 404
|
113
90
|
end
|
114
91
|
|
115
92
|
def current_ability
|
@@ -122,6 +99,7 @@ module Spree
|
|
122
99
|
helper_method :current_currency
|
123
100
|
|
124
101
|
def invalid_resource!(resource)
|
102
|
+
Rails.logger.error "invalid_resouce_errors=#{resource.errors.full_messages}"
|
125
103
|
@resource = resource
|
126
104
|
render "spree/api/errors/invalid_resource", :status => 422
|
127
105
|
end
|
@@ -179,6 +157,7 @@ module Spree
|
|
179
157
|
end
|
180
158
|
|
181
159
|
def insufficient_stock_error(exception)
|
160
|
+
logger.error "insufficient_stock_error #{exception.inspect}"
|
182
161
|
render(
|
183
162
|
json: {
|
184
163
|
errors: [I18n.t(:quantity_is_not_available, :scope => "spree.api.order")],
|
@@ -8,6 +8,9 @@ module Spree
|
|
8
8
|
rescue_from Spree::Order::InsufficientStock, with: :insufficient_stock_error
|
9
9
|
|
10
10
|
include Spree::Core::ControllerHelpers::Order
|
11
|
+
# TODO: Remove this after deprecated usage in #update is removed
|
12
|
+
include Spree::Core::ControllerHelpers::PaymentParameters
|
13
|
+
|
11
14
|
# This before_filter comes from Spree::Core::ControllerHelpers::Order
|
12
15
|
skip_before_action :set_current_order
|
13
16
|
|
@@ -26,7 +29,8 @@ module Spree
|
|
26
29
|
authorize! :update, @order, order_token
|
27
30
|
@order.next!
|
28
31
|
respond_with(@order, default_template: 'spree/api/orders/show', status: 200)
|
29
|
-
rescue StateMachines::InvalidTransition
|
32
|
+
rescue StateMachines::InvalidTransition => e
|
33
|
+
logger.error("invalid_transition #{e.event} from #{e.from} for #{e.object.class.name}. Error: #{e.inspect}")
|
30
34
|
respond_with(@order, default_template: 'spree/api/orders/could_not_transition', status: 422)
|
31
35
|
end
|
32
36
|
|
@@ -44,14 +48,22 @@ module Spree
|
|
44
48
|
@order.complete!
|
45
49
|
respond_with(@order, default_template: 'spree/api/orders/show', status: 200)
|
46
50
|
end
|
47
|
-
rescue StateMachines::InvalidTransition
|
51
|
+
rescue StateMachines::InvalidTransition => e
|
52
|
+
logger.error("invalid_transition #{e.event} from #{e.from} for #{e.object.class.name}. Error: #{e.inspect}")
|
48
53
|
respond_with(@order, default_template: 'spree/api/orders/could_not_transition', status: 422)
|
49
54
|
end
|
50
55
|
|
51
56
|
def update
|
52
57
|
authorize! :update, @order, order_token
|
53
58
|
|
54
|
-
if
|
59
|
+
update_params = if params[:payment_source].present?
|
60
|
+
ActiveSupport::Deprecation.warn("Passing payment_source is deprecated. Send source parameters inside payments_attributes[:source_attributes].", caller)
|
61
|
+
move_payment_source_into_payments_attributes(params)
|
62
|
+
else
|
63
|
+
params
|
64
|
+
end
|
65
|
+
|
66
|
+
if @order.update_from_params(update_params, permitted_checkout_attributes, request.headers.env)
|
55
67
|
if can?(:admin, @order) && user_id.present?
|
56
68
|
@order.associate_user!(Spree.user_class.find(user_id))
|
57
69
|
end
|
@@ -62,6 +74,7 @@ module Spree
|
|
62
74
|
state_callback(:after)
|
63
75
|
respond_with(@order, default_template: 'spree/api/orders/show')
|
64
76
|
else
|
77
|
+
logger.error("failed_to_transition_errors=#{@order.errors.full_messages}")
|
65
78
|
respond_with(@order, default_template: 'spree/api/orders/could_not_transition', status: 422)
|
66
79
|
end
|
67
80
|
else
|
@@ -74,10 +87,6 @@ module Spree
|
|
74
87
|
params[:order][:user_id] if params[:order]
|
75
88
|
end
|
76
89
|
|
77
|
-
def nested_params
|
78
|
-
map_nested_attributes_keys Order, params[:order] || {}
|
79
|
-
end
|
80
|
-
|
81
90
|
# Should be overriden if you have areas of your checkout that don't match
|
82
91
|
# up to a step within checkout_steps, such as a registration step
|
83
92
|
def skip_state_validation?
|
@@ -99,7 +108,7 @@ module Spree
|
|
99
108
|
end
|
100
109
|
|
101
110
|
def after_update_attributes
|
102
|
-
if
|
111
|
+
if params[:order] && params[:order][:coupon_code].present?
|
103
112
|
handler = PromotionHandler::Coupon.new(@order).apply
|
104
113
|
|
105
114
|
if handler.error.present?
|
@@ -5,7 +5,7 @@ module Spree
|
|
5
5
|
self.admin_shipment_attributes = [:shipping_method, :stock_location, :inventory_units => [:variant_id, :sku]]
|
6
6
|
|
7
7
|
class_attribute :admin_order_attributes
|
8
|
-
self.admin_order_attributes = [:import, :number, :completed_at, :locked_at, :channel, :user_id]
|
8
|
+
self.admin_order_attributes = [:import, :number, :completed_at, :locked_at, :channel, :user_id, :created_at]
|
9
9
|
|
10
10
|
skip_before_action :authenticate_user, only: :apply_coupon_code
|
11
11
|
|
@@ -28,23 +28,14 @@ module Spree
|
|
28
28
|
def create
|
29
29
|
authorize! :create, Order
|
30
30
|
|
31
|
-
if
|
32
|
-
|
33
|
-
Spree.user_class.find(order_params[:user_id])
|
34
|
-
else
|
35
|
-
current_api_user
|
36
|
-
end
|
37
|
-
|
38
|
-
@order = Spree::Core::Importer::Order.import(order_user, order_params)
|
39
|
-
respond_with(@order, default_template: :show, status: 201)
|
31
|
+
order_user = if order_params[:user_id]
|
32
|
+
Spree.user_class.find(order_params[:user_id])
|
40
33
|
else
|
41
|
-
|
42
|
-
if @order.contents.update_cart(order_params)
|
43
|
-
respond_with(@order, default_template: :show, status: 201)
|
44
|
-
else
|
45
|
-
invalid_resource!(@order)
|
46
|
-
end
|
34
|
+
current_api_user
|
47
35
|
end
|
36
|
+
|
37
|
+
@order = Spree::Core::Importer::Order.import(order_user, order_params)
|
38
|
+
respond_with(@order, default_template: :show, status: 201)
|
48
39
|
end
|
49
40
|
|
50
41
|
def empty
|
@@ -98,8 +89,12 @@ module Spree
|
|
98
89
|
authorize! :update, @order, order_token
|
99
90
|
@order.coupon_code = params[:coupon_code]
|
100
91
|
@handler = PromotionHandler::Coupon.new(@order).apply
|
101
|
-
|
102
|
-
|
92
|
+
if @handler.successful?
|
93
|
+
render "spree/api/promotions/handler", status: 200
|
94
|
+
else
|
95
|
+
logger.error("apply_coupon_code_error=#{@handler.error.inspect}")
|
96
|
+
render "spree/api/promotions/handler", status: 422
|
97
|
+
end
|
103
98
|
end
|
104
99
|
|
105
100
|
private
|
@@ -0,0 +1,75 @@
|
|
1
|
+
class Spree::Api::ResourceController < Spree::Api::BaseController
|
2
|
+
before_action :load_resource, only: [:show, :update, :destroy]
|
3
|
+
|
4
|
+
def index
|
5
|
+
@collection = model_class.accessible_by(current_ability, :read).ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
|
6
|
+
instance_variable_set("@#{controller_name}", @collection)
|
7
|
+
|
8
|
+
respond_with(@collection)
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
respond_with(@object)
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
authorize! :new, model_class
|
17
|
+
respond_with(model_class.new)
|
18
|
+
end
|
19
|
+
|
20
|
+
def create
|
21
|
+
authorize! :create, model_class
|
22
|
+
|
23
|
+
@object = model_class.new(permitted_resource_params)
|
24
|
+
instance_variable_set("@#{object_name}", @object)
|
25
|
+
|
26
|
+
if @object.save
|
27
|
+
respond_with(@object, status: 201, default_template: :show)
|
28
|
+
else
|
29
|
+
invalid_resource!(@object)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def update
|
34
|
+
authorize! :update, @object
|
35
|
+
|
36
|
+
if @object.update_attributes(permitted_resource_params)
|
37
|
+
respond_with(@object, status: 200, default_template: :show)
|
38
|
+
else
|
39
|
+
invalid_resource!(@object)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def destroy
|
44
|
+
authorize! :destroy, @object
|
45
|
+
|
46
|
+
if @object.destroy
|
47
|
+
respond_with(@object, status: 204)
|
48
|
+
else
|
49
|
+
invalid_resource!(@object)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def load_resource
|
56
|
+
@object = model_class.accessible_by(current_ability, :read).find(params[:id])
|
57
|
+
instance_variable_set("@#{object_name}", @object)
|
58
|
+
end
|
59
|
+
|
60
|
+
def permitted_resource_params
|
61
|
+
params.require(object_name).permit(permitted_resource_attributes)
|
62
|
+
end
|
63
|
+
|
64
|
+
def permitted_resource_attributes
|
65
|
+
send("permitted_#{object_name}_attributes")
|
66
|
+
end
|
67
|
+
|
68
|
+
def model_class
|
69
|
+
"Spree::#{controller_name.classify}".constantize
|
70
|
+
end
|
71
|
+
|
72
|
+
def object_name
|
73
|
+
controller_name.singularize
|
74
|
+
end
|
75
|
+
end
|
@@ -15,7 +15,6 @@ module Spree
|
|
15
15
|
|
16
16
|
def create
|
17
17
|
authorize! :create, StockItem
|
18
|
-
|
19
18
|
@stock_item = scope.new(stock_item_params)
|
20
19
|
|
21
20
|
Spree::StockItem.transaction do
|
@@ -55,8 +54,7 @@ module Spree
|
|
55
54
|
private
|
56
55
|
|
57
56
|
def load_stock_location
|
58
|
-
|
59
|
-
@stock_location ||= StockLocation.accessible_by(current_ability, action_name.to_sym).find(params[:stock_location_id])
|
57
|
+
@stock_location ||= StockLocation.accessible_by(current_ability).find(params.fetch(:stock_location_id))
|
60
58
|
end
|
61
59
|
|
62
60
|
def scope
|