beyond_api 0.1.0.pre

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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/.yardopts +1 -0
  6. data/CHANGELOG.md +4 -0
  7. data/CONTRIBUTING.md +48 -0
  8. data/GETTING_STARTED.md +0 -0
  9. data/Gemfile +6 -0
  10. data/Gemfile.lock +55 -0
  11. data/LICENSE +19 -0
  12. data/README.md +51 -0
  13. data/Rakefile +11 -0
  14. data/beyond_api.gemspec +31 -0
  15. data/bin/console +18 -0
  16. data/bin/setup +8 -0
  17. data/lib/beyond_api.rb +37 -0
  18. data/lib/beyond_api/connection.rb +30 -0
  19. data/lib/beyond_api/ext.rb +43 -0
  20. data/lib/beyond_api/request.rb +55 -0
  21. data/lib/beyond_api/resources/base.rb +17 -0
  22. data/lib/beyond_api/resources/carts.rb +547 -0
  23. data/lib/beyond_api/resources/categories.rb +168 -0
  24. data/lib/beyond_api/resources/categories_view.rb +142 -0
  25. data/lib/beyond_api/resources/checkout_settings.rb +48 -0
  26. data/lib/beyond_api/resources/newsletter_target.rb +97 -0
  27. data/lib/beyond_api/resources/order_settings.rb +80 -0
  28. data/lib/beyond_api/resources/orders.rb +968 -0
  29. data/lib/beyond_api/resources/payment_methods.rb +192 -0
  30. data/lib/beyond_api/resources/product_attribute_definitions.rb +109 -0
  31. data/lib/beyond_api/resources/product_settings.rb +28 -0
  32. data/lib/beyond_api/resources/products.rb +245 -0
  33. data/lib/beyond_api/resources/products/attachments.rb +119 -0
  34. data/lib/beyond_api/resources/products/availability.rb +177 -0
  35. data/lib/beyond_api/resources/products/custom_attributes.rb +141 -0
  36. data/lib/beyond_api/resources/products/images.rb +165 -0
  37. data/lib/beyond_api/resources/products/searches.rb +52 -0
  38. data/lib/beyond_api/resources/products/variation_properties.rb +87 -0
  39. data/lib/beyond_api/resources/products_view.rb +158 -0
  40. data/lib/beyond_api/resources/scopes.rb +31 -0
  41. data/lib/beyond_api/resources/script_tags.rb +122 -0
  42. data/lib/beyond_api/resources/shipping_zones.rb +324 -0
  43. data/lib/beyond_api/resources/shop.rb +561 -0
  44. data/lib/beyond_api/resources/signers.rb +63 -0
  45. data/lib/beyond_api/resources/token.rb +41 -0
  46. data/lib/beyond_api/resources/users.rb +376 -0
  47. data/lib/beyond_api/resources/variations.rb +145 -0
  48. data/lib/beyond_api/resources/variations/availability.rb +105 -0
  49. data/lib/beyond_api/resources/webhook_subscriptions.rb +176 -0
  50. data/lib/beyond_api/session.rb +121 -0
  51. data/lib/beyond_api/utils.rb +51 -0
  52. data/lib/beyond_api/version.rb +3 -0
  53. data/lib/generators/beyond_api/install_generator.rb +13 -0
  54. data/lib/generators/templates/beyond_api_initializer.rb +29 -0
  55. metadata +194 -0
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "beyond_api/utils"
4
+
5
+ module BeyondApi
6
+ module ProductAttachments
7
+
8
+ #
9
+ # A +POST+ request is used to list all the attachments of a product.
10
+ #
11
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/ecb997ce-79c3-4367-9373-058089a313e3/attachments' -i -X POST \
12
+ # -H 'Content-Type: application/hal+json' \
13
+ # -H 'Accept: application/hal+json' \
14
+ # -H 'Authorization: Bearer <Access token>' \
15
+ # -d '{
16
+ # "mimeType" : "application/pdf",
17
+ # "length" : 1,
18
+ # "label" : "Handbuch",
19
+ # "dataUri" : "my_document_1.pdf?hash=8a627f655c68f56dfbbf217ab7d5563281225666"
20
+ # }'
21
+ #
22
+ # @beyond_api.scopes +prod:u+
23
+ #
24
+ # @param product_id [String] the product UUID
25
+ # @option params [Integer] :size the page size
26
+ # @option params [Integer] :page the page number
27
+ #
28
+ # @return [OpenStruct]
29
+ #
30
+ # @example
31
+ # body = {
32
+ # "mimeType" => "application/pdf",
33
+ # "length" => 1,
34
+ # "label" => "Handbuch",
35
+ # "dataUri" => "my_document_1.pdf?hash=8a627f655c68f56dfbbf217ab7d5563281225666"
36
+ # }
37
+ # @attachment = session.products.add_attachment("fd60a63e-c4c0-496d-af49-c4ed224cca2a", body)
38
+ #
39
+ def add_attachment(product_id, body)
40
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/attachments", body)
41
+
42
+ handle_response(response, status)
43
+ end
44
+
45
+ #
46
+ # A +GET+ request is used to retrieve a single attachment of a product.
47
+ #
48
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/eb11b53a-5017-4ae7-9ba1-c02c12c80b61/attachments/36933722-f13f-4ee2-858c-0835ae0a884e' -i -X GET \
49
+ # -H 'Content-Type: application/hal+json' \
50
+ # -H 'Accept: application/hal+json' \
51
+ # -H 'Authorization: Bearer <Access token>'
52
+ #
53
+ # @beyond_api.scopes +prod:r+
54
+ #
55
+ # @param product_id [String] the product UUID
56
+ # @param attachment_id [String] the attachment UUID
57
+ #
58
+ # @return [OpenStruct]
59
+ #
60
+ # @example
61
+ # @attachment = session.products.attachment("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "36933722-f13f-4ee2-858c-0835ae0a884e")
62
+ #
63
+ def attachment(product_id, attachment_id)
64
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/attachments/#{attachment_id}")
65
+
66
+ handle_response(response, status)
67
+ end
68
+
69
+ #
70
+ # A +GET+ request is used to list all the attachments of a product.
71
+ #
72
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/fd60a63e-c4c0-496d-af49-c4ed224cca2a/attachments' -i -X GET \
73
+ # -H 'Content-Type: application/hal+json' \
74
+ # -H 'Accept: application/hal+json' \
75
+ # -H 'Authorization: Bearer <Access token>'
76
+ #
77
+ # @beyond_api.scopes +prod:r+
78
+ #
79
+ # @param product_id [String] the product UUID
80
+ # @option params [Integer] :size the page size
81
+ # @option params [Integer] :page the page number
82
+ #
83
+ # @return [OpenStruct]
84
+ #
85
+ # @example
86
+ # @attachments = session.products.attachments("fd60a63e-c4c0-496d-af49-c4ed224cca2a", size: 100, page: 0)
87
+ #
88
+ def attachments(product_id, params)
89
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/attachments", params)
90
+
91
+ handle_response(response, status)
92
+ end
93
+
94
+ #
95
+ # A +DELETE+ request is used to delete a product attachment
96
+ #
97
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/00add006-beaa-46fe-bb73-f8ebae15082d/attachments/9a44e585-571a-4253-9248-54a4c418c7e2' -i -X DELETE \
98
+ # -H 'Content-Type: application/hal+json' \
99
+ # -H 'Accept: application/hal+json' \
100
+ # -H 'Authorization: Bearer <Access token>'
101
+ #
102
+ # @beyond_api.scopes +prod:u+
103
+ #
104
+ # @param product_id [String] the product UUID
105
+ # @param attachment_id [String] the attachment UUID
106
+ #
107
+ # @return [true]
108
+ #
109
+ # @example
110
+ # session.products.delete_attachment("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "36933722-f13f-4ee2-858c-0835ae0a884e")
111
+ #
112
+ def delete_attachment(product_id, attachment_id)
113
+ response, status = BeyondApi::Request.delete(@session, "/products/#{product_id}/attachments/#{attachment_id}")
114
+
115
+ handle_response(response, status, respond_with_true: true)
116
+ end
117
+
118
+ end
119
+ end
@@ -0,0 +1,177 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "beyond_api/utils"
4
+
5
+ module BeyondApi
6
+ module ProductAvailability
7
+
8
+ #
9
+ # A +POST+ request is used to adjust the available stock of a product.
10
+ #
11
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/685f483e-cdda-40af-8091-d5bc31249409/availability/adjust-available-stock' -i -X POST \
12
+ # -H 'Content-Type: application/json' \
13
+ # -H 'Accept: application/hal+json' \
14
+ # -H 'Authorization: Bearer <Access token>' \
15
+ # -d '{ "relativeAmount" : -1 }'
16
+ #
17
+ # @beyond_api.scopes +prda:u+
18
+ #
19
+ # @param product_id [String] the product UUID
20
+ #
21
+ # @return [OpenStruct]
22
+ #
23
+ # @example
24
+ # @availability = session.products.adjust_stock_level(product_id, { relativeAmount => -1 })
25
+ #
26
+ def adjust_stock_level(product_id, body)
27
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/enable-stock-management", body)
28
+
29
+ handle_response(response, status)
30
+ end
31
+
32
+ #
33
+ # A +GET+ request is used to retrieve the availability of a product.
34
+ #
35
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/fb22d408-00dc-47e3-ae58-e35769bdb428/availability' -i -X GET \
36
+ # -H 'Content-Type: application/json' \
37
+ # -H 'Accept: application/hal+json' \
38
+ # -H 'Authorization: Bearer <Access token>'
39
+ #
40
+ # @beyond_api.scopes +prda:r+
41
+ #
42
+ # @param product_id [String] the product UUID
43
+ #
44
+ # @return [OpenStruct]
45
+ #
46
+ # @example
47
+ # @availability = session.products.availability("fb22d408-00dc-47e3-ae58-e35769bdb428")
48
+ #
49
+ def availability(product_id)
50
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/availability")
51
+
52
+ handle_response(response, status)
53
+ end
54
+
55
+ #
56
+ # A +POST+ request is used to disable purchasability for a product.
57
+ #
58
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/6b30255e-650f-475c-b345-e7247f957689/availability/disable-purchasability' -i -X POST \
59
+ # -H 'Content-Type: application/json' \
60
+ # -H 'Accept: application/hal+json' \
61
+ # -H 'Authorization: Bearer <Access token>'
62
+ #
63
+ # @beyond_api.scopes +prda:u+
64
+ #
65
+ # @param product_id [String] the product UUID
66
+ #
67
+ # @return true
68
+ #
69
+ # @example
70
+ # session.products.disable_purchasability("17e3a92b-6f3b-4415-bd8f-c9c8921a5a73")
71
+ #
72
+ def disable_purchasability(product_id)
73
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/disable-purchasability")
74
+
75
+ handle_response(response, status, respond_with_true: true)
76
+ end
77
+
78
+ #
79
+ # A +POST+ request is used to disable stock management for a product or variation product.
80
+ #
81
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/e966cb17-4047-4b82-ade4-33e7f0978c89/availability/disable-stock-management' -i -X POST \
82
+ # -H 'Content-Type: application/json' \
83
+ # -H 'Accept: application/hal+json' \
84
+ # -H 'Authorization: Bearer <Access token>'
85
+ #
86
+ # @beyond_api.scopes +prda:u+
87
+ #
88
+ # @param product_id [String] the product UUID
89
+ #
90
+ # @return true
91
+ #
92
+ # @example
93
+ # session.products.disable_stock_management("e966cb17-4047-4b82-ade4-33e7f0978c89", respond_with_true: true)
94
+ #
95
+ def disable_stock_management(product_id)
96
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/disable-stock-management")
97
+
98
+ handle_response(response, status, respond_with_true: true)
99
+ end
100
+
101
+ #
102
+ # A +POST+ request is used to enable purchasability for a product.
103
+ #
104
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/17e3a92b-6f3b-4415-bd8f-c9c8921a5a73/availability/enable-purchasability' -i -X POST \
105
+ # -H 'Content-Type: application/json' \
106
+ # -H 'Accept: application/hal+json' \
107
+ # -H 'Authorization: Bearer <Access token>'
108
+ #
109
+ # @beyond_api.scopes +prda:u+
110
+ #
111
+ # @param product_id [String] the product UUID
112
+ #
113
+ # @return true
114
+ #
115
+ # @example
116
+ # session.products.enable_purchasability("17e3a92b-6f3b-4415-bd8f-c9c8921a5a73")
117
+ #
118
+ def enable_purchasability(product_id)
119
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/enable-purchasability")
120
+
121
+ handle_response(response, status, respond_with_true: true)
122
+ end
123
+
124
+ #
125
+ # A +POST+ request is used to enable stock management for a product or variation product.
126
+ #
127
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/101fa968-9bb8-4dbe-b166-3add1fc1b35e/availability/enable-stock-management' -i -X POST \
128
+ # -H 'Content-Type: application/json' \
129
+ # -H 'Accept: application/hal+json' \
130
+ # -H 'Authorization: Bearer <Access token>' \
131
+ # -d '{ "initialAvailableStock" : 100, "stockThreshold" : 2 }'
132
+ #
133
+ # @beyond_api.scopes +prda:u+
134
+ #
135
+ # @param product_id [String] the product UUID
136
+ # @param body [Hash] the request body
137
+ #
138
+ # @return [OpenStruct]
139
+ #
140
+ # @example
141
+ # body = {
142
+ # "initialAvailableStock" => 100,
143
+ # "stockThreshold" => 2
144
+ # }
145
+ # @availability = session.products.enable_stock_management("101fa968-9bb8-4dbe-b166-3add1fc1b35e", body)
146
+ #
147
+ def enable_stock_management(product_id, body)
148
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/enable-stock-management", body)
149
+
150
+ handle_response(response, status)
151
+ end
152
+
153
+ #
154
+ # A +POST+ request is used to update the reserve stock by changing the +stockThreshold+ value of a product or variation product (incl. all of its variations). Reserve stock refers to an inventory level that indicates that a product needs to be reordered.
155
+ #
156
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/f74b5f57-43cc-4176-97aa-c6eb9fdeb37c/availability/update-stock-threshold' -i -X POST \
157
+ # -H 'Content-Type: application/json' \
158
+ # -H 'Accept: application/hal+json' \
159
+ # -H 'Authorization: Bearer <Access token>' \
160
+ # -d '{ "stockThreshold" : 5 }'
161
+ #
162
+ # @beyond_api.scopes +prda:u+
163
+ #
164
+ # @param product_id [String] the product UUID
165
+ #
166
+ # @return [OpenStruct]
167
+ #
168
+ # @example
169
+ # session.products.update_reserve_stock("f74b5f57-43cc-4176-97aa-c6eb9fdeb37c", { stockThreshold => 5 })
170
+ #
171
+ def update_reserve_stock(product_id, body)
172
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/availability/update-stock-threshold", body)
173
+
174
+ handle_response(response, status)
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,141 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "beyond_api/utils"
4
+
5
+ module BeyondApi
6
+ module ProductCustomAttribute
7
+
8
+ #
9
+ # A +POST+ request is used to create a product attribute, which defines the value of a certain {product attribute definition}[http://docs.beyondshop.cloud/#resources-product-attribute-definitions] for a specific {product}[http://docs.beyondshop.cloud/#resources-products].
10
+ #
11
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/0c0e1699-d2a4-44d0-bed9-64b2fa1a7713/attributes' -i -X POST \
12
+ # -H 'Content-Type: application/json' \
13
+ # -H 'Authorization: Bearer <Access token>' \
14
+ # -d '{
15
+ # "key" : "colour",
16
+ # "value" : "Yellow"
17
+ # }'
18
+ #
19
+ # @beyond_api.scopes +prat:c+
20
+ #
21
+ # @param product_id [String] the product UUID
22
+ # @param body [Hash] the request body
23
+ #
24
+ # @return [OpenStruct]
25
+ #
26
+ # @example
27
+ # body = {
28
+ # "key" => "colour",
29
+ # "value" => "Yellow"
30
+ # }
31
+ #
32
+ # @custom_attribute = session.products.attachment("fd60a63e-c4c0-496d-af49-c4ed224cca2a", body)
33
+ #
34
+ def create_custom_attribute(product_id, body)
35
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/attributes", body)
36
+
37
+ handle_response(response, status)
38
+ end
39
+
40
+ #
41
+ # A +GET+ request is used to retrieve detailed information about a specific product attribute.
42
+ #
43
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/d389347c-568e-4785-8216-91e4f8850c66/attributes/key' -i -X GET \
44
+ # -H 'Content-Type: application/json' \
45
+ # -H 'Authorization: Bearer <Access token>'
46
+ #
47
+ # @beyond_api.scopes +prat:r+
48
+ #
49
+ # @param product_id [String] the product UUID
50
+ # @param attribute_name [String] the key of custom attribute
51
+ #
52
+ # @return [OpenStruct]
53
+ #
54
+ # @example
55
+ #
56
+ # @custom_attribute = session.products.custom_attribute("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "key")
57
+ #
58
+ def custom_attribute(product_id, attribute_name)
59
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/attributes/#{attribute_name}")
60
+
61
+ handle_response(response, status)
62
+ end
63
+
64
+ #
65
+ # A +GET+ request is used to retrieve all product attributes for a product.
66
+ #
67
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/57f0ef04-9dac-462f-9dd4-606f7551cc7b/attributes' -i -X GET \
68
+ # -H 'Content-Type: application/json' \
69
+ # -H 'Authorization: Bearer <Access token>'
70
+ #
71
+ # @beyond_api.scopes +prat:r+
72
+ #
73
+ # @param product_id [String] the product UUID
74
+ #
75
+ # @return [OpenStruct]
76
+ #
77
+ # @example
78
+ #
79
+ # @custom_attributes = session.products.custom_attributes("fd60a63e-c4c0-496d-af49-c4ed224cca2a")
80
+ #
81
+ def custom_attributes(product_id)
82
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/attributes")
83
+
84
+ handle_response(response, status)
85
+ end
86
+
87
+ #
88
+ # A +DELETE+ request is used to delete a product attribute.
89
+ #
90
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/fec3b6f3-83d0-467a-abc5-d51019e57b51/attributes/farbe' -i -X DELETE \
91
+ # -H 'Authorization: Bearer <Access token>'
92
+ #
93
+ # @beyond_api.scopes +prat:d+
94
+ #
95
+ # @param product_id [String] the product UUID
96
+ # @param attribute_name [String] the key of custom attribute
97
+ #
98
+ # @return [OpenStruct]
99
+ #
100
+ # @example
101
+ #
102
+ # session.products.custom_attribute("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "key")
103
+ #
104
+ def delete_custom_attribute(product_id, attribute_name)
105
+ response, status = BeyondApi::Request.delete(@session, "/products/#{product_id}/attributes/#{attribute_name}")
106
+
107
+ handle_response(response, status, respond_with_true: true)
108
+ end
109
+
110
+ #
111
+ # A +PUT+ request is used to update the value of a product attribute. If the specified product attribute doesn’t exist, it will be created with the response as described in {Create product attribute}[http://docs.beyondshop.cloud/#resources-product-attribute-create].
112
+ #
113
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/82ed44e9-664d-47c0-8b07-09adecfdbf20/attributes/key' -i -X PUT \
114
+ # -H 'Content-Type: application/json' \
115
+ # -H 'Authorization: Bearer <Access token>' \
116
+ # -d '{
117
+ # "value" : "green"
118
+ # }'
119
+ #
120
+ # @beyond_api.scopes +prat:u+
121
+ #
122
+ # @param product_id [String] the product UUID
123
+ # @param attribute_name [String] the key of custom attribute
124
+ # @param body [Hash] the request body
125
+ #
126
+ # @return [OpenStruct]
127
+ #
128
+ # @example
129
+ # body = {
130
+ # "value" : "green"
131
+ # }
132
+ #
133
+ # @custom_attribute = session.products.update_custom_attribute("fd60a63e-c4c0-496d-af49-c4ed224cca2a", "key", body)
134
+ #
135
+ def update_custom_attribute(product_id, attribute_name, body)
136
+ response, status = BeyondApi::Request.put(@session, "/products/#{product_id}/attributes/#{attribute_name}", body)
137
+
138
+ handle_response(response, status)
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,165 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "beyond_api/utils"
4
+
5
+ module BeyondApi
6
+ module ProductImages
7
+
8
+
9
+ # A +POST+ request is used to create an image and add it to a product.
10
+ #
11
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/7a7d1f18-f760-46a9-b794-dbe5a88c6b44/images' -i -X POST \
12
+ # -H 'Content-Type: application/hal+json' \
13
+ # -H 'Accept: application/hal+json' \
14
+ # -H 'Authorization: Bearer <Access token>' \
15
+ # -d '{
16
+ # "dataUri" : "photostore-2.JPG?hash=8a627f655c68f56dfbbf217ab7d5563281225998"
17
+ # }'
18
+ #
19
+ # @beyond_api.scopes +prod:u+
20
+ #
21
+ # @param product_id [String] the product UUID
22
+ # @param image_uri [String] the image url
23
+ #
24
+ # @return [OpenStruct]
25
+ #
26
+ # @example
27
+ # @image = session.products.add_image(product_id, { dataUri: "photostore-2.JPG?hash=8a627f655c68f56dfbbf217ab7d5563281225998" })
28
+ #
29
+ def add_image(product_id, image_uri)
30
+ response, status = BeyondApi::Request.post(@session, "/products/#{product_id}/images", { dataUri: image_uri})
31
+
32
+ handle_response(response, status)
33
+ end
34
+
35
+ #
36
+ # A +DELETE+ request is used to delete a product image.
37
+ #
38
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/8f5e979e-4a47-47ca-84ce-7c026d623974/images/ac318d53-df29-4f43-9356-d91aed8bdb39' -i -X DELETE \
39
+ # -H 'Content-Type: application/hal+json' \
40
+ # -H 'Accept: application/hal+json' \
41
+ # -H 'Authorization: Bearer <Access token>'
42
+ #
43
+ # @beyond_api.scopes +prod:u+
44
+ #
45
+ # @param product_id [String] the product UUID
46
+ # @param image_id [String] the image UUID
47
+ #
48
+ # @return true
49
+ #
50
+ # @example
51
+ # session.products.delete_image("8f5e979e-4a47-47ca-84ce-7c026d623974", "ac318d53-df29-4f43-9356-d91aed8bdb39")
52
+ #
53
+ def delete_image(product_id, image_id)
54
+ response, status = BeyondApi::Request.delete(@session, "/products/#{product_id}/images/#{image_id}")
55
+
56
+ handle_response(response, status, respond_with_true: true)
57
+ end
58
+
59
+ #
60
+ # A +GET+ request is used to retrieve the images of a product.
61
+ #
62
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/7f32696a-df56-4380-a91b-fffb97f025b4/images' -i -X GET \
63
+ # -H 'Content-Type: application/hal+json' \
64
+ # -H 'Accept: application/hal+json' \
65
+ # -H 'Authorization: Bearer <Access token>'
66
+ #
67
+ # @beyond_api.scopes +prod:r+
68
+ #
69
+ # @param product_id [String] the product UUID
70
+ # @option params [Integer] :size the page size
71
+ # @option params [Integer] :page the page number
72
+ #
73
+ # @return [OpenStruct]
74
+ #
75
+ # @example
76
+ # @products = session.products.images("7f32696a-df56-4380-a91b-fffb97f025b4", { size: 20, page: 0 })
77
+ #
78
+ def images(product_id, params = {})
79
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/images", params)
80
+
81
+ handle_response(response, status)
82
+ end
83
+
84
+ # A +GET+ request is used to retrieve a single image of a product.
85
+ #
86
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/124c5c94-4e62-410a-8599-e5b29dae3491/images/715f5154-9fde-4213-bcab-41ceaaf8b70e' -i -X GET \
87
+ # -H 'Content-Type: application/hal+json' \
88
+ # -H 'Accept: application/hal+json' \
89
+ # -H 'Authorization: Bearer <Access token>'
90
+ #
91
+ # @beyond_api.scopes +prod:r+
92
+ #
93
+ # @param product_id [String] the product UUID
94
+ # @param image_id [String] the image UUID
95
+ #
96
+ # @return [OpenStruct]
97
+ #
98
+ # @example
99
+ # @image = session.products.image("124c5c94-4e62-410a-8599-e5b29dae3491", "715f5154-9fde-4213-bcab-41ceaaf8b70e")
100
+ #
101
+ def image(product_id, image_id)
102
+ response, status = BeyondApi::Request.get(@session, "/products/#{product_id}/images/#{image_id}")
103
+
104
+ handle_response(response, status)
105
+ end
106
+
107
+ # A +PUT+ request is used to assign a product image as the default image. The request contains a single URI of the image to assign.
108
+ #
109
+ # $ curl 'https://api-shop.beyondshop.cloud/api/products/150015b9-0b9b-45a2-bcfb-f9006b16a8b8/default-image' -i -X PUT \
110
+ # -H 'Content-Type: text/uri-list' \
111
+ # -H 'Accept: application/json' \
112
+ # -H 'Authorization: Bearer <Access token>' \
113
+ # -d 'http://localhost/products/images/8ef3591c-d05f-4aa1-acf6-950ba51ec4f7'
114
+ #
115
+ # @beyond_api.scopes +prod:u+
116
+ #
117
+ # @param product_id [String] the product UUID
118
+ # @param image_id [String] the image UUID
119
+ #
120
+ # @return true
121
+ #
122
+ # @example
123
+ # session.products.set_image_as_default("150015b9-0b9b-45a2-bcfb-f9006b16a8b8", "8ef3591c-d05f-4aa1-acf6-950ba51ec4f7")
124
+ #
125
+ def set_image_as_default(product_id, image_id)
126
+ response, status = BeyondApi::Request.put(@session, "/products/#{product_id}",
127
+ "#{@session.api_url}/productsimages/#{image_id}")
128
+
129
+ handle_response(response, status, respond_with_true: true)
130
+ end
131
+
132
+ # A +POST+ request is used to upload an image and add it to a product. The body of the request must contain the content of the image.
133
+ #
134
+ # $ curl --data-binary '@/home/epages/file.png' 'https://api-shop.beyondshop.cloud/api/products/4125b993-49fc-47c8-b9b3-76d8871e4e06/images?fileName=file.png' -X POST \
135
+ # -H 'Content-Type: image/png' \
136
+ # -H 'Authorization: Bearer <Access token>'
137
+ #
138
+ # @beyond_api.scopes +prod:u+
139
+ #
140
+ # @param product_id [String] the product UUID
141
+ # @param image_path [String] the image path
142
+ # @param image_name [String] the image name
143
+ #
144
+ # @return true
145
+ #
146
+ # @example
147
+ # session.products.upload_image("4125b993-49fc-47c8-b9b3-76d8871e4e06", "/home/epages/file.png", "file.png")
148
+ #
149
+ def upload_image(product_id, image_path, image_name)
150
+ content_type = case File.extname(image_path)
151
+ when ".png"
152
+ "image/png"
153
+ when ".jpg", ".jpeg"
154
+ "image/jpeg"
155
+ when ".gif"
156
+ "image/gif"
157
+ end
158
+ image_binary = File.binread(image_path)
159
+
160
+ response, status = BeyondApi::Request.upload(@session, "/products/#{product_id}/images", image_binary, content_type, { file_name: image_name })
161
+
162
+ handle_response(response, status, respond_with_true: true)
163
+ end
164
+ end
165
+ end