beyond_api 0.5.1.pre → 0.6.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -3
  3. data/Gemfile.lock +3 -3
  4. data/lib/beyond_api/resources/carts.rb +18 -9
  5. data/lib/beyond_api/resources/categories.rb +2 -2
  6. data/lib/beyond_api/resources/categories_view.rb +13 -2
  7. data/lib/beyond_api/resources/checkout_settings.rb +16 -1
  8. data/lib/beyond_api/resources/customers.rb +333 -0
  9. data/lib/beyond_api/resources/newsletter_target.rb +1 -1
  10. data/lib/beyond_api/resources/order_settings.rb +45 -28
  11. data/lib/beyond_api/resources/orders.rb +175 -87
  12. data/lib/beyond_api/resources/payment_methods.rb +28 -25
  13. data/lib/beyond_api/resources/product_attribute_definitions.rb +3 -5
  14. data/lib/beyond_api/resources/products/attachments.rb +13 -14
  15. data/lib/beyond_api/resources/products/availability.rb +12 -10
  16. data/lib/beyond_api/resources/products/cross_sells.rb +159 -0
  17. data/lib/beyond_api/resources/products/custom_attributes.rb +7 -7
  18. data/lib/beyond_api/resources/products/images.rb +47 -8
  19. data/lib/beyond_api/resources/products/videos.rb +146 -0
  20. data/lib/beyond_api/resources/products.rb +11 -9
  21. data/lib/beyond_api/resources/products_view.rb +6 -51
  22. data/lib/beyond_api/resources/shipping_zones.rb +5 -5
  23. data/lib/beyond_api/resources/shop.rb +16 -21
  24. data/lib/beyond_api/resources/signers.rb +1 -1
  25. data/lib/beyond_api/resources/users.rb +13 -10
  26. data/lib/beyond_api/resources/variations/images.rb +160 -0
  27. data/lib/beyond_api/resources/variations.rb +40 -37
  28. data/lib/beyond_api/resources/webhook_subscriptions.rb +1 -1
  29. data/lib/beyond_api/session.rb +5 -5
  30. data/lib/beyond_api/version.rb +1 -1
  31. metadata +7 -4
  32. data/lib/beyond_api/resources/product_settings.rb +0 -28
@@ -13,14 +13,14 @@ module BeyondApi
13
13
  # -H 'Accept: application/hal+json' \
14
14
  # -H 'Authorization: Bearer <Access token>'
15
15
  #
16
- # @beyond_api.scopes pymt:u
16
+ # @beyond_api.scopes +pymt:u+
17
17
  #
18
18
  # @param payment_method_id [String] the payment method UUID
19
19
  #
20
20
  # @return true
21
21
  #
22
22
  # @example
23
- # session.payment_methods.activate("268a8629-55cd-4890-9013-936b9b5ea14c")
23
+ # session.payment_methods.activate("da313b73-ea6b-49c7-8a3d-d707934098b8")
24
24
  #
25
25
  def activate(payment_method_id)
26
26
  response, status = BeyondApi::Request.post(@session, "/payment-methods/#{payment_method_id}/activate")
@@ -36,7 +36,7 @@ module BeyondApi
36
36
  # -H 'Accept: application/hal+json' \
37
37
  # -H 'Authorization: Bearer <Access token>'
38
38
  #
39
- # @beyond_api.scopes +pymt:r
39
+ # @beyond_api.scopes +pymt:r+
40
40
  #
41
41
  # @option params [Integer] :size the page size
42
42
  # @option params [Integer] :page the page number
@@ -44,7 +44,7 @@ module BeyondApi
44
44
  # @return [OpenStruct]
45
45
  #
46
46
  # @example
47
- # session.payment_methods.all(size: 100, page: 0)
47
+ # @payment_methods = session.payment_methods.all(size: 100, page: 0)
48
48
  #
49
49
  def all(params = {})
50
50
  response, status = BeyondApi::Request.get(@session, "/payment-methods", params)
@@ -59,14 +59,14 @@ module BeyondApi
59
59
  # -H 'Accept: application/hal+json' \
60
60
  # -H 'Authorization: Bearer <Access token>'
61
61
  #
62
- # @beyond_api.scopes pymt:u
62
+ # @beyond_api.scopes +pymt:u+
63
63
  #
64
64
  # @param payment_method_id [String] the payment method UUID
65
65
  #
66
66
  # @return true
67
67
  #
68
68
  # @example
69
- # session.payment_methods.deactivate("268a8629-55cd-4890-9013-936b9b5ea14c")
69
+ # session.payment_methods.deactivate("157f930f-328a-4d7a-974d-66bc3b4dd28e")
70
70
  #
71
71
  def deactivate(payment_method_id)
72
72
  response, status = BeyondApi::Request.post(@session, "/payment-methods/#{payment_method_id}/deactivate")
@@ -75,16 +75,21 @@ module BeyondApi
75
75
  end
76
76
 
77
77
  #
78
- # A +GET+ request is used to activate a webhook subscription.
78
+ # A +GET+ request is used to retrieve the details of a payment method.
79
79
  #
80
- # @beyond_api.scopes +pymt:r
80
+ # $ curl 'https://api-shop.beyondshop.cloud/api/payment-methods/7d964402-8f67-48f3-af86-6c35abe4fa08' -i -X GET \
81
+ # -H 'Content-Type: application/json' \
82
+ # -H 'Accept: application/hal+json' \
83
+ # -H 'Authorization: Bearer <Access token>'
81
84
  #
82
- # @param payment_method_id [String] the paument method UUID
85
+ # @beyond_api.scopes +pymt:r+
86
+ #
87
+ # @param payment_method_id [String] the payment method UUID
83
88
  #
84
89
  # @return [OpenStruct]
85
90
  #
86
91
  # @example
87
- # session.payment_methods.find("268a8629-55cd-4890-9013-936b9b5ea14c")
92
+ # @payment_method = session.payment_methods.find("7d964402-8f67-48f3-af86-6c35abe4fa08")
88
93
  #
89
94
  def find(payment_method_id)
90
95
  response, status = BeyondApi::Request.get(@session, "/payment-methods/#{payment_method_id}")
@@ -98,12 +103,12 @@ module BeyondApi
98
103
  # $ curl 'https://api-shop.beyondshop.cloud/api/payment-methods' -i -X PUT \
99
104
  # -H 'Content-Type: text/uri-list' \
100
105
  # -H 'Authorization: Bearer <Access token>' \
101
- # -d 'https://api-shop.beyondshop.cloud/api/payment-methods/80fa2f12-53e4-42c4-8991-c5a3ddb7596e
102
- # https://api-shop.beyondshop.cloud/api/payment-methods/8b54c275-b766-44be-9ed5-c1e269594e0f
103
- # https://api-shop.beyondshop.cloud/api/payment-methods/779d08fb-a26d-447e-aef8-ed3642f05e5b
104
- # https://api-shop.beyondshop.cloud/api/payment-methods/c02de15b-1e6d-4990-9318-83749
106
+ # -d 'https://api-shop.beyondshop.cloud/api/payment-methods/dd59a52b-0661-49f9-82c3-e063ff80328f
107
+ # https://api-shop.beyondshop.cloud/api/payment-methods/66b22fb2-2184-4ea1-9143-44ae1d230d49
108
+ # https://api-shop.beyondshop.cloud/api/payment-methods/a9462eae-ed72-4e29-b853-f04537c8ab11
109
+ # https://api-shop.beyondshop.cloud/api/payment-methods/84172da4-5baa-4a99-b779-33d673bed6d1'
105
110
  #
106
- # @beyond_api.scopes +pymt:u
111
+ # @beyond_api.scopes +pymt:u+
107
112
  #
108
113
  # @param payment_method_ids [Array] the payment method UUIDs
109
114
  #
@@ -111,18 +116,16 @@ module BeyondApi
111
116
  #
112
117
  # @example
113
118
  # payment_method_ids = [
114
- # '6f3bc033-c2d1-4f44-80e3-1b668f6bd699',
115
- # '6f3bc033-c2d1-4f44-80e3-1b618f6sd692',
116
- # '6f3bc033-c2d1-4f44-80e3-1b628f6br698'
119
+ # "dd59a52b-0661-49f9-82c3-e063ff80328f",
120
+ # "66b22fb2-2184-4ea1-9143-44ae1d230d49",
121
+ # "a9462eae-ed72-4e29-b853-f04537c8ab11",
122
+ # "84172da4-5baa-4a99-b779-33d673bed6d1"
117
123
  # ]
118
124
  #
119
- # session.payment_methods.sort(paymen)
125
+ # session.payment_methods.sort(payment_method_ids)
120
126
  #
121
127
  def sort(payment_method_ids)
122
- body = []
123
- payment_method_ids.each do |payment_method|
124
- body << "#{@session.api_url}/payment-methods/#{payment_method}"
125
- end
128
+ body = payment_method_ids.map { |id| "#{@session.api_url}/payment-methods/#{id}" }
126
129
  response, status = BeyondApi::Request.put(@session, "/payment-methods", body)
127
130
 
128
131
  handle_response(response, status, respond_with_true: true)
@@ -154,7 +157,7 @@ module BeyondApi
154
157
  # }
155
158
  # }'
156
159
  #
157
- # @beyond_api.scopes +pymt:u
160
+ # @beyond_api.scopes +pymt:u+
158
161
  #
159
162
  # @param payment_method_id [String] the payment method UUID
160
163
  # @param body [Hash] the request body
@@ -181,7 +184,7 @@ module BeyondApi
181
184
  # }
182
185
  # }
183
186
  #
184
- # @payment_method = session.payment_methods.update("6f3bc033-c2d1-4f44-80e3-1b668f6bd699", body)
187
+ # @payment_method = session.payment_methods.update("dc00a5af-d21e-49f0-99f2-ef67ca6fa782", body)
185
188
  #
186
189
  def update(payment_method_id, body)
187
190
  response, status = BeyondApi::Request.put(@session, "/payment-methods/#{payment_method_id}", body)
@@ -73,11 +73,9 @@ module BeyondApi
73
73
  end
74
74
 
75
75
  #
76
- # A +DELETE+ request is used to delete a product attachment.
76
+ # A +DELETE+ request is used to delete a product attribute definition.
77
77
  #
78
- # $ curl 'https://api-shop.beyondshop.cloud/api/products/00add006-beaa-46fe-bb73-f8ebae15082d/attachments/9a44e585-571a-4253-9248-54a4c418c7e2' -i -X DELETE \
79
- # -H 'Content-Type: application/hal+json' \
80
- # -H 'Accept: application/hal+json' \
78
+ # $ curl 'https://api-shop.beyondshop.cloud/api/product-attribute-definitions/color' -i -X DELETE \
81
79
  # -H 'Authorization: Bearer <Access token>'
82
80
  #
83
81
  # @beyond_api.scopes +prad:d+
@@ -87,7 +85,7 @@ module BeyondApi
87
85
  # @return [true]
88
86
  #
89
87
  # @example
90
- # session.product_attribute_definitions.delete("filling_capacity")
88
+ # session.product_attribute_definitions.delete("color")
91
89
  #
92
90
  def delete(product_attribute_name)
93
91
  response, status = BeyondApi::Request.delete(@session, "/product-attribute-definitions/#{product_attribute_name}")
@@ -6,35 +6,34 @@ module BeyondApi
6
6
  module ProductAttachments
7
7
 
8
8
  #
9
- # A +POST+ request is used to list all the attachments of a product.
9
+ # A +POST+ request is used to create an attachment and add it to a product.
10
10
  #
11
11
  # $ curl 'https://api-shop.beyondshop.cloud/api/products/ecb997ce-79c3-4367-9373-058089a313e3/attachments' -i -X POST \
12
12
  # -H 'Content-Type: application/hal+json' \
13
13
  # -H 'Accept: application/hal+json' \
14
14
  # -H 'Authorization: Bearer <Access token>' \
15
15
  # -d '{
16
- # "mimeType" : "application/pdf",
17
- # "length" : 1,
18
- # "label" : "Handbuch",
19
- # "dataUri" : "my_document_1.pdf?hash=8a627f655c68f56dfbbf217ab7d5563281225666"
16
+ # "mimeType" : "application/pdf",
17
+ # "length" : 1,
18
+ # "label" : "Handbuch",
19
+ # "dataUri" : "my_document_1.pdf?hash=8a627f655c68f56dfbbf217ab7d5563281225666"
20
20
  # }'
21
21
  #
22
22
  # @beyond_api.scopes +prod:u+
23
23
  #
24
24
  # @param product_id [String] the product UUID
25
- # @option params [Integer] :size the page size
26
- # @option params [Integer] :page the page number
25
+ # @param body [Hash] the request body
27
26
  #
28
27
  # @return [OpenStruct]
29
28
  #
30
29
  # @example
31
30
  # body = {
32
- # "mimeType" => "application/pdf",
31
+ # "mime_type" => "application/pdf",
33
32
  # "length" => 1,
34
33
  # "label" => "Handbuch",
35
- # "dataUri" => "my_document_1.pdf?hash=8a627f655c68f56dfbbf217ab7d5563281225666"
34
+ # "data_uri" => "my_document_1.pdf?hash=8a627f655c68f56dfbbf217ab7d5563281225666"
36
35
  # }
37
- # @attachment = session.products.add_attachment("fd60a63e-c4c0-496d-af49-c4ed224cca2a", body)
36
+ # @attachment = session.products.add_attachment("ecb997ce-79c3-4367-9373-058089a313e3", body)
38
37
  #
39
38
  def add_attachment(product_id, body)
40
39
  response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/attachments", body)
@@ -58,7 +57,7 @@ module BeyondApi
58
57
  # @return [OpenStruct]
59
58
  #
60
59
  # @example
61
- # @attachment = session.products.attachment("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "36933722-f13f-4ee2-858c-0835ae0a884e")
60
+ # @attachment = session.products.attachment("eb11b53a-5017-4ae7-9ba1-c02c12c80b61", "36933722-f13f-4ee2-858c-0835ae0a884e")
62
61
  #
63
62
  def attachment(product_id, attachment_id)
64
63
  response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/attachments/#{attachment_id}")
@@ -83,9 +82,9 @@ module BeyondApi
83
82
  # @return [OpenStruct]
84
83
  #
85
84
  # @example
86
- # @attachments = session.products.attachments("fd60a63e-c4c0-496d-af49-c4ed224cca2a", size: 100, page: 0)
85
+ # @attachments = session.products.attachments("fd60a63e-c4c0-496d-af49-c4ed224cca2a", {size: 100, page: 0})
87
86
  #
88
- def attachments(product_id, params)
87
+ def attachments(product_id, params = {})
89
88
  response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/attachments", params)
90
89
 
91
90
  handle_response(response, status)
@@ -107,7 +106,7 @@ module BeyondApi
107
106
  # @return [true]
108
107
  #
109
108
  # @example
110
- # session.products.delete_attachment("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "36933722-f13f-4ee2-858c-0835ae0a884e")
109
+ # session.products.delete_attachment("00add006-beaa-46fe-bb73-f8ebae15082d", "9a44e585-571a-4253-9248-54a4c418c7e2")
111
110
  #
112
111
  def delete_attachment(product_id, attachment_id)
113
112
  response, status = BeyondApi::Request.delete(@session, "/products/#{product_id}/attachments/#{attachment_id}")
@@ -17,14 +17,15 @@ module BeyondApi
17
17
  # @beyond_api.scopes +prda:u+
18
18
  #
19
19
  # @param product_id [String] the product UUID
20
+ # @param relative_amount [Integer] the relative amount
20
21
  #
21
22
  # @return [OpenStruct]
22
23
  #
23
24
  # @example
24
- # @availability = session.products.adjust_stock_level(product_id, { relativeAmount => -1 })
25
+ # @availability = session.products.adjust_stock_level("685f483e-cdda-40af-8091-d5bc31249409", { relativeAmount => -1 })
25
26
  #
26
- def adjust_stock_level(product_id, body)
27
- response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/enable-stock-management", body)
27
+ def adjust_stock_level(product_id, relative_amount)
28
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/adjust-available-stock", { relative_amount: relative_amount })
28
29
 
29
30
  handle_response(response, status)
30
31
  end
@@ -67,7 +68,7 @@ module BeyondApi
67
68
  # @return true
68
69
  #
69
70
  # @example
70
- # session.products.disable_purchasability("17e3a92b-6f3b-4415-bd8f-c9c8921a5a73")
71
+ # session.products.disable_purchasability("6b30255e-650f-475c-b345-e7247f957689")
71
72
  #
72
73
  def disable_purchasability(product_id)
73
74
  response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/disable-purchasability")
@@ -90,7 +91,7 @@ module BeyondApi
90
91
  # @return true
91
92
  #
92
93
  # @example
93
- # session.products.disable_stock_management("e966cb17-4047-4b82-ade4-33e7f0978c89", respond_with_true: true)
94
+ # session.products.disable_stock_management("e966cb17-4047-4b82-ade4-33e7f0978c89")
94
95
  #
95
96
  def disable_stock_management(product_id)
96
97
  response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/disable-stock-management")
@@ -139,8 +140,8 @@ module BeyondApi
139
140
  #
140
141
  # @example
141
142
  # body = {
142
- # "initialAvailableStock" => 100,
143
- # "stockThreshold" => 2
143
+ # "initial_available_stock" => 100,
144
+ # "stock_threshold" => 2
144
145
  # }
145
146
  # @availability = session.products.enable_stock_management("101fa968-9bb8-4dbe-b166-3add1fc1b35e", body)
146
147
  #
@@ -162,14 +163,15 @@ module BeyondApi
162
163
  # @beyond_api.scopes +prda:u+
163
164
  #
164
165
  # @param product_id [String] the product UUID
166
+ # @param stock_threshold [Integer] the stock threshold
165
167
  #
166
168
  # @return [OpenStruct]
167
169
  #
168
170
  # @example
169
- # session.products.update_reserve_stock("f74b5f57-43cc-4176-97aa-c6eb9fdeb37c", { stockThreshold => 5 })
171
+ # session.products.update_reserve_stock("f74b5f57-43cc-4176-97aa-c6eb9fdeb37c", { stock_threshold => 5 })
170
172
  #
171
- def update_reserve_stock(product_id, body)
172
- response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/update-stock-threshold", body)
173
+ def update_reserve_stock(product_id, stock_threshold)
174
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/update-stock-threshold", { stock_threshold: stock_threshold })
173
175
 
174
176
  handle_response(response, status)
175
177
  end
@@ -0,0 +1,159 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "beyond_api/utils"
4
+
5
+ module BeyondApi
6
+ module ProductCrossSells
7
+
8
+ #
9
+ # A +POST+ request is used to create a cross-sell for a product.
10
+ #
11
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/43df85ec-e123-4a56-bcc3-c3c52eb23ca9/cross-sells' -i -X POST \
12
+ # -H 'Content-Type: application/json' \
13
+ # -H 'Authorization: Bearer <Access token>' \
14
+ # -d '{
15
+ # "name" : "Red wines from Spain cross-sell",
16
+ # "type" : "MANUAL",
17
+ # "queries" : [ {
18
+ # "ids" : [ "22e8b6a6-7d8e-4b08-be63-dde9bced2604", "b18e9e3c-685c-4e37-837c-9047b88fc91e" ],
19
+ # "strategy" : "all-ids-match"
20
+ # } ]
21
+ # }'
22
+ #
23
+ # @beyond_api.scopes +prcs:c+
24
+ #
25
+ # @param product_id [String] the product UUID
26
+ # @param body [Hash] the request body
27
+ #
28
+ # @return [OpenStruct]
29
+ #
30
+ # @example
31
+ # body = {
32
+ # name => "Red wines from Spain cross-sell",
33
+ # type => "MANUAL",
34
+ # queries => [ {
35
+ # "ids" : [ "22e8b6a6-7d8e-4b08-be63-dde9bced2604", "b18e9e3c-685c-4e37-837c-9047b88fc91e" ],
36
+ # "strategy" : "all-ids-match"
37
+ # } ]
38
+ # }
39
+ #
40
+ # @cross_sell = session.products.create_cross_sell("43df85ec-e123-4a56-bcc3-c3c52eb23ca9", body)
41
+ #
42
+ def create_cross_sell(product_id, body)
43
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/cross-sells", body)
44
+
45
+ handle_response(response, status)
46
+ end
47
+
48
+ #
49
+ # A +GET+ request is used to retrieve the cross-sell of a product.
50
+ #
51
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/20174c3f-1a3f-4401-91f6-c7498e897c82/cross-sells/6176b350-06ff-4c52-b3cf-ba032ea79468' -i -X GET \
52
+ # -H 'Content-Type: application/json' \
53
+ # -H 'Authorization: Bearer <Access token>'
54
+ #
55
+ # @beyond_api.scopes +prcs:r+
56
+ #
57
+ # @param product_id [String] the product UUID
58
+ # @param cross_sell_id [String] the cross-sell UUID
59
+ #
60
+ # @return [OpenStruct]
61
+ #
62
+ # @example
63
+ #
64
+ # @cross_sell = session.products.cross_sell("20174c3f-1a3f-4401-91f6-c7498e897c82", "6176b350-06ff-4c52-b3cf-ba032ea79468")
65
+ #
66
+ def cross_sell(product_id, cross_sell_id)
67
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/cross-sells/#{cross_sell_id}")
68
+
69
+ handle_response(response, status)
70
+ end
71
+
72
+ #
73
+ # A +GET+ request is used to retrieve the cross-sells of a product.
74
+ #
75
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/a21188a2-7109-4cd1-8253-2f366d86ff5d/cross-sells' -i -X GET \
76
+ # -H 'Content-Type: application/json' \
77
+ # -H 'Authorization: Bearer <Access token>'
78
+ #
79
+ # @beyond_api.scopes +prcs:r+
80
+ #
81
+ # @param product_id [String] the product UUID
82
+ #
83
+ # @return [OpenStruct]
84
+ #
85
+ # @example
86
+ #
87
+ # @cross_sells = session.products.cross_sells("a21188a2-7109-4cd1-8253-2f366d86ff5d")
88
+ #
89
+ def cross_sells(product_id)
90
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/cross-sells")
91
+
92
+ handle_response(response, status)
93
+ end
94
+
95
+ #
96
+ # A +DELETE+ request is used to delete a product attribute.
97
+ #
98
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/b80cdb11-0e97-41e3-8559-4d426bd28ba1/cross-sells/67ecb3ef-8472-4509-9e5a-c76945e8d963' -i -X DELETE \
99
+ # -H 'Authorization: Bearer <Access token>'
100
+ #
101
+ # @beyond_api.scopes +prcs:d+
102
+ #
103
+ # @param product_id [String] the product UUID
104
+ # @param cross_sell_id [String] the cross-sell UUID
105
+ #
106
+ # @return [OpenStruct]
107
+ #
108
+ # @example
109
+ #
110
+ # session.products.cross_sell("b80cdb11-0e97-41e3-8559-4d426bd28ba1", "67ecb3ef-8472-4509-9e5a-c76945e8d963")
111
+ #
112
+ def delete_cross_sell(product_id, cross_sell_id)
113
+ response, status = BeyondApi::Request.delete(@session, "/products/#{product_id}/cross-sells/#{cross_sell_id}")
114
+
115
+ handle_response(response, status, respond_with_true: true)
116
+ end
117
+
118
+ #
119
+ # A +PUT+ request is used to update a cross-sell for a product.
120
+ #
121
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/4ed7a15a-9ef8-415f-8161-87498b1ecd4f/cross-sells/b18d96f4-dfdf-47f3-b2dc-ce1653829674' -i -X PUT \
122
+ # -H 'Content-Type: application/json' \
123
+ # -H 'Authorization: Bearer <Access token>' \
124
+ # -d '{
125
+ # "name" : "sale rose wine cross-selling",
126
+ # "type" : "SMART",
127
+ # "queries" : [ {
128
+ # "tags" : [ "Rosé Wine", "Sale" ],
129
+ # "strategy" : "any-tags-match"
130
+ # } ]
131
+ # }'
132
+ #
133
+ # @beyond_api.scopes +prcs:u+
134
+ #
135
+ # @param product_id [String] the product UUID
136
+ # @param cross_sell_id [String] the cross-sell UUID
137
+ # @param body [Hash] the request body
138
+ #
139
+ # @return [OpenStruct]
140
+ #
141
+ # @example
142
+ # body = {
143
+ # name => "sale rose wine cross-selling",
144
+ # type => "SMART",
145
+ # queries => [ {
146
+ # tags => [ "Rosé Wine", "Sale" ],
147
+ # strategy => "any-tags-match"
148
+ # } ]
149
+ # }
150
+ #
151
+ # @cross_sell = session.products.update_cross_sell("4ed7a15a-9ef8-415f-8161-87498b1ecd4f", "b18d96f4-dfdf-47f3-b2dc-ce1653829674", body)
152
+ #
153
+ def update_cross_sell(product_id, attribute_name, body)
154
+ response, status = BeyondApi::Request.put(@session, "/products/#{product_id}/cross-sells/#{cross_sell_id}", body)
155
+
156
+ handle_response(response, status)
157
+ end
158
+ end
159
+ end
@@ -12,8 +12,8 @@ module BeyondApi
12
12
  # -H 'Content-Type: application/json' \
13
13
  # -H 'Authorization: Bearer <Access token>' \
14
14
  # -d '{
15
- # "key" : "colour",
16
- # "value" : "Yellow"
15
+ # "key" : "colour",
16
+ # "value" : "Yellow"
17
17
  # }'
18
18
  #
19
19
  # @beyond_api.scopes +prat:c+
@@ -29,7 +29,7 @@ module BeyondApi
29
29
  # "value" => "Yellow"
30
30
  # }
31
31
  #
32
- # @custom_attribute = session.products.attachment("fd60a63e-c4c0-496d-af49-c4ed224cca2a", body)
32
+ # @custom_attribute = session.products.create_custom_attribute("0c0e1699-d2a4-44d0-bed9-64b2fa1a7713", body)
33
33
  #
34
34
  def create_custom_attribute(product_id, body)
35
35
  response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/attributes", body)
@@ -53,7 +53,7 @@ module BeyondApi
53
53
  #
54
54
  # @example
55
55
  #
56
- # @custom_attribute = session.products.custom_attribute("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "key")
56
+ # @custom_attribute = session.products.custom_attribute("d389347c-568e-4785-8216-91e4f8850c66", "key")
57
57
  #
58
58
  def custom_attribute(product_id, attribute_name)
59
59
  response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/attributes/#{attribute_name}")
@@ -76,7 +76,7 @@ module BeyondApi
76
76
  #
77
77
  # @example
78
78
  #
79
- # @custom_attributes = session.products.custom_attributes("fd60a63e-c4c0-496d-af49-c4ed224cca2a")
79
+ # @custom_attributes = session.products.custom_attributes("57f0ef04-9dac-462f-9dd4-606f7551cc7b")
80
80
  #
81
81
  def custom_attributes(product_id)
82
82
  response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/attributes")
@@ -99,7 +99,7 @@ module BeyondApi
99
99
  #
100
100
  # @example
101
101
  #
102
- # session.products.custom_attribute("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "key")
102
+ # session.products.delete_custom_attribute("fec3b6f3-83d0-467a-abc5-d51019e57b51", "farbe")
103
103
  #
104
104
  def delete_custom_attribute(product_id, attribute_name)
105
105
  response, status = BeyondApi::Request.delete(@session, "/products/#{product_id}/attributes/#{attribute_name}")
@@ -130,7 +130,7 @@ module BeyondApi
130
130
  # "value" : "green"
131
131
  # }
132
132
  #
133
- # @custom_attribute = session.products.update_custom_attribute("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "key", body)
133
+ # @custom_attribute = session.products.update_custom_attribute("82ed44e9-664d-47c0-8b07-09adecfdbf20", "key", body)
134
134
  #
135
135
  def update_custom_attribute(product_id, attribute_name, body)
136
136
  response, status = BeyondApi::Request.put(@session, "/products/#{product_id}/attributes/#{attribute_name}", body)
@@ -5,7 +5,7 @@ require "beyond_api/utils"
5
5
  module BeyondApi
6
6
  module ProductImages
7
7
 
8
-
8
+ #
9
9
  # A +POST+ request is used to create an image and add it to a product.
10
10
  #
11
11
  # $ curl 'https://api-shop.beyondshop.cloud/api/products/7a7d1f18-f760-46a9-b794-dbe5a88c6b44/images' -i -X POST \
@@ -13,8 +13,10 @@ module BeyondApi
13
13
  # -H 'Accept: application/hal+json' \
14
14
  # -H 'Authorization: Bearer <Access token>' \
15
15
  # -d '{
16
- # "dataUri" : "photostore-2.JPG?hash=8a627f655c68f56dfbbf217ab7d5563281225998"
17
- # }'
16
+ # "dataUri" : "photostore-2.JPG?hash=8a627f655c68f56dfbbf217ab7d5563281225998",
17
+ # "width" : 600,
18
+ # "height" : 300
19
+ # }'
18
20
  #
19
21
  # @beyond_api.scopes +prod:u+
20
22
  #
@@ -24,10 +26,15 @@ module BeyondApi
24
26
  # @return [OpenStruct]
25
27
  #
26
28
  # @example
27
- # @image = session.products.add_image(product_id, { dataUri: "photostore-2.JPG?hash=8a627f655c68f56dfbbf217ab7d5563281225998" })
29
+ # body = {
30
+ # "data_uri" => "photostore-2.JPG?hash=8a627f655c68f56dfbbf217ab7d5563281225998",
31
+ # "width" => 600,
32
+ # "height" => 300
33
+ # }
34
+ # @image = session.products.add_image("7a7d1f18-f760-46a9-b794-dbe5a88c6b44", body)
28
35
  #
29
- def add_image(product_id, image_uri)
30
- response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/images", { dataUri: image_uri})
36
+ def add_image(product_id, body)
37
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/images", body)
31
38
 
32
39
  handle_response(response, status)
33
40
  end
@@ -73,7 +80,7 @@ module BeyondApi
73
80
  # @return [OpenStruct]
74
81
  #
75
82
  # @example
76
- # @products = session.products.images("7f32696a-df56-4380-a91b-fffb97f025b4", { size: 20, page: 0 })
83
+ # @images = session.products.images("7f32696a-df56-4380-a91b-fffb97f025b4", { size: 20, page: 0 })
77
84
  #
78
85
  def images(product_id, params = {})
79
86
  response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/images", params)
@@ -124,7 +131,39 @@ module BeyondApi
124
131
  #
125
132
  def set_image_as_default(product_id, image_id)
126
133
  response, status = BeyondApi::Request.put(@session, "/products/#{product_id}",
127
- "#{@session.api_url}/productsimages/#{image_id}")
134
+ "#{@session.api_url}/images/#{image_id}")
135
+
136
+ handle_response(response, status, respond_with_true: true)
137
+ end
138
+
139
+ # A +PUT+ request is used to sort the product images. This is done by passing the self-links of the images to the desired product. The request must contain URIs for all images of the given page.
140
+ #
141
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/3f4b2b56-c22d-4d80-b4ed-d5b33ed161eb/images' -i -X PUT \
142
+ # -H 'Content-Type: text/uri-list' \
143
+ # -H 'Accept: application/hal+json' \
144
+ # -H 'Authorization: Bearer <Access token>' \
145
+ # -d 'http://localhost/products/3f4b2b56-c22d-4d80-b4ed-d5b33ed161eb/images/c9082802-a0d0-416e-9039-02fa465a027e
146
+ # http://localhost/products/3f4b2b56-c22d-4d80-b4ed-d5b33ed161eb/images/78e9993d-8db3-45d8-8f76-6b8f2aea9c45
147
+ # http://localhost/products/3f4b2b56-c22d-4d80-b4ed-d5b33ed161eb/images/9233ee97-5dbb-4c00-a7b2-e1512c69a938'
148
+ #
149
+ # @beyond_api.scopes +prod:u+
150
+ #
151
+ # @param product_id [String] the product UUID
152
+ # @param images [Array] the image UUIDS
153
+ #
154
+ # @return true
155
+ #
156
+ # @example
157
+ # body = [
158
+ # "c9082802-a0d0-416e-9039-02fa465a027e",
159
+ # "78e9993d-8db3-45d8-8f76-6b8f2aea9c45",
160
+ # "9233ee97-5dbb-4c00-a7b2-e1512c69a938"
161
+ # ]
162
+ # session.products.sort_images("3f4b2b56-c22d-4d80-b4ed-d5b33ed161eb", body)
163
+ #
164
+ def sort_images(product_id, image_ids)
165
+ body = image_ids.map { |image_id| "#{@session.api_url}/products/#{product_id}/images/#{image_id}" }
166
+ response, status = BeyondApi::Request.put(@session, "/products/#{product_id}/images", body)
128
167
 
129
168
  handle_response(response, status, respond_with_true: true)
130
169
  end