spree_api 4.2.0.rc5 → 4.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d89085eb3c34e7174431d231b1e9a883b6cbf3d7ee838d633125c352bd3a6db
4
- data.tar.gz: 3402c8e857912d6655aea610e7092c4f749faf2f0b31a9f0c3f8601b292c43ba
3
+ metadata.gz: aa0ba5ffcc873cf68159260e0b7f52879f39f54f7140887a438c73f1257293d2
4
+ data.tar.gz: 1f05304db222d36a1f31d563ea5a071a01cfe7eb80fa4c13a002b6a4dd6775f8
5
5
  SHA512:
6
- metadata.gz: bef7abadbdf0a40b95b04b45811eade8884c5f782c9720a3b009e90aabc133b9384122e65fcc443245102b6e444636e30f423d357efefebc8e63910240525efe
7
- data.tar.gz: a1824c2bccb63b030b8d6cfe64237b1ce3b57dfd36adacdf71367b5a0408cec84a7d019bec4017c4d83f273a2de0e595d734cf506cb517b03b78932f9a871285
6
+ metadata.gz: 0d83abd3762d05c58b37e8290d0fddc8ead28edc15ad3dd1267915ed2abb234399a36071a8250d4d7a3e08a0871e5e438acff6a28a67d2512460ec718c1785dd
7
+ data.tar.gz: 41eee02e45c3491b25333eecda173b23a520e0595ba39ef4c38ad1eb7d356d4c206ee7f16d19fd927f5e291475e3a40f6a785a634f0c1055f29cf60ad1e82ea8
@@ -34,12 +34,16 @@ module Spree
34
34
  )
35
35
  end
36
36
 
37
- def serialize_order(order)
38
- resource_serializer.new(order.reload, include: resource_includes, fields: sparse_fields).serializable_hash
37
+ def serialized_current_order
38
+ serialize_resource(spree_current_order)
39
39
  end
40
40
 
41
- def serialized_current_order
42
- serialize_order(spree_current_order)
41
+ def serialize_order(order)
42
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
43
+ `OrderConcern#serialize_order` is deprecated and will be removed in Spree 5.0.
44
+ Please use `serializer_resource` method
45
+ DEPRECATION
46
+ serialize_resource(order)
43
47
  end
44
48
  end
45
49
  end
@@ -10,15 +10,41 @@ module Spree
10
10
  rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
11
11
  rescue_from CanCan::AccessDenied, with: :access_denied
12
12
  rescue_from Spree::Core::GatewayError, with: :gateway_error
13
+ rescue_from ActionController::ParameterMissing, with: :error_during_processing
14
+ rescue_from ArgumentError, with: :error_during_processing
13
15
 
14
16
  def content_type
15
17
  Spree::Api::Config[:api_v2_content_type]
16
18
  end
17
19
 
20
+ protected
21
+
22
+ def serialize_collection(collection)
23
+ collection_serializer.new(
24
+ collection,
25
+ collection_options(collection).merge(params: serializer_params)
26
+ ).serializable_hash
27
+ end
28
+
29
+ def serialize_resource(resource)
30
+ resource_serializer.new(
31
+ resource,
32
+ params: serializer_params,
33
+ include: resource_includes,
34
+ fields: sparse_fields
35
+ ).serializable_hash
36
+ end
37
+
38
+ def paginated_collection
39
+ collection_paginator.new(sorted_collection, params).call
40
+ end
41
+
42
+ def collection_paginator
43
+ Spree::Api::Dependencies.storefront_collection_paginator.constantize
44
+ end
45
+
18
46
  def render_serialized_payload(status = 200)
19
47
  render json: yield, status: status, content_type: content_type
20
- rescue ArgumentError => exception
21
- render_error_payload(exception.message, 400)
22
48
  end
23
49
 
24
50
  def render_error_payload(error, status = 422)
@@ -99,6 +125,16 @@ module Spree
99
125
  def gateway_error(exception)
100
126
  render_error_payload(exception.message)
101
127
  end
128
+
129
+ def error_during_processing(exception)
130
+ result = error_handler.call(exception: exception, opts: { user: spree_current_user })
131
+
132
+ render_error_payload(result.value[:message], 400)
133
+ end
134
+
135
+ def error_handler
136
+ Spree::Api::Dependencies.error_handler.constantize
137
+ end
102
138
  end
103
139
  end
104
140
  end
@@ -14,30 +14,6 @@ module Spree
14
14
 
15
15
  protected
16
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
17
  def sorted_collection
42
18
  collection_sorter.new(collection, params, allowed_sort_attributes).call
43
19
  end
@@ -19,7 +19,7 @@ module Spree
19
19
  order = spree_current_order if spree_current_order.present?
20
20
  order ||= create_service.call(order_params).value
21
21
 
22
- render_serialized_payload(201) { serialize_order(order) }
22
+ render_serialized_payload(201) { serialize_resource(order) }
23
23
  end
24
24
 
25
25
  def add_item
@@ -163,7 +163,7 @@ module Spree
163
163
  :id, :name, :url, :meta_description, :meta_keywords, :seo_title,
164
164
  :mail_from_address, :customer_support_email, :default_currency,
165
165
  :code, :default, :facebook, :twitter, :instagram,
166
- :supported_currencies
166
+ :supported_currencies, :default_locale, :supported_locales
167
167
  ]
168
168
 
169
169
  @@tag_attributes = [:id, :name]
@@ -2,5 +2,6 @@ module Spree
2
2
  class ApiConfiguration < Preferences::Configuration
3
3
  preference :requires_authentication, :boolean, default: true
4
4
  preference :api_v2_content_type, :string, default: 'application/vnd.api+json'
5
+ preference :api_v2_per_page_limit, :integer, default: 100
5
6
  end
6
7
  end
@@ -16,7 +16,7 @@ module Spree
16
16
  :storefront_cart_update_service, :storefront_cart_estimate_shipping_rates_service, :storefront_estimated_shipment_serializer,
17
17
  :storefront_store_serializer, :storefront_address_serializer, :storefront_order_serializer,
18
18
  :storefront_account_create_address_service, :storefront_account_update_address_service, :storefront_address_finder,
19
- :storefront_collection_sorter
19
+ :storefront_collection_sorter, :error_handler
20
20
  ].freeze
21
21
 
22
22
  attr_accessor *INJECTION_POINTS
@@ -86,6 +86,8 @@ module Spree
86
86
  @storefront_find_by_variant_finder = Spree::Dependencies.line_item_by_variant_finder
87
87
  @storefront_products_finder = Spree::Dependencies.products_finder
88
88
  @storefront_taxon_finder = Spree::Dependencies.taxon_finder
89
+
90
+ @error_handler = 'Spree::Api::ErrorHandler'
89
91
  end
90
92
  end
91
93
  end
@@ -6,7 +6,7 @@ module Spree
6
6
 
7
7
  attributes :name, :url, :meta_description, :meta_keywords, :seo_title, :default_currency, :default, :supported_currencies, :facebook,
8
8
  :twitter, :instagram, :default_locale, :customer_support_email, :default_country_id, :description,
9
- :address, :contact_phone
9
+ :address, :contact_phone, :supported_locales
10
10
 
11
11
  has_one :default_country, serializer: :country, record_type: :country, id_method_name: :default_country_id
12
12
  end
@@ -0,0 +1,40 @@
1
+ module Spree
2
+ module Api
3
+ class ErrorHandler
4
+ prepend ::Spree::ServiceModule::Base
5
+
6
+ def call(exception:, opts: {})
7
+ run :format_message
8
+ run :log_error
9
+ run :report_error
10
+ end
11
+
12
+ protected
13
+
14
+ def format_message(exception:, opts:)
15
+ message = if exception.respond_to?(:original_message)
16
+ exception.original_message
17
+ else
18
+ exception.message
19
+ end
20
+
21
+ success(exception: exception, message: message, opts: opts)
22
+ end
23
+
24
+ def log_error(exception:, message:, opts:)
25
+ Rails.logger.error message
26
+ Rails.logger.error "User ID: #{opts[:user]&.id}" if opts[:user]
27
+ Rails.logger.error exception.backtrace.join("\n")
28
+
29
+ success(exception: exception, message: message, opts: opts)
30
+ end
31
+
32
+ def report_error(exception:, message:, opts:)
33
+ # overwrite this method in your application to support different error handlers
34
+ # eg. Sentry, Rollbar, etc
35
+
36
+ success(exception: exception, message: message)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -3,6 +3,8 @@ Doorkeeper.configure do
3
3
  use_refresh_token
4
4
  api_only
5
5
 
6
+ skip_client_authentication_for_password_grant { true } if defined?(skip_client_authentication_for_password_grant)
7
+
6
8
  resource_owner_authenticator { current_spree_user }
7
9
 
8
10
  resource_owner_from_credentials do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0.rc5
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Bigg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-04 00:00:00.000000000 Z
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jsonapi-rspec
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 4.2.0.rc5
33
+ version: 4.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 4.2.0.rc5
40
+ version: 4.2.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rabl
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -181,6 +181,7 @@ files:
181
181
  - app/serializers/spree/v2/storefront/taxonomy_serializer.rb
182
182
  - app/serializers/spree/v2/storefront/user_serializer.rb
183
183
  - app/serializers/spree/v2/storefront/variant_serializer.rb
184
+ - app/services/spree/api/error_handler.rb
184
185
  - app/views/spree/api/errors/gateway_error.rabl
185
186
  - app/views/spree/api/errors/invalid_api_key.rabl
186
187
  - app/views/spree/api/errors/invalid_resource.rabl
@@ -309,9 +310,9 @@ licenses:
309
310
  - BSD-3-Clause
310
311
  metadata:
311
312
  bug_tracker_uri: https://github.com/spree/spree/issues
312
- changelog_uri: https://github.com/spree/spree/releases/tag/v4.2.0.rc5
313
+ changelog_uri: https://github.com/spree/spree/releases/tag/v4.2.0
313
314
  documentation_uri: https://guides.spreecommerce.org/
314
- source_code_uri: https://github.com/spree/spree/tree/v4.2.0.rc5
315
+ source_code_uri: https://github.com/spree/spree/tree/v4.2.0
315
316
  post_install_message:
316
317
  rdoc_options: []
317
318
  require_paths:
@@ -323,9 +324,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
323
324
  version: 2.5.0
324
325
  required_rubygems_version: !ruby/object:Gem::Requirement
325
326
  requirements:
326
- - - ">"
327
+ - - ">="
327
328
  - !ruby/object:Gem::Version
328
- version: 1.3.1
329
+ version: '0'
329
330
  requirements: []
330
331
  rubygems_version: 3.1.4
331
332
  signing_key: