solidus_api 3.1.7 → 3.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/controllers/spree/api/option_values_controller.rb +21 -0
- data/app/controllers/spree/api/resource_controller.rb +9 -0
- data/app/controllers/spree/api/shipments_controller.rb +26 -4
- data/app/controllers/spree/api/users_controller.rb +62 -9
- data/app/controllers/spree/api/variants_controller.rb +28 -2
- data/config/i18n-tasks.yml +134 -0
- data/config/locales/en.yml +2 -6
- data/config/routes.rb +9 -4
- data/lib/spree/api/testing_support/helpers.rb +1 -1
- data/openapi/solidus-api.oas.yml +37 -6
- data/solidus_api.gemspec +2 -0
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '07619ac156e431da839ea2f95ce4ccf042f5df2fe681258c8722c6612509be07'
|
4
|
+
data.tar.gz: fbf7ff83c8c4eef3c8d39e7d83956bf97ad08944a918cff34c97a0420ed0992f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b5b8d39d9f9e82cefef4e5cae228d28a2deb284585401f3f6b18ba0de09ef5969feb137a893aa6223309e6abcc131b2f448c3211c58671ee4a36280a25e9ed0
|
7
|
+
data.tar.gz: eabba9d8ddb552c438bb41242234ff137c40c23bf6fbd21d800d1623c49e9b567d673468f2ba374911e1372598c096a5b8da17f0704a99c1d3bd4d79c2180cd2
|
data/README.md
CHANGED
@@ -40,5 +40,5 @@ version is released.
|
|
40
40
|
easily extend it with the endpoints provided by your Solidus extensions!
|
41
41
|
|
42
42
|
[docs-dir]: https://github.com/solidusio/solidus/tree/master/api/openapi
|
43
|
-
[live-docs]: https://solidus.
|
43
|
+
[live-docs]: https://solidus.stoplight.io
|
44
44
|
[studio]: https://stoplight.io/p/studio
|
@@ -13,11 +13,20 @@ module Spree
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def show
|
16
|
+
warn_if_nested_member_route
|
17
|
+
|
16
18
|
@option_value = scope.find(params[:id])
|
17
19
|
respond_with(@option_value)
|
18
20
|
end
|
19
21
|
|
20
22
|
def create
|
23
|
+
Spree::Deprecation.warn <<~MSG unless request.path.include?('/option_types/')
|
24
|
+
This route is deprecated, as it'll be no longer possible to create an
|
25
|
+
option_value without an associated option_type. Please, use instead:
|
26
|
+
|
27
|
+
POST api/option_types/{option_type_id}/option_values
|
28
|
+
MSG
|
29
|
+
|
21
30
|
authorize! :create, Spree::OptionValue
|
22
31
|
@option_value = scope.new(option_value_params)
|
23
32
|
if @option_value.save
|
@@ -28,6 +37,8 @@ module Spree
|
|
28
37
|
end
|
29
38
|
|
30
39
|
def update
|
40
|
+
warn_if_nested_member_route
|
41
|
+
|
31
42
|
@option_value = scope.accessible_by(current_ability, :update).find(params[:id])
|
32
43
|
if @option_value.update(option_value_params)
|
33
44
|
render :show
|
@@ -37,6 +48,8 @@ module Spree
|
|
37
48
|
end
|
38
49
|
|
39
50
|
def destroy
|
51
|
+
warn_if_nested_member_route
|
52
|
+
|
40
53
|
@option_value = scope.accessible_by(current_ability, :destroy).find(params[:id])
|
41
54
|
@option_value.destroy
|
42
55
|
render plain: nil, status: 204
|
@@ -55,6 +68,14 @@ module Spree
|
|
55
68
|
def option_value_params
|
56
69
|
params.require(:option_value).permit(permitted_option_value_attributes)
|
57
70
|
end
|
71
|
+
|
72
|
+
def warn_if_nested_member_route
|
73
|
+
Spree::Deprecation.warn <<~MSG if request.path.include?('/option_types/')
|
74
|
+
This route is deprecated. Use shallow version instead:
|
75
|
+
|
76
|
+
#{request.method.upcase} api/option_values/:id
|
77
|
+
MSG
|
78
|
+
end
|
58
79
|
end
|
59
80
|
end
|
60
81
|
end
|
@@ -1,8 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# @deprecated Inherit directly from Spree::Api::BaseController
|
3
4
|
class Spree::Api::ResourceController < Spree::Api::BaseController
|
4
5
|
before_action :load_resource, only: [:show, :update, :destroy]
|
5
6
|
|
7
|
+
def self.inherited(klass)
|
8
|
+
Spree::Deprecation.warn <<~MSG
|
9
|
+
Spree::Api::ResourceController is deprecated. Please, copy any logic you
|
10
|
+
need and inherit directly from Spree::Api::BaseController.
|
11
|
+
MSG
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
6
15
|
def index
|
7
16
|
collection_scope = model_class.accessible_by(current_ability)
|
8
17
|
if params[:ids]
|
@@ -40,13 +40,31 @@ module Spree
|
|
40
40
|
|
41
41
|
def create
|
42
42
|
authorize! :create, Shipment
|
43
|
-
|
43
|
+
|
44
44
|
@shipment = @order.shipments.create(stock_location_id: params.fetch(:stock_location_id))
|
45
|
-
@order.contents.add(variant, quantity, { shipment: @shipment })
|
46
45
|
|
47
|
-
|
46
|
+
if passing_deprecated_params_on_create?
|
47
|
+
Spree::Deprecation.warn <<~MSG
|
48
|
+
Passing `quantity` or `variant_id` to
|
48
49
|
|
49
|
-
|
50
|
+
POST /api/shipments
|
51
|
+
|
52
|
+
is deprecated and won't be allowed anymore starting from Solidus 4.0.
|
53
|
+
Instead, create an empty shipment and add items to it subsequently using
|
54
|
+
the dedicated endpoint:
|
55
|
+
|
56
|
+
PUT /api/shipments/{shipment_number}/add
|
57
|
+
|
58
|
+
MSG
|
59
|
+
|
60
|
+
quantity = params[:quantity].to_i
|
61
|
+
variant = Spree::Variant.unscoped.find(params[:variant_id])
|
62
|
+
@order.contents.add(variant, quantity, { shipment: @shipment })
|
63
|
+
@shipment.save!
|
64
|
+
@shipment.reload
|
65
|
+
end
|
66
|
+
|
67
|
+
respond_with(@shipment, default_template: :show)
|
50
68
|
end
|
51
69
|
|
52
70
|
def update
|
@@ -130,6 +148,10 @@ module Spree
|
|
130
148
|
authorize! :create, Shipment
|
131
149
|
end
|
132
150
|
|
151
|
+
def passing_deprecated_params_on_create?
|
152
|
+
params[:variant_id] || params[:quantity]
|
153
|
+
end
|
154
|
+
|
133
155
|
def find_order_on_create
|
134
156
|
@order = Spree::Order.find_by!(number: params[:shipment][:order_id])
|
135
157
|
authorize! :show, @order
|
@@ -1,8 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Spree::Api::UsersController < Spree::Api::
|
3
|
+
class Spree::Api::UsersController < Spree::Api::BaseController
|
4
|
+
before_action :load_resource, only: [:show, :update, :destroy]
|
5
|
+
|
4
6
|
def index
|
5
|
-
user_scope =
|
7
|
+
user_scope = user_class.accessible_by(current_ability, :show)
|
6
8
|
if params[:ids]
|
7
9
|
ids = params[:ids].split(",").flatten
|
8
10
|
@users = user_scope.where(id: ids)
|
@@ -14,20 +16,71 @@ class Spree::Api::UsersController < Spree::Api::ResourceController
|
|
14
16
|
respond_with(@users)
|
15
17
|
end
|
16
18
|
|
17
|
-
|
19
|
+
def show
|
20
|
+
respond_with(@user)
|
21
|
+
end
|
22
|
+
|
23
|
+
def new
|
24
|
+
authorize! :new, user_class
|
25
|
+
respond_with(user_class.new)
|
26
|
+
end
|
27
|
+
|
28
|
+
def create
|
29
|
+
authorize! :create, user_class
|
30
|
+
|
31
|
+
@user = user_class.new(permitted_user_params)
|
18
32
|
|
19
|
-
|
33
|
+
if @user.save
|
34
|
+
respond_with(@user, status: 201, default_template: :show)
|
35
|
+
else
|
36
|
+
invalid_resource!(@user)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def update
|
41
|
+
authorize! :update, @user
|
20
42
|
|
21
|
-
|
43
|
+
if @user.update(permitted_user_params)
|
44
|
+
respond_with(@user, status: 200, default_template: :show)
|
45
|
+
else
|
46
|
+
invalid_resource!(@user)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def destroy
|
51
|
+
authorize! :destroy, @user
|
52
|
+
|
53
|
+
destroy_result = if @user.respond_to?(:discard)
|
54
|
+
@user.discard
|
55
|
+
else
|
56
|
+
@user.destroy
|
57
|
+
end
|
58
|
+
|
59
|
+
if destroy_result
|
60
|
+
respond_with(@user, status: 204)
|
61
|
+
else
|
62
|
+
invalid_resource!(@user)
|
63
|
+
end
|
64
|
+
rescue ActiveRecord::DeleteRestrictionError
|
65
|
+
render "spree/api/errors/delete_restriction", status: 422
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def user_class
|
22
71
|
Spree.user_class
|
23
72
|
end
|
24
73
|
|
25
|
-
def
|
26
|
-
|
74
|
+
def load_resource
|
75
|
+
@user = user_class.accessible_by(current_ability, :show).find(params[:id])
|
76
|
+
end
|
77
|
+
|
78
|
+
def permitted_user_params
|
79
|
+
params.require(:user).permit(permitted_user_attributes)
|
27
80
|
end
|
28
81
|
|
29
|
-
def
|
30
|
-
if action_name == "create" || can?(:update_email, user)
|
82
|
+
def permitted_user_attributes
|
83
|
+
if action_name == "create" || can?(:update_email, @user)
|
31
84
|
super | [:email]
|
32
85
|
else
|
33
86
|
super
|
@@ -6,6 +6,12 @@ module Spree
|
|
6
6
|
before_action :product
|
7
7
|
|
8
8
|
def create
|
9
|
+
Spree::Deprecation.warn <<~MSG unless request.path.include?('/products/')
|
10
|
+
This route is deprecated. Use the route nested within the product resource:
|
11
|
+
|
12
|
+
POST api/products/{product_id}/variants
|
13
|
+
MSG
|
14
|
+
|
9
15
|
authorize! :create, Variant
|
10
16
|
@variant = scope.new(variant_params)
|
11
17
|
if @variant.save
|
@@ -16,6 +22,8 @@ module Spree
|
|
16
22
|
end
|
17
23
|
|
18
24
|
def destroy
|
25
|
+
warn_if_nested_member_route
|
26
|
+
|
19
27
|
@variant = scope.accessible_by(current_ability, :destroy).find(params[:id])
|
20
28
|
@variant.discard
|
21
29
|
respond_with(@variant, status: 204)
|
@@ -25,8 +33,14 @@ module Spree
|
|
25
33
|
# we render on the view so we better update it any time a node is included
|
26
34
|
# or removed from the views.
|
27
35
|
def index
|
28
|
-
@variants =
|
29
|
-
|
36
|
+
@variants =
|
37
|
+
if params[:variant_search_term]
|
38
|
+
Spree::Config.variant_search_class.new(
|
39
|
+
params[:variant_search_term], scope: scope
|
40
|
+
).results.includes(include_list)
|
41
|
+
else
|
42
|
+
scope.includes(include_list).ransack(params[:q]).result
|
43
|
+
end
|
30
44
|
|
31
45
|
@variants = paginate(@variants)
|
32
46
|
respond_with(@variants)
|
@@ -36,12 +50,16 @@ module Spree
|
|
36
50
|
end
|
37
51
|
|
38
52
|
def show
|
53
|
+
warn_if_nested_member_route
|
54
|
+
|
39
55
|
@variant = scope.includes(include_list)
|
40
56
|
.find(params[:id])
|
41
57
|
respond_with(@variant)
|
42
58
|
end
|
43
59
|
|
44
60
|
def update
|
61
|
+
warn_if_nested_member_route
|
62
|
+
|
45
63
|
@variant = scope.accessible_by(current_ability, :update).find(params[:id])
|
46
64
|
if @variant.update(variant_params)
|
47
65
|
respond_with(@variant, status: 200, default_template: :show)
|
@@ -52,6 +70,14 @@ module Spree
|
|
52
70
|
|
53
71
|
private
|
54
72
|
|
73
|
+
def warn_if_nested_member_route
|
74
|
+
Spree::Deprecation.warn <<~MSG if request.path.include?('/products/')
|
75
|
+
This route is deprecated. Use shallow version instead:
|
76
|
+
|
77
|
+
#{request.method.upcase} api/variants/:id
|
78
|
+
MSG
|
79
|
+
end
|
80
|
+
|
55
81
|
def product
|
56
82
|
@product ||= Spree::Product.accessible_by(current_ability, :show).friendly.find(params[:product_id]) if params[:product_id]
|
57
83
|
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# i18n-tasks finds and manages missing and unused translations: https://github.com/glebm/i18n-tasks
|
2
|
+
|
3
|
+
# The "main" locale.
|
4
|
+
base_locale: en
|
5
|
+
## All available locales are inferred from the data by default. Alternatively, specify them explicitly:
|
6
|
+
# locales: [es, fr]
|
7
|
+
## Reporting locale, default: en. Available: en, ru.
|
8
|
+
# internal_locale: en
|
9
|
+
|
10
|
+
# Read and write translations.
|
11
|
+
data:
|
12
|
+
## Translations are read from the file system. Supported format: YAML, JSON.
|
13
|
+
## Provide a custom adapter:
|
14
|
+
# adapter: I18n::Tasks::Data::FileSystem
|
15
|
+
|
16
|
+
# Locale files or `File.find` patterns where translations are read from:
|
17
|
+
read:
|
18
|
+
## Default:
|
19
|
+
# - config/locales/%{locale}.yml
|
20
|
+
## More files:
|
21
|
+
# - config/locales/**/*.%{locale}.yml
|
22
|
+
|
23
|
+
# Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom:
|
24
|
+
# `i18n-tasks normalize -p` will force move the keys according to these rules
|
25
|
+
write:
|
26
|
+
## For example, write devise and simple form keys to their respective files:
|
27
|
+
# - ['{devise, simple_form}.*', 'config/locales/\1.%{locale}.yml']
|
28
|
+
## Catch-all default:
|
29
|
+
# - config/locales/%{locale}.yml
|
30
|
+
|
31
|
+
# External locale data (e.g. gems).
|
32
|
+
# This data is not considered unused and is never written to.
|
33
|
+
external:
|
34
|
+
## Example (replace %#= with %=):
|
35
|
+
# - "<%#= %x[bundle info vagrant --path].chomp %>/templates/locales/%{locale}.yml"
|
36
|
+
|
37
|
+
## Specify the router (see Readme for details). Valid values: conservative_router, pattern_router, or a custom class.
|
38
|
+
# router: conservative_router
|
39
|
+
|
40
|
+
yaml:
|
41
|
+
write:
|
42
|
+
# do not wrap lines at 80 characters
|
43
|
+
line_width: -1
|
44
|
+
|
45
|
+
## Pretty-print JSON:
|
46
|
+
# json:
|
47
|
+
# write:
|
48
|
+
# indent: ' '
|
49
|
+
# space: ' '
|
50
|
+
# object_nl: "\n"
|
51
|
+
# array_nl: "\n"
|
52
|
+
|
53
|
+
# Find translate calls
|
54
|
+
search:
|
55
|
+
## Paths or `File.find` patterns to search in:
|
56
|
+
# paths:
|
57
|
+
# - app/
|
58
|
+
|
59
|
+
## Root directories for relative keys resolution.
|
60
|
+
# relative_roots:
|
61
|
+
# - app/controllers
|
62
|
+
# - app/helpers
|
63
|
+
# - app/mailers
|
64
|
+
# - app/presenters
|
65
|
+
# - app/views
|
66
|
+
|
67
|
+
## Files or `File.fnmatch` patterns to exclude from search. Some files are always excluded regardless of this setting:
|
68
|
+
## %w(*.jpg *.png *.gif *.svg *.ico *.eot *.otf *.ttf *.woff *.woff2 *.pdf *.css *.sass *.scss *.less *.yml *.json)
|
69
|
+
exclude:
|
70
|
+
- app/assets/images
|
71
|
+
- app/assets/fonts
|
72
|
+
- app/assets/videos
|
73
|
+
|
74
|
+
## Alternatively, the only files or `File.fnmatch patterns` to search in `paths`:
|
75
|
+
## If specified, this settings takes priority over `exclude`, but `exclude` still applies.
|
76
|
+
# only: ["*.rb", "*.html.slim"]
|
77
|
+
|
78
|
+
## If `strict` is `false`, guess usages such as t("categories.#{category}.title"). The default is `true`.
|
79
|
+
# strict: true
|
80
|
+
|
81
|
+
## Multiple scanners can be used. Their results are merged.
|
82
|
+
## The options specified above are passed down to each scanner. Per-scanner options can be specified as well.
|
83
|
+
## See this example of a custom scanner: https://github.com/glebm/i18n-tasks/wiki/A-custom-scanner-example
|
84
|
+
|
85
|
+
## Translation Services
|
86
|
+
# translation:
|
87
|
+
# # Google Translate
|
88
|
+
# # Get an API key and set billing info at https://code.google.com/apis/console to use Google Translate
|
89
|
+
# google_translate_api_key: "AbC-dEf5"
|
90
|
+
# # DeepL Pro Translate
|
91
|
+
# # Get an API key and subscription at https://www.deepl.com/pro to use DeepL Pro
|
92
|
+
# deepl_api_key: "48E92789-57A3-466A-9959-1A1A1A1A1A1A"
|
93
|
+
|
94
|
+
## Do not consider these keys missing:
|
95
|
+
#ignore_missing:
|
96
|
+
# - 'number.currency.format.separator'
|
97
|
+
# - 'errors.messages.{accepted,blank,invalid,too_short,too_long}'
|
98
|
+
# - '{devise,simple_form}.*'
|
99
|
+
|
100
|
+
## Consider these keys used:
|
101
|
+
ignore_unused:
|
102
|
+
# - 'activerecord.attributes.*'
|
103
|
+
# - '{devise,kaminari,will_paginate}.*'
|
104
|
+
# - 'simple_form.{yes,no}'
|
105
|
+
# - 'simple_form.{placeholders,hints,labels}.*'
|
106
|
+
# - 'simple_form.{error_notification,required}.:'
|
107
|
+
|
108
|
+
## Exclude these keys from the `i18n-tasks eq-base' report:
|
109
|
+
# ignore_eq_base:
|
110
|
+
# all:
|
111
|
+
# - common.ok
|
112
|
+
# fr,es:
|
113
|
+
# - common.brand
|
114
|
+
|
115
|
+
## Exclude these keys from the `i18n-tasks check-consistent-interpolations` report:
|
116
|
+
# ignore_inconsistent_interpolations:
|
117
|
+
# - 'activerecord.attributes.*'
|
118
|
+
|
119
|
+
## Ignore these keys completely:
|
120
|
+
# ignore:
|
121
|
+
# - kaminari.*
|
122
|
+
|
123
|
+
## Sometimes, it isn't possible for i18n-tasks to match the key correctly,
|
124
|
+
## e.g. in case of a relative key defined in a helper method.
|
125
|
+
## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.:
|
126
|
+
#
|
127
|
+
# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper',
|
128
|
+
# only: %w(*.html.haml *.html.slim),
|
129
|
+
# patterns: [['= title\b', '.page_title']] %>
|
130
|
+
#
|
131
|
+
# The PatternMapper can also match key literals via a special %{key} interpolation, e.g.:
|
132
|
+
#
|
133
|
+
# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper',
|
134
|
+
# patterns: [['\bSpree\.t[( ]\s*%{key}', 'spree.%{key}']] %>
|
data/config/locales/en.yml
CHANGED
@@ -2,23 +2,19 @@
|
|
2
2
|
en:
|
3
3
|
spree:
|
4
4
|
api:
|
5
|
+
could_not_transition: The %{resource} could not be transitioned. Please fix the errors and try again.
|
5
6
|
delete_restriction_error: Cannot delete record.
|
6
7
|
gateway_error: 'There was a problem with the payment gateway: %{text}'
|
7
8
|
invalid_api_key: Invalid API key (%{key}) specified.
|
8
9
|
invalid_resource: Invalid resource. Please fix errors and try again.
|
9
10
|
invalid_taxonomy_id: Invalid taxonomy id.
|
10
11
|
must_specify_api_key: You must specify an API key.
|
11
|
-
could_not_transition: The %{resource} could not be transitioned. Please fix the
|
12
|
-
errors and try again.
|
13
12
|
order:
|
14
|
-
could_not_transition: The order could not be transitioned. Please fix the
|
15
|
-
errors and try again.
|
16
13
|
expected_total_mismatch: Expected total does not match actual total.
|
17
14
|
invalid_shipping_method: Invalid shipping method specified.
|
18
15
|
quantity_is_not_available: Quantity is not available for items in your order
|
19
16
|
payment:
|
20
|
-
credit_over_limit: This payment can only be credited up to %{limit}. Please
|
21
|
-
specify an amount less than or equal to this number.
|
17
|
+
credit_over_limit: This payment can only be credited up to %{limit}. Please specify an amount less than or equal to this number.
|
22
18
|
update_forbidden: This payment cannot be updated because it is %{state}.
|
23
19
|
resource_not_found: The resource you were looking for could not be found.
|
24
20
|
shipment:
|
data/config/routes.rb
CHANGED
@@ -12,10 +12,16 @@ Spree::Core::Engine.routes.draw do
|
|
12
12
|
|
13
13
|
resources :products do
|
14
14
|
resources :images
|
15
|
+
# TODO: Use shallow option on Solidus v4.0
|
15
16
|
resources :variants
|
16
17
|
resources :product_properties
|
17
18
|
end
|
18
19
|
|
20
|
+
# TODO: Use only: :index on Solidus v4.0
|
21
|
+
resources :variants do
|
22
|
+
resources :images
|
23
|
+
end
|
24
|
+
|
19
25
|
concern :order_routes do
|
20
26
|
resources :line_items
|
21
27
|
resources :payments do
|
@@ -47,13 +53,12 @@ Spree::Core::Engine.routes.draw do
|
|
47
53
|
end
|
48
54
|
end
|
49
55
|
|
50
|
-
resources :variants do
|
51
|
-
resources :images
|
52
|
-
end
|
53
|
-
|
54
56
|
resources :option_types do
|
57
|
+
# TODO: Use shallow option on Solidus v4.0
|
55
58
|
resources :option_values
|
56
59
|
end
|
60
|
+
# TODO: Use only: :index on Solidus v4.0 and use shallow option on the nested routes
|
61
|
+
# within option_types
|
57
62
|
resources :option_values
|
58
63
|
|
59
64
|
get '/orders/mine', to: 'orders#mine', as: 'my_orders'
|
data/openapi/solidus-api.oas.yml
CHANGED
@@ -682,7 +682,10 @@ paths:
|
|
682
682
|
'404':
|
683
683
|
$ref: '#/components/responses/not-found'
|
684
684
|
summary: Get product variant
|
685
|
-
description:
|
685
|
+
description: |-
|
686
|
+
**Deprecation Warning**: Use [shallow version](/docs/solidus/87df124706c5f-get-variant) instead
|
687
|
+
|
688
|
+
Retrieves a product's variant.
|
686
689
|
operationId: get-product-variant
|
687
690
|
tags:
|
688
691
|
- Variants
|
@@ -714,7 +717,10 @@ paths:
|
|
714
717
|
'422':
|
715
718
|
$ref: '#/components/responses/delete-restriction'
|
716
719
|
summary: Delete product variant
|
717
|
-
description:
|
720
|
+
description: |-
|
721
|
+
**Deprecation Warning**: Use [shallow version](/docs/solidus/82ccaada99139-delete-variant) instead
|
722
|
+
|
723
|
+
Deletes a product's variant.
|
718
724
|
operationId: delete-product-variant
|
719
725
|
tags:
|
720
726
|
- Variants
|
@@ -735,7 +741,10 @@ paths:
|
|
735
741
|
'422':
|
736
742
|
$ref: '#/components/responses/unprocessable-entity'
|
737
743
|
summary: Update product variant
|
738
|
-
description:
|
744
|
+
description: |-
|
745
|
+
**Deprecation Warning**: Use [shallow version](/docs/solidus/ce338b5f3b940-update-variant) instead
|
746
|
+
|
747
|
+
Updates a product's variant.
|
739
748
|
operationId: update-product-variant
|
740
749
|
tags:
|
741
750
|
- Variants
|
@@ -857,7 +866,10 @@ paths:
|
|
857
866
|
'422':
|
858
867
|
$ref: '#/components/responses/unprocessable-entity'
|
859
868
|
summary: Create variant
|
860
|
-
description:
|
869
|
+
description: |-
|
870
|
+
**Deprecation Warning**: Use [nested version](/docs/solidus/681aa6cb75b1e-create-product-variant) instead
|
871
|
+
|
872
|
+
Creates a variant. Only users with `can :create, Variant` permissions can perform this action.
|
861
873
|
operationId: create-variant
|
862
874
|
tags:
|
863
875
|
- Variants
|
@@ -2544,6 +2556,8 @@ paths:
|
|
2544
2556
|
$ref: '#/components/responses/unprocessable-entity'
|
2545
2557
|
summary: Create option value
|
2546
2558
|
description: |-
|
2559
|
+
**Deprecation Warning**: Use [nested version](/docs/solidus/810154673c613-create-option-type-value) instead
|
2560
|
+
|
2547
2561
|
Creates an option value.
|
2548
2562
|
|
2549
2563
|
Only users with the `create` permission on `Spree::OptionValue` can perform this action.
|
@@ -2715,7 +2729,10 @@ paths:
|
|
2715
2729
|
'404':
|
2716
2730
|
$ref: '#/components/responses/not-found'
|
2717
2731
|
summary: Get option type value
|
2718
|
-
description:
|
2732
|
+
description: |-
|
2733
|
+
**Deprecation Warning**: Use [shallow version](/docs/solidus/cbbc403ed08a3-get-option-value) instead
|
2734
|
+
|
2735
|
+
Retrieves an option type's value.
|
2719
2736
|
operationId: get-option-type-value
|
2720
2737
|
tags:
|
2721
2738
|
- Option values
|
@@ -2749,7 +2766,10 @@ paths:
|
|
2749
2766
|
'422':
|
2750
2767
|
$ref: '#/components/responses/delete-restriction'
|
2751
2768
|
summary: Delete option type value
|
2752
|
-
description:
|
2769
|
+
description: |-
|
2770
|
+
**Deprecation Warning**: Use [shallow version](/docs/solidus/0742e63219b1f-delete-option-value) instead
|
2771
|
+
|
2772
|
+
Deletes an option type's value.
|
2753
2773
|
operationId: delete-option-type-value
|
2754
2774
|
tags:
|
2755
2775
|
- Option values
|
@@ -2771,6 +2791,8 @@ paths:
|
|
2771
2791
|
$ref: '#/components/responses/unprocessable-entity'
|
2772
2792
|
summary: Update option type value
|
2773
2793
|
description: |-
|
2794
|
+
**Deprecation Warning**: Use [shallow version](/docs/solidus/b43f889175ebb-update-option-value) instead
|
2795
|
+
|
2774
2796
|
Updates an option type's value.
|
2775
2797
|
|
2776
2798
|
Only users with the `update` permission on the option value can perform this action.
|
@@ -5569,6 +5591,10 @@ paths:
|
|
5569
5591
|
Creates a shipment.
|
5570
5592
|
|
5571
5593
|
Please note that this request can be only performed by users with the `create` permission on the shipment.
|
5594
|
+
|
5595
|
+
**Deprecation Warning**: Adding items to the shipment via this endpoint
|
5596
|
+
is deprecated. Instead, create an empty shipment and populate it with
|
5597
|
+
the dedicated endpoint [to add items to the shipment](/docs/solidus/7078dbcf415ac-add-shipment-item).
|
5572
5598
|
operationId: create-shipment
|
5573
5599
|
tags:
|
5574
5600
|
- Shipments
|
@@ -5584,8 +5610,10 @@ paths:
|
|
5584
5610
|
type: integer
|
5585
5611
|
variant_id:
|
5586
5612
|
type: integer
|
5613
|
+
deprecated: true
|
5587
5614
|
quantity:
|
5588
5615
|
type: integer
|
5616
|
+
deprecated: true
|
5589
5617
|
examples:
|
5590
5618
|
Example:
|
5591
5619
|
value:
|
@@ -7141,6 +7169,8 @@ components:
|
|
7141
7169
|
type: boolean
|
7142
7170
|
product_id:
|
7143
7171
|
type: integer
|
7172
|
+
tax_category_id:
|
7173
|
+
type: integer
|
7144
7174
|
weight:
|
7145
7175
|
type: string
|
7146
7176
|
height:
|
@@ -7161,6 +7191,7 @@ components:
|
|
7161
7191
|
type: array
|
7162
7192
|
items:
|
7163
7193
|
$ref: '#/components/schemas/option-value-input'
|
7194
|
+
|
7164
7195
|
options:
|
7165
7196
|
type: object
|
7166
7197
|
description: '`Name` will be the name/presentation of the option type and `Value` will be the name/presentation of the option value. They will be created if not exist.'
|
data/solidus_api.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solidus_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1
|
4
|
+
version: 3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Solidus Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jbuilder
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.1
|
61
|
+
version: 3.2.1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.1
|
68
|
+
version: 3.2.1
|
69
69
|
description: REST API for the Solidus e-commerce framework.
|
70
70
|
email: contact@solidus.io
|
71
71
|
executables: []
|
@@ -225,6 +225,7 @@ files:
|
|
225
225
|
- app/views/spree/api/zones/_zone.json.jbuilder
|
226
226
|
- app/views/spree/api/zones/index.json.jbuilder
|
227
227
|
- app/views/spree/api/zones/show.json.jbuilder
|
228
|
+
- config/i18n-tasks.yml
|
228
229
|
- config/locales/en.yml
|
229
230
|
- config/routes.rb
|
230
231
|
- db/migrate/20100107141738_add_api_key_to_spree_users.rb
|
@@ -255,7 +256,8 @@ files:
|
|
255
256
|
homepage: http://solidus.io
|
256
257
|
licenses:
|
257
258
|
- BSD-3-Clause
|
258
|
-
metadata:
|
259
|
+
metadata:
|
260
|
+
rubygems_mfa_required: 'true'
|
259
261
|
post_install_message:
|
260
262
|
rdoc_options: []
|
261
263
|
require_paths:
|
@@ -271,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
273
|
- !ruby/object:Gem::Version
|
272
274
|
version: 1.8.23
|
273
275
|
requirements: []
|
274
|
-
rubygems_version: 3.
|
276
|
+
rubygems_version: 3.3.19
|
275
277
|
signing_key:
|
276
278
|
specification_version: 4
|
277
279
|
summary: REST API for the Solidus e-commerce framework.
|