spree_api 4.2.0.beta → 4.2.0.rc5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spree/api/v2/storefront/order_concern.rb +0 -4
  3. data/app/controllers/spree/api/base_controller.rb +10 -2
  4. data/app/controllers/spree/api/v1/shipments_controller.rb +16 -6
  5. data/app/controllers/spree/api/v1/taxons_controller.rb +1 -1
  6. data/app/controllers/spree/api/v2/base_controller.rb +12 -26
  7. data/app/controllers/spree/api/v2/resource_controller.rb +83 -0
  8. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +69 -0
  9. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +7 -15
  10. data/app/controllers/spree/api/v2/storefront/account/orders_controller.rb +7 -26
  11. data/app/controllers/spree/api/v2/storefront/account_controller.rb +1 -5
  12. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +1 -2
  13. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +9 -16
  14. data/app/controllers/spree/api/v2/storefront/order_status_controller.rb +2 -6
  15. data/app/controllers/spree/api/v2/storefront/products_controller.rb +4 -14
  16. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +23 -0
  17. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +4 -14
  18. data/app/helpers/spree/api/api_helpers.rb +1 -1
  19. data/app/helpers/spree/api/v2/display_money_helper.rb +43 -0
  20. data/app/models/spree/api_dependencies.rb +14 -2
  21. data/app/serializers/spree/v2/storefront/address_serializer.rb +8 -3
  22. data/app/serializers/spree/v2/storefront/base_serializer.rb +1 -1
  23. data/app/serializers/spree/v2/storefront/cart_serializer.rb +3 -1
  24. data/app/serializers/spree/v2/storefront/country_serializer.rb +6 -0
  25. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +3 -1
  26. data/app/serializers/spree/v2/storefront/line_item_serializer.rb +2 -1
  27. data/app/serializers/spree/v2/storefront/payment_serializer.rb +1 -1
  28. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +7 -2
  29. data/app/serializers/spree/v2/storefront/product_serializer.rb +38 -7
  30. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +6 -2
  31. data/app/serializers/spree/v2/storefront/shipping_rate_serializer.rb +3 -1
  32. data/app/serializers/spree/v2/storefront/stock_location_serializer.rb +11 -0
  33. data/app/serializers/spree/v2/storefront/store_credit_category_serializer.rb +11 -0
  34. data/app/serializers/spree/v2/storefront/store_credit_serializer.rb +1 -1
  35. data/app/serializers/spree/v2/storefront/store_serializer.rb +15 -0
  36. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +11 -3
  37. data/app/serializers/spree/v2/storefront/user_serializer.rb +3 -1
  38. data/app/serializers/spree/v2/storefront/variant_serializer.rb +34 -5
  39. data/config/initializers/doorkeeper.rb +8 -1
  40. data/config/locales/en.yml +1 -1
  41. data/config/routes.rb +2 -0
  42. data/docs/oauth/index.yml +78 -15
  43. data/docs/v2/storefront/index.yaml +3355 -661
  44. data/lib/spree/api/testing_support/v2/base.rb +1 -1
  45. data/lib/spree/api/testing_support/v2/current_order.rb +6 -0
  46. data/lib/spree_api.rb +1 -1
  47. data/spree_api.gemspec +1 -1
  48. metadata +20 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d7a31de48e37ea579244e2c62fb47e2891f5663b095aa8f49de99ecc24abc1e
4
- data.tar.gz: 6d5470cb5181210801f5210f46b1e0fc7a3d704b8cd930f372a0544b5861713b
3
+ metadata.gz: 4d89085eb3c34e7174431d231b1e9a883b6cbf3d7ee838d633125c352bd3a6db
4
+ data.tar.gz: 3402c8e857912d6655aea610e7092c4f749faf2f0b31a9f0c3f8601b292c43ba
5
5
  SHA512:
6
- metadata.gz: 0b79cb583334e0813cde900718b6062a3601761aba2093159846a383c684219735ebf6861056a24376701d072e766eb74b2a280ef9dacf0f4993f67237dc6c01
7
- data.tar.gz: 2429b6091f2e256743136cef85b42a65cfd53f9daadc6b1a5f3945c0fba1b9a1f882491edc85f0cf8a22cd7a7ee8dbed30c174f53e3d139b7d62eda8fe91c4a4
6
+ metadata.gz: bef7abadbdf0a40b95b04b45811eade8884c5f782c9720a3b009e90aabc133b9384122e65fcc443245102b6e444636e30f423d357efefebc8e63910240525efe
7
+ data.tar.gz: a1824c2bccb63b030b8d6cfe64237b1ce3b57dfd36adacdf71367b5a0408cec84a7d019bec4017c4d83f273a2de0e595d734cf506cb517b03b78932f9a871285
@@ -34,10 +34,6 @@ module Spree
34
34
  )
35
35
  end
36
36
 
37
- def supported_currencies
38
- current_store.supported_currencies_list
39
- end
40
-
41
37
  def serialize_order(order)
42
38
  resource_serializer.new(order.reload, include: resource_includes, fields: sparse_fields).serializable_hash
43
39
  end
@@ -6,6 +6,8 @@ module Spree
6
6
  include Spree::Api::ControllerSetup
7
7
  include Spree::Core::ControllerHelpers::Store
8
8
  include Spree::Core::ControllerHelpers::StrongParameters
9
+ include Spree::Core::ControllerHelpers::Locale
10
+ include Spree::Core::ControllerHelpers::Currency
9
11
 
10
12
  attr_accessor :current_api_user
11
13
 
@@ -81,10 +83,16 @@ module Spree
81
83
  end
82
84
 
83
85
  def error_during_processing(exception)
84
- Rails.logger.error exception.message
86
+ message = if exception.respond_to?(:original_message)
87
+ exception.original_message
88
+ else
89
+ exception.message
90
+ end
91
+
92
+ Rails.logger.error message
85
93
  Rails.logger.error exception.backtrace.join("\n")
86
94
 
87
- unprocessable_entity(exception.message)
95
+ unprocessable_entity(message)
88
96
  end
89
97
 
90
98
  def unprocessable_entity(message)
@@ -92,12 +92,17 @@ module Spree
92
92
  @stock_location = Spree::StockLocation.find(params[:stock_location_id])
93
93
 
94
94
  unless @quantity > 0
95
- unprocessable_entity("#{Spree.t(:shipment_transfer_errors_occured, scope: 'api')} \n #{Spree.t(:negative_quantity, scope: 'api')}")
95
+ unprocessable_entity("#{Spree.t(:shipment_transfer_errors_occurred, scope: 'api')} \n #{Spree.t(:negative_quantity, scope: 'api')}")
96
96
  return
97
97
  end
98
98
 
99
- @original_shipment.transfer_to_location(@variant, @quantity, @stock_location)
100
- render json: { success: true, message: Spree.t(:shipment_transfer_success) }, status: 201
99
+ transfer = @original_shipment.transfer_to_location(@variant, @quantity, @stock_location)
100
+ if transfer.valid?
101
+ transfer.run!
102
+ render json: { message: Spree.t(:shipment_transfer_success) }, status: 201
103
+ else
104
+ render json: { message: transfer.errors.full_messages.to_sentence }, status: 422
105
+ end
101
106
  end
102
107
 
103
108
  def transfer_to_shipment
@@ -113,10 +118,15 @@ module Spree
113
118
  end
114
119
 
115
120
  if error
116
- unprocessable_entity("#{Spree.t(:shipment_transfer_errors_occured, scope: 'api')} \n#{error}")
121
+ unprocessable_entity("#{Spree.t(:shipment_transfer_errors_occurred, scope: 'api')} \n#{error}")
117
122
  else
118
- @original_shipment.transfer_to_shipment(@variant, @quantity, @target_shipment)
119
- render json: { success: true, message: Spree.t(:shipment_transfer_success) }, status: 201
123
+ transfer = @original_shipment.transfer_to_shipment(@variant, @quantity, @target_shipment)
124
+ if transfer.valid?
125
+ transfer.run!
126
+ render json: { message: Spree.t(:shipment_transfer_success) }, status: 201
127
+ else
128
+ render json: { message: transfer.errors.full_messages }, status: 422
129
+ end
120
130
  end
121
131
  end
122
132
 
@@ -37,7 +37,7 @@ module Spree
37
37
  invalid_resource!(@taxon) and return
38
38
  end
39
39
 
40
- @taxon.parent_id = taxonomy.root.id unless params[:taxon][:parent_id]
40
+ @taxon.parent_id = taxonomy.root_id unless params[:taxon][:parent_id]
41
41
 
42
42
  if @taxon.save
43
43
  respond_with(@taxon, status: 201, default_template: :show)
@@ -5,6 +5,8 @@ module Spree
5
5
  include CanCan::ControllerAdditions
6
6
  include Spree::Core::ControllerHelpers::StrongParameters
7
7
  include Spree::Core::ControllerHelpers::Store
8
+ include Spree::Core::ControllerHelpers::Locale
9
+ include Spree::Core::ControllerHelpers::Currency
8
10
  rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
9
11
  rescue_from CanCan::AccessDenied, with: :access_denied
10
12
  rescue_from Spree::Core::GatewayError, with: :gateway_error
@@ -13,31 +15,6 @@ module Spree
13
15
  Spree::Api::Config[:api_v2_content_type]
14
16
  end
15
17
 
16
- private
17
-
18
- def serialize_collection(collection)
19
- collection_serializer.new(
20
- collection,
21
- collection_options(collection)
22
- ).serializable_hash
23
- end
24
-
25
- def serialize_resource(resource)
26
- resource_serializer.new(
27
- resource,
28
- include: resource_includes,
29
- fields: sparse_fields
30
- ).serializable_hash
31
- end
32
-
33
- def paginated_collection
34
- collection_paginator.new(sorted_collection, params).call
35
- end
36
-
37
- def collection_paginator
38
- Spree::Api::Dependencies.storefront_collection_paginator.constantize
39
- end
40
-
41
18
  def render_serialized_payload(status = 200)
42
19
  render json: yield, status: status, content_type: content_type
43
20
  rescue ArgumentError => exception
@@ -53,7 +30,12 @@ module Spree
53
30
  end
54
31
 
55
32
  def spree_current_user
56
- @spree_current_user ||= Spree.user_class.find_by(id: doorkeeper_token.resource_owner_id) if doorkeeper_token
33
+ return nil unless doorkeeper_token
34
+ return @spree_current_user if @spree_current_user
35
+
36
+ doorkeeper_authorize!
37
+
38
+ @spree_current_user ||= Spree.user_class.find_by(id: doorkeeper_token.resource_owner_id)
57
39
  end
58
40
 
59
41
  def spree_authorize!(action, subject, *args)
@@ -102,6 +84,10 @@ module Spree
102
84
  fields.presence
103
85
  end
104
86
 
87
+ def serializer_params
88
+ { currency: current_currency, store: current_store, user: spree_current_user }
89
+ end
90
+
105
91
  def record_not_found
106
92
  render_error_payload(I18n.t(:resource_not_found, scope: 'spree.api'), 404)
107
93
  end
@@ -0,0 +1,83 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ class ResourceController < ::Spree::Api::V2::BaseController
5
+ include Spree::Api::V2::CollectionOptionsHelpers
6
+
7
+ def index
8
+ render_serialized_payload { serialize_collection(paginated_collection) }
9
+ end
10
+
11
+ def show
12
+ render_serialized_payload { serialize_resource(resource) }
13
+ end
14
+
15
+ protected
16
+
17
+ def serialize_collection(collection)
18
+ collection_serializer.new(
19
+ collection,
20
+ collection_options(collection).merge(params: serializer_params)
21
+ ).serializable_hash
22
+ end
23
+
24
+ def serialize_resource(resource)
25
+ resource_serializer.new(
26
+ resource,
27
+ params: serializer_params,
28
+ include: resource_includes,
29
+ fields: sparse_fields
30
+ ).serializable_hash
31
+ end
32
+
33
+ def paginated_collection
34
+ collection_paginator.new(sorted_collection, params).call
35
+ end
36
+
37
+ def collection_paginator
38
+ Spree::Api::Dependencies.storefront_collection_paginator.constantize
39
+ end
40
+
41
+ def sorted_collection
42
+ collection_sorter.new(collection, params, allowed_sort_attributes).call
43
+ end
44
+
45
+ def allowed_sort_attributes
46
+ default_sort_atributes
47
+ end
48
+
49
+ def default_sort_atributes
50
+ [:id, :updated_at, :created_at]
51
+ end
52
+
53
+ def scope
54
+ model_class.accessible_by(current_ability, :show).includes(scope_includes)
55
+ end
56
+
57
+ def scope_includes
58
+ []
59
+ end
60
+
61
+ def resource
62
+ @resource ||= if defined?(resource_finder)
63
+ resource_finder.new(scope: scope, params: params).execute
64
+ else
65
+ scope.find(params[:id])
66
+ end
67
+ end
68
+
69
+ def collection
70
+ @collection ||= if defined?(collection_finder)
71
+ collection_finder.new(scope: scope, params: params).execute
72
+ else
73
+ scope
74
+ end
75
+ end
76
+
77
+ def collection_sorter
78
+ Spree::Api::Dependencies.storefront_collection_sorter.constantize
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,69 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ module Account
6
+ class AddressesController < ::Spree::Api::V2::ResourceController
7
+ before_action :require_spree_current_user
8
+
9
+ def create
10
+ result = create_service.call(user: spree_current_user, address_params: address_params)
11
+ render_result(result)
12
+ end
13
+
14
+ def update
15
+ result = update_service.call(address: resource, address_params: address_params)
16
+ render_result(result)
17
+ end
18
+
19
+ private
20
+
21
+ def collection
22
+ collection_finder.new(scope: scope, params: params).execute
23
+ end
24
+
25
+ def model_class
26
+ Spree::Address
27
+ end
28
+
29
+ def collection_finder
30
+ Spree::Api::Dependencies.storefront_address_finder.constantize
31
+ end
32
+
33
+ def collection_serializer
34
+ Spree::Api::Dependencies.storefront_address_serializer.constantize
35
+ end
36
+
37
+ def resource_serializer
38
+ Spree::Api::Dependencies.storefront_address_serializer.constantize
39
+ end
40
+
41
+ def serialize_collection(collection)
42
+ collection_serializer.new(collection).serializable_hash
43
+ end
44
+
45
+ def create_service
46
+ Spree::Api::Dependencies.storefront_account_create_address_service.constantize
47
+ end
48
+
49
+ def update_service
50
+ Spree::Api::Dependencies.storefront_account_update_address_service.constantize
51
+ end
52
+
53
+ def address_params
54
+ params.require(:address).permit(permitted_address_attributes)
55
+ end
56
+
57
+ def render_result(result)
58
+ if result.success?
59
+ render_serialized_payload { serialize_resource(result.value) }
60
+ else
61
+ render_error_payload(result.error)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -3,27 +3,23 @@ module Spree
3
3
  module V2
4
4
  module Storefront
5
5
  module Account
6
- class CreditCardsController < ::Spree::Api::V2::BaseController
6
+ class CreditCardsController < ::Spree::Api::V2::ResourceController
7
7
  before_action :require_spree_current_user
8
8
 
9
- def index
10
- render_serialized_payload { serialize_collection(resource) }
11
- end
12
-
13
- def show
14
- render_serialized_payload { serialize_resource(resource) }
15
- end
16
-
17
9
  private
18
10
 
19
- def resource
20
- resource_finder.new.execute(scope: scope, params: params)
11
+ def model_class
12
+ Spree::CreditCard
21
13
  end
22
14
 
23
15
  def collection_serializer
24
16
  Spree::Api::Dependencies.storefront_credit_card_serializer.constantize
25
17
  end
26
18
 
19
+ def collection_finder
20
+ Spree::Api::Dependencies.storefront_credit_card_finder.constantize
21
+ end
22
+
27
23
  def resource_serializer
28
24
  Spree::Api::Dependencies.storefront_credit_card_serializer.constantize
29
25
  end
@@ -39,10 +35,6 @@ module Spree
39
35
  fields: sparse_fields
40
36
  ).serializable_hash
41
37
  end
42
-
43
- def scope
44
- spree_current_user.credit_cards.accessible_by(current_ability, :show)
45
- end
46
38
  end
47
39
  end
48
40
  end
@@ -3,26 +3,11 @@ module Spree
3
3
  module V2
4
4
  module Storefront
5
5
  module Account
6
- class OrdersController < ::Spree::Api::V2::BaseController
7
- include Spree::Api::V2::CollectionOptionsHelpers
6
+ class OrdersController < ::Spree::Api::V2::ResourceController
8
7
  before_action :require_spree_current_user
9
8
 
10
- def index
11
- render_serialized_payload { serialize_collection(paginated_collection) }
12
- end
13
-
14
- def show
15
- spree_authorize! :show, resource
16
-
17
- render_serialized_payload { serialize_resource(resource) }
18
- end
19
-
20
9
  private
21
10
 
22
- def sorted_collection
23
- collection_sorter.new(collection, params).call
24
- end
25
-
26
11
  def collection
27
12
  collection_finder.new(user: spree_current_user).execute
28
13
  end
@@ -34,12 +19,16 @@ module Spree
34
19
  resource
35
20
  end
36
21
 
22
+ def allowed_sort_attributes
23
+ super << :completed_at
24
+ end
25
+
37
26
  def collection_serializer
38
- Spree::Api::Dependencies.storefront_cart_serializer.constantize
27
+ Spree::Api::Dependencies.storefront_order_serializer.constantize
39
28
  end
40
29
 
41
30
  def resource_serializer
42
- Spree::Api::Dependencies.storefront_cart_serializer.constantize
31
+ Spree::Api::Dependencies.storefront_order_serializer.constantize
43
32
  end
44
33
 
45
34
  def collection_finder
@@ -49,14 +38,6 @@ module Spree
49
38
  def resource_finder
50
39
  Spree::Api::Dependencies.storefront_completed_order_finder.constantize
51
40
  end
52
-
53
- def collection_sorter
54
- Spree::Api::Dependencies.storefront_order_sorter.constantize
55
- end
56
-
57
- def collection_paginator
58
- Spree::Api::Dependencies.storefront_collection_paginator.constantize
59
- end
60
41
  end
61
42
  end
62
43
  end
@@ -2,13 +2,9 @@ module Spree
2
2
  module Api
3
3
  module V2
4
4
  module Storefront
5
- class AccountController < ::Spree::Api::V2::BaseController
5
+ class AccountController < ::Spree::Api::V2::ResourceController
6
6
  before_action :require_spree_current_user
7
7
 
8
- def show
9
- render_serialized_payload { serialize_resource(resource) }
10
- end
11
-
12
8
  private
13
9
 
14
10
  def resource