spree_api_v2 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +2 -0
  4. data/CHANGELOG.md +38 -0
  5. data/Gemfile +13 -0
  6. data/LICENSE +26 -0
  7. data/README.md +98 -0
  8. data/Rakefile +37 -0
  9. data/app/controllers/concerns/spree/api/v2/renderable.rb +51 -0
  10. data/app/controllers/spree/api/v2/base_controller.rb +31 -0
  11. data/app/controllers/spree/api/v2/children_controller.rb +29 -0
  12. data/app/controllers/spree/api/v2/countries_controller.rb +21 -0
  13. data/app/controllers/spree/api/v2/images_controller.rb +29 -0
  14. data/app/controllers/spree/api/v2/line_items_controller.rb +36 -0
  15. data/app/controllers/spree/api/v2/option_types_controller.rb +31 -0
  16. data/app/controllers/spree/api/v2/option_values_controller.rb +29 -0
  17. data/app/controllers/spree/api/v2/orders_controller.rb +11 -0
  18. data/app/controllers/spree/api/v2/prices_controller.rb +27 -0
  19. data/app/controllers/spree/api/v2/products_controller.rb +37 -0
  20. data/app/controllers/spree/api/v2/states_controller.rb +29 -0
  21. data/app/controllers/spree/api/v2/taxonomies_controller.rb +21 -0
  22. data/app/controllers/spree/api/v2/taxons_controller.rb +40 -0
  23. data/app/controllers/spree/api/v2/variants_controller.rb +35 -0
  24. data/app/models/spree/base_decorator.rb +5 -0
  25. data/app/models/spree/image_decorator.rb +3 -0
  26. data/app/models/spree/price_decorator.rb +3 -0
  27. data/app/models/spree/state_decorator.rb +3 -0
  28. data/app/serializers/spree/address_serializer.rb +9 -0
  29. data/app/serializers/spree/base_serializer.rb +13 -0
  30. data/app/serializers/spree/country_serializer.rb +7 -0
  31. data/app/serializers/spree/error_serializer.rb +52 -0
  32. data/app/serializers/spree/image_serializer.rb +13 -0
  33. data/app/serializers/spree/line_item_serializer.rb +13 -0
  34. data/app/serializers/spree/option_type_serializer.rb +8 -0
  35. data/app/serializers/spree/option_value_serializer.rb +8 -0
  36. data/app/serializers/spree/order_serializer.rb +21 -0
  37. data/app/serializers/spree/price_serializer.rb +7 -0
  38. data/app/serializers/spree/product_serializer.rb +12 -0
  39. data/app/serializers/spree/role_serializer.rb +5 -0
  40. data/app/serializers/spree/state_serializer.rb +7 -0
  41. data/app/serializers/spree/store_serializer.rb +6 -0
  42. data/app/serializers/spree/taxon_serializer.rb +16 -0
  43. data/app/serializers/spree/taxonomy_serializer.rb +7 -0
  44. data/app/serializers/spree/user_serializer.rb +5 -0
  45. data/app/serializers/spree/variant_serializer.rb +12 -0
  46. data/bin/rails +7 -0
  47. data/circle.yml +13 -0
  48. data/config/locales/en.yml +25 -0
  49. data/config/routes.rb +53 -0
  50. data/docs/.nojekyll +0 -0
  51. data/docs/Dockerfile +12 -0
  52. data/docs/Gemfile +13 -0
  53. data/docs/README.md +12 -0
  54. data/docs/Rakefile +9 -0
  55. data/docs/config.rb +39 -0
  56. data/docs/font-selection.json +148 -0
  57. data/docs/source/fonts/slate.eot +0 -0
  58. data/docs/source/fonts/slate.svg +14 -0
  59. data/docs/source/fonts/slate.ttf +0 -0
  60. data/docs/source/fonts/slate.woff +0 -0
  61. data/docs/source/fonts/slate.woff2 +0 -0
  62. data/docs/source/images/logo.png +0 -0
  63. data/docs/source/images/navbar.png +0 -0
  64. data/docs/source/includes/_authentication.md +61 -0
  65. data/docs/source/includes/_countries.md +133 -0
  66. data/docs/source/includes/_errors.md +17 -0
  67. data/docs/source/includes/_filtering.md +11 -0
  68. data/docs/source/includes/_images.md +201 -0
  69. data/docs/source/includes/_line_items.md +137 -0
  70. data/docs/source/includes/_option_types.md +267 -0
  71. data/docs/source/includes/_option_values.md +227 -0
  72. data/docs/source/includes/_orders.md +75 -0
  73. data/docs/source/includes/_pagination.md +10 -0
  74. data/docs/source/includes/_prices.md +188 -0
  75. data/docs/source/includes/_products.md +403 -0
  76. data/docs/source/includes/_states.md +96 -0
  77. data/docs/source/includes/_taxonomies.md +325 -0
  78. data/docs/source/includes/_taxons.md +414 -0
  79. data/docs/source/includes/_variants.md +430 -0
  80. data/docs/source/index.md +53 -0
  81. data/docs/source/javascripts/all.js +4 -0
  82. data/docs/source/javascripts/all_nosearch.js +3 -0
  83. data/docs/source/javascripts/app/_lang.js +162 -0
  84. data/docs/source/javascripts/app/_search.js +74 -0
  85. data/docs/source/javascripts/app/_toc.js +55 -0
  86. data/docs/source/javascripts/lib/_energize.js +169 -0
  87. data/docs/source/javascripts/lib/_imagesloaded.min.js +7 -0
  88. data/docs/source/javascripts/lib/_jquery.highlight.js +108 -0
  89. data/docs/source/javascripts/lib/_jquery.tocify.js +1042 -0
  90. data/docs/source/javascripts/lib/_jquery_ui.js +566 -0
  91. data/docs/source/javascripts/lib/_lunr.js +1910 -0
  92. data/docs/source/layouts/layout.erb +102 -0
  93. data/docs/source/stylesheets/_icon-font.scss +38 -0
  94. data/docs/source/stylesheets/_normalize.css +427 -0
  95. data/docs/source/stylesheets/_syntax.scss.erb +27 -0
  96. data/docs/source/stylesheets/_variables.scss +109 -0
  97. data/docs/source/stylesheets/print.css.scss +142 -0
  98. data/docs/source/stylesheets/screen.css.scss +622 -0
  99. data/lib/solidus_api_v2.rb +5 -0
  100. data/lib/spree_api_v2.rb +4 -0
  101. data/lib/spree_api_v2/engine.rb +21 -0
  102. data/solidus_api_v2.gemspec +36 -0
  103. data/spec/controllers/spree/api/v2/children_controller_spec.rb +28 -0
  104. data/spec/controllers/spree/api/v2/countries_controller_spec.rb +25 -0
  105. data/spec/controllers/spree/api/v2/images_controller_spec.rb +93 -0
  106. data/spec/controllers/spree/api/v2/line_items_controller_spec.rb +86 -0
  107. data/spec/controllers/spree/api/v2/option_types_controller_spec.rb +73 -0
  108. data/spec/controllers/spree/api/v2/option_values_controller_spec.rb +88 -0
  109. data/spec/controllers/spree/api/v2/orders_controller_spec.rb +15 -0
  110. data/spec/controllers/spree/api/v2/prices_controller_spec.rb +55 -0
  111. data/spec/controllers/spree/api/v2/products_controller_spec.rb +95 -0
  112. data/spec/controllers/spree/api/v2/states_controller_spec.rb +42 -0
  113. data/spec/controllers/spree/api/v2/taxonomies_controller_spec.rb +31 -0
  114. data/spec/controllers/spree/api/v2/taxons_controller_spec.rb +54 -0
  115. data/spec/controllers/spree/api/v2/variants_controller_spec.rb +108 -0
  116. data/spec/models/spree/base_decorator_spec.rb +9 -0
  117. data/spec/models/spree/price_decorator_spec.rb +3 -0
  118. data/spec/serializers/spree/address_serializer_spec.rb +35 -0
  119. data/spec/serializers/spree/country_serializer_spec.rb +27 -0
  120. data/spec/serializers/spree/error_serializer_spec.rb +116 -0
  121. data/spec/serializers/spree/image_serializer_spec.rb +30 -0
  122. data/spec/serializers/spree/line_item_serializer_spec.rb +40 -0
  123. data/spec/serializers/spree/option_type_serializer_spec.rb +27 -0
  124. data/spec/serializers/spree/option_value_serializer_spec.rb +29 -0
  125. data/spec/serializers/spree/order_serializer_spec.rb +69 -0
  126. data/spec/serializers/spree/price_serializer_spec.rb +28 -0
  127. data/spec/serializers/spree/product_serializer_spec.rb +47 -0
  128. data/spec/serializers/spree/role_serializer_spec.rb +17 -0
  129. data/spec/serializers/spree/state_serializer_spec.rb +25 -0
  130. data/spec/serializers/spree/store_serializer_spec.rb +25 -0
  131. data/spec/serializers/spree/taxon_serializer_spec.rb +44 -0
  132. data/spec/serializers/spree/taxonomy_serializer_spec.rb +27 -0
  133. data/spec/serializers/spree/user_serializer_spec.rb +17 -0
  134. data/spec/serializers/spree/variant_serializer_spec.rb +55 -0
  135. data/spec/spec_helper.rb +51 -0
  136. data/spec/support/shoulda_matchers.rb +6 -0
  137. data/spree_api_v2.gemspec +36 -0
  138. metadata +437 -0
@@ -0,0 +1,75 @@
1
+ # Orders
2
+
3
+ ## Show Order
4
+
5
+ ```shell
6
+ curl "https://kabuni.com/api/v2/orders/:id"
7
+ -d token=abc123
8
+ ```
9
+
10
+ ```json
11
+ {
12
+ "data" : {
13
+ "attributes" : {
14
+ "additional_tax_total" : "0.0",
15
+ "adjustment_total" : "0.0",
16
+ "approved_at" : null,
17
+ "canceled_at" : null,
18
+ "channel" : "spree",
19
+ "completed_at" : "2015-09-08T04:04:01.162Z",
20
+ "confirmation_delivered" : false,
21
+ "considered_risky" : false,
22
+ "currency" : "CAD",
23
+ "display_additional_tax_total" : "$0.00 CAD",
24
+ "display_adjustment_total" : "$0.00 CAD",
25
+ "display_included_tax_total" : "$0.00 CAD",
26
+ "display_item_total" : "$10.00 CAD",
27
+ "display_promo_total" : "$0.00 CAD",
28
+ "display_shipment_total" : "$100.00 CAD",
29
+ "display_total" : "$110.00 CAD",
30
+ "email" : "spree@example.com",
31
+ "included_tax_total" : "0.0",
32
+ "item_count" : 0,
33
+ "item_total" : "10.0",
34
+ "number" : "#R123456789",
35
+ "payment_state" : null,
36
+ "payment_total" : "0.0",
37
+ "promo_total" : "0.0",
38
+ "shipment_state" : null,
39
+ "shipment_total" : "100.0",
40
+ "special_instructions" : null,
41
+ "state" : "complete",
42
+ "store_name" : "Example Store",
43
+ "total" : "110.0"
44
+ },
45
+ "relationships" : {
46
+ "bill_address" : {
47
+ "data" : {
48
+ "type" : "spree_addresses"
49
+ }
50
+ },
51
+ "line_items" : {
52
+ "data" : [
53
+ {
54
+ "type" : "spree_line_items"
55
+ }
56
+ ]
57
+ },
58
+ "ship_address" : {
59
+ "data" : {
60
+ "type" : "spree_addresses"
61
+ }
62
+ },
63
+ "user" : {
64
+ "data" : {
65
+ "type" : "spree_users"
66
+ }
67
+ }
68
+ },
69
+ "type" : "spree_orders"
70
+ }
71
+ }
72
+ ```
73
+
74
+ This will get an order via the id supplied.
75
+ Please note that you can ony access the orders that you own.
@@ -0,0 +1,10 @@
1
+ # Pagination
2
+
3
+ ```shell
4
+ curl "https://kabuni.com/api/v2/kitten?page[number]2&page[size]=20"
5
+ ```
6
+
7
+ This projects supports the [JSON API's `page` keyword](http://jsonapi.org/format/#fetching-pagination).
8
+ To specify the page number, set a `page[number]` value.
9
+ To specify the page size (the amount of records returned), set a `page[size]` value; the default is 24.
10
+ If you would like the links to the `self`, `next`, `prev`, `first`, and `last` it is not yet supported.
@@ -0,0 +1,188 @@
1
+ # Prices
2
+
3
+ ## List Prices
4
+
5
+ ```shell
6
+ curl "https://kabuni.com/api/v2/prices"
7
+ ```
8
+
9
+ ```json
10
+ {
11
+ "data": [
12
+ {
13
+ "id": "1",
14
+ "type": "spree_prices",
15
+ "attributes": {
16
+ "amount": "15.99",
17
+ "price": "15.99",
18
+ "display_amount": "$15.99 CAD",
19
+ "display_price": "$15.99 CAD",
20
+ "currency": "CAD"
21
+ },
22
+ "relationships": {
23
+ "variant": {
24
+ "data": {
25
+ "type": "spree_variants",
26
+ "id": "1"
27
+ }
28
+ }
29
+ }
30
+ }
31
+ ]
32
+ }
33
+ ```
34
+
35
+ List all of the prices in the database.
36
+
37
+ ## Show Price
38
+
39
+ ```shell
40
+ curl "https://kabuni.com/api/v2/prices/1"
41
+ ```
42
+
43
+ ```json
44
+ {
45
+ "data": {
46
+ "id": "1",
47
+ "type": "spree_prices",
48
+ "attributes": {
49
+ "amount": "15.99",
50
+ "price": "15.99",
51
+ "display_amount": "$15.99 CAD",
52
+ "display_price": "$15.99 CAD",
53
+ "currency": "CAD"
54
+ },
55
+ "relationships": {
56
+ "variant": {
57
+ "data": {
58
+ "type": "spree_variants",
59
+ "id": "1"
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ Fetch a price via its `id`.
68
+
69
+ ## Show Variant of a Price
70
+
71
+ ```shell
72
+ curl "https://kabuni.com/api/v2/prices/1/variant"
73
+ ```
74
+
75
+ ```json
76
+ {
77
+ "data": {
78
+ "id": "1",
79
+ "type": "spree_variants",
80
+ "attributes": {
81
+ "sku": "ROR-00011",
82
+ "weight": "0.0",
83
+ "height": "1.0",
84
+ "width": "3.0",
85
+ "depth": "2.0",
86
+ "is_master": true,
87
+ "position": 1,
88
+ "name": "Ruby on Rails Tote",
89
+ "price": "15.99",
90
+ "display_price" : "$15.99 CAD"
91
+ },
92
+ "relationships": {
93
+ "prices": {
94
+ "data": [
95
+ {
96
+ "type": "spree_prices",
97
+ "id": "1"
98
+ }
99
+ ]
100
+ },
101
+ "option_values": {
102
+ "data": [
103
+ {
104
+ "type": "spree_option_values",
105
+ "id": "1"
106
+ }
107
+ ]
108
+ },
109
+ "images": {
110
+ "data": [
111
+ {
112
+ "type": "spree_images",
113
+ "id": "1"
114
+ }
115
+ ]
116
+ },
117
+ "product": {
118
+ "data": {
119
+ "type": "spree_products",
120
+ "id": "1"
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ ```
127
+
128
+ Fetch the variant a price belongs to via the price's `id`.
129
+
130
+ ## Show Product of a Price
131
+
132
+ ```shell
133
+ curl "https://kabuni.com/api/v2/prices/1/product"
134
+ ```
135
+
136
+ ```json
137
+ {
138
+ "data": {
139
+ "id": "1",
140
+ "type": "spree_products",
141
+ "attributes": {
142
+ "name": "Ruby on Rails Tote",
143
+ "description": "Dolorem molestias sint maxime id at rem qui exercitationem. Neque voluptas corrupti magni suscipit iusto voluptatum. Ea quibusdam dolorem inventore praesentium sed dicta eveniet et. Rerum inventore laudantium quisquam earum consequatur dignissimos.",
144
+ "slug": "ruby-on-rails-tote",
145
+ "meta_description": null,
146
+ "meta_keywords": null,
147
+ "store_name": "Whole New Home"
148
+ },
149
+ "relationships": {
150
+ "master": {
151
+ "data": {
152
+ "type": "spree_variants",
153
+ "id": "1"
154
+ }
155
+ },
156
+ "variants": {
157
+ "data": []
158
+ },
159
+ "taxons": {
160
+ "data": [
161
+ {
162
+ "type": "spree_taxons",
163
+ "id": "18"
164
+ }
165
+ ]
166
+ },
167
+ "option_types": {
168
+ "data": [
169
+ {
170
+ "type": "spree_option_types",
171
+ "id": "1"
172
+ }
173
+ ]
174
+ },
175
+ "images": {
176
+ "data": [
177
+ {
178
+ "type": "spree_images",
179
+ "id": "1"
180
+ }
181
+ ]
182
+ }
183
+ }
184
+ }
185
+ }
186
+ ```
187
+
188
+ Fetch the product a price belongs to via the price's `id`.
@@ -0,0 +1,403 @@
1
+ # Products
2
+
3
+ ## List Products
4
+
5
+ ```shell
6
+ curl "https://kabuni.com/api/v2/products"
7
+ ```
8
+
9
+ ```json
10
+ {
11
+ "data": [
12
+ {
13
+ "id": "1",
14
+ "type": "spree_products",
15
+ "attributes": {
16
+ "name": "Ruby on Rails Tote",
17
+ "description": "Velit nemo odio ducimus nobis non doloremque beatae sunt. Totam quia voluptatum perferendis tempore sed voluptate consequuntur. Sit id corporis autem veritatis reprehenderit.",
18
+ "slug": "ruby-on-rails-tote",
19
+ "meta_description": null,
20
+ "meta_keywords": null,
21
+ "store_name": "Whole New Home"
22
+ },
23
+ "relationships": {
24
+ "master": {
25
+ "data": {
26
+ "type": "spree_variants",
27
+ "id": "1"
28
+ }
29
+ },
30
+ "variants": {
31
+ "data": []
32
+ },
33
+ "option_types": {
34
+ "data": [
35
+ {
36
+ "type": "spree_option_types",
37
+ "id": "1"
38
+ }
39
+ ]
40
+ },
41
+ "taxons": {
42
+ "data": [
43
+ {
44
+ "type": "spree_taxons",
45
+ "id": "1"
46
+ }
47
+ ]
48
+ }
49
+ },
50
+ "images": {
51
+ "data": [
52
+ {
53
+ "type": "spree_images",
54
+ "id": "1"
55
+ }
56
+ ]
57
+ }
58
+ }
59
+ ]
60
+ }
61
+ ```
62
+
63
+ List all of the products in the database.
64
+
65
+ ## Show Product
66
+
67
+ ```shell
68
+ curl "https://kabuni.com/api/v2/products/1"
69
+ ```
70
+
71
+ ```json
72
+ {
73
+ "data": {
74
+ "id": "1",
75
+ "type": "spree_products",
76
+ "attributes": {
77
+ "name": "Ruby on Rails Tote",
78
+ "description": "Velit nemo odio ducimus nobis non doloremque beatae sunt. Totam quia voluptatum perferendis tempore sed voluptate consequuntur. Sit id corporis autem veritatis reprehenderit.",
79
+ "slug": "ruby-on-rails-tote",
80
+ "meta_description": null,
81
+ "meta_keywords": null,
82
+ "store_name": "Whole New Home"
83
+ },
84
+ "relationships": {
85
+ "master": {
86
+ "data": {
87
+ "type": "spree_variants",
88
+ "id": "1"
89
+ }
90
+ },
91
+ "variants": {
92
+ "data": []
93
+ },
94
+ "taxons": {
95
+ "data": [
96
+ {
97
+ "type": "spree_taxons",
98
+ "id": "1"
99
+ }
100
+ ]
101
+ },
102
+ "option_types": {
103
+ "data": [
104
+ {
105
+ "type": "spree_option_types",
106
+ "id": "1"
107
+ }
108
+ ]
109
+ },
110
+ "images": {
111
+ "data": [
112
+ {
113
+ "type": "spree_images",
114
+ "id": "1"
115
+ }
116
+ ]
117
+ }
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ Select a product via it's `id`.
124
+
125
+ ## List Option Types of a Product
126
+
127
+ ```shell
128
+ curl "https://kabuni.com/api/v2/products/1/option_types"
129
+ ```
130
+
131
+ ```json
132
+ {
133
+ "data": [
134
+ {
135
+ "id": "1",
136
+ "type": "spree_option_types",
137
+ "attributes": {
138
+ "name": "tshirt-size",
139
+ "presentation": "Size",
140
+ "position": 1
141
+ },
142
+ "relationships": {
143
+ "option_values": {
144
+ "data": [
145
+ {
146
+ "type": "spree_option_values",
147
+ "id": "1"
148
+ }
149
+ ]
150
+ },
151
+ "products": {
152
+ "data": [
153
+ {
154
+ "type": "spree_products",
155
+ "id": "1"
156
+ }
157
+ ]
158
+ }
159
+ }
160
+ }
161
+ ]
162
+ }
163
+ ```
164
+
165
+ List all of the option types that a product owns via the product's `id`.
166
+
167
+ ## Show Option Type of a Product
168
+
169
+ ```shell
170
+ curl "https://kabuni.com/api/v2/products/1/option_types/1"
171
+ ```
172
+
173
+ ```json
174
+ {
175
+ "data": {
176
+ "id": "1",
177
+ "type": "spree_option_types",
178
+ "attributes": {
179
+ "name": "tshirt-size",
180
+ "presentation": "Size",
181
+ "position": 1
182
+ },
183
+ "relationships": {
184
+ "option_values": {
185
+ "data": [
186
+ {
187
+ "type": "spree_option_values",
188
+ "id": "1"
189
+ }
190
+ ]
191
+ },
192
+ "products": {
193
+ "data": [
194
+ {
195
+ "type": "spree_products",
196
+ "id": "1"
197
+ }
198
+ ]
199
+ }
200
+ }
201
+ }
202
+ }
203
+ ```
204
+
205
+ Fetch an option type of a product by both of their `id`s.
206
+
207
+ ## List Variants of a Product
208
+
209
+ ```shell
210
+ curl "https://kabuni.com/api/v2/products/1/variants"
211
+ ```
212
+
213
+ ```json
214
+ {
215
+ "data": [
216
+ {
217
+ "id": "1",
218
+ "type": "spree_variants",
219
+ "attributes": {
220
+ "sku": "ROR-00011",
221
+ "weight": "0.0",
222
+ "height": "1.0",
223
+ "width": "3.0",
224
+ "depth": "2.0",
225
+ "is_master": true,
226
+ "position": 1,
227
+ "name": "Ruby on Rails Tote",
228
+ "price": "15.99",
229
+ "display_price" : "$15.99 CAD"
230
+ },
231
+ "relationships": {
232
+ "prices": {
233
+ "data": [
234
+ {
235
+ "type": "spree_prices",
236
+ "id": "1"
237
+ }
238
+ ]
239
+ },
240
+ "option_values": {
241
+ "data": [
242
+ {
243
+ "type": "spree_option_values",
244
+ "id": "1"
245
+ }
246
+ ]
247
+ },
248
+ "images": {
249
+ "data": [
250
+ {
251
+ "type": "spree_images",
252
+ "id": "1"
253
+ }
254
+ ]
255
+ },
256
+ "product": {
257
+ "data": {
258
+ "type": "spree_products",
259
+ "id": "1"
260
+ }
261
+ }
262
+ }
263
+ }
264
+ ]
265
+ }
266
+ ```
267
+
268
+ List all variants including the master of a product by the products `id`.
269
+
270
+ ## Show Variant of a Product
271
+
272
+ ```shell
273
+ curl "https://kabuni.com/api/v2/products/1/variants/1"
274
+ ```
275
+
276
+ ```json
277
+ {
278
+ "data": {
279
+ "id": "1",
280
+ "type": "spree_variants",
281
+ "attributes": {
282
+ "sku": "ROR-00011",
283
+ "weight": "0.0",
284
+ "height": "1.0",
285
+ "width": "3.0",
286
+ "depth": "2.0",
287
+ "is_master": true,
288
+ "position": 1,
289
+ "name": "Ruby on Rails Tote",
290
+ "price": "15.99",
291
+ "display_price" : "$15.99 CAD"
292
+ },
293
+ "relationships": {
294
+ "prices": {
295
+ "data": [
296
+ {
297
+ "type": "spree_prices",
298
+ "id": "1"
299
+ }
300
+ ]
301
+ },
302
+ "option_values": {
303
+ "data": [
304
+ {
305
+ "type": "spree_option_values",
306
+ "id": "1"
307
+ }
308
+ ]
309
+ },
310
+ "images": {
311
+ "data": [
312
+ {
313
+ "type": "spree_images",
314
+ "id": "1"
315
+ }
316
+ ]
317
+ },
318
+ "product": {
319
+ "data": {
320
+ "type": "spree_products",
321
+ "id": "1"
322
+ }
323
+ }
324
+ }
325
+ }
326
+ }
327
+ ```
328
+
329
+ Fetch a variant or a product's master variant that a product owns by the products `id`.
330
+
331
+ ## List Images of a Product
332
+
333
+ ```shell
334
+ curl "https://kabuni.com/api/v2/products/1/images"
335
+ ```
336
+
337
+ ```json
338
+ {
339
+ "data": [
340
+ {
341
+ "id": "21",
342
+ "type": "spree_images",
343
+ "attributes": {
344
+ "position": 1,
345
+ "alt": null,
346
+ "links": {
347
+ "original": "/spree/products/21/original/ror_tote.jpeg?1442035828",
348
+ "mini": "/spree/products/21/mini/ror_tote.jpeg?1442035828",
349
+ "small": "/spree/products/21/small/ror_tote.jpeg?1442035828",
350
+ "product": "/spree/products/21/product/ror_tote.jpeg?1442035828",
351
+ "large": "/spree/products/21/large/ror_tote.jpeg?1442035828"
352
+ }
353
+ },
354
+ "relationships": {
355
+ "viewable": {
356
+ "data": {
357
+ "type": "spree_variants",
358
+ "id": "1"
359
+ }
360
+ }
361
+ }
362
+ }
363
+ ]
364
+ }
365
+ ```
366
+
367
+ List all of the images that belong to a product via the product's `id`.
368
+
369
+ ## Show Image of a Product
370
+
371
+ ```shell
372
+ curl "https://kabuni.com/api/v2/products/1/images/21"
373
+ ```
374
+
375
+ ```json
376
+ {
377
+ "data": {
378
+ "id": "21",
379
+ "type": "spree_images",
380
+ "attributes": {
381
+ "position": 1,
382
+ "alt": null,
383
+ "links": {
384
+ "original": "/spree/products/21/original/ror_tote.jpeg?1442035828",
385
+ "mini": "/spree/products/21/mini/ror_tote.jpeg?1442035828",
386
+ "small": "/spree/products/21/small/ror_tote.jpeg?1442035828",
387
+ "product": "/spree/products/21/product/ror_tote.jpeg?1442035828",
388
+ "large": "/spree/products/21/large/ror_tote.jpeg?1442035828"
389
+ }
390
+ },
391
+ "relationships": {
392
+ "viewable": {
393
+ "data": {
394
+ "type": "spree_variants",
395
+ "id": "1"
396
+ }
397
+ }
398
+ }
399
+ }
400
+ }
401
+ ```
402
+
403
+ Fetch an image of a product via the product and the images' `id`.