solidus_json_api 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +2 -0
  4. data/CHANGELOG.md +224 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +26 -0
  7. data/README.md +94 -0
  8. data/Rakefile +38 -0
  9. data/app/controllers/concerns/spree/api/v2/renderable.rb +63 -0
  10. data/app/controllers/spree/api/v2/base_controller.rb +9 -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 +21 -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/line_item_decorator.rb +3 -0
  27. data/app/models/spree/order_decorator.rb +3 -0
  28. data/app/models/spree/price_decorator.rb +3 -0
  29. data/app/models/spree/state_decorator.rb +3 -0
  30. data/app/serializers/spree/address_serializer.rb +9 -0
  31. data/app/serializers/spree/base_serializer.rb +13 -0
  32. data/app/serializers/spree/country_serializer.rb +7 -0
  33. data/app/serializers/spree/error_serializer.rb +55 -0
  34. data/app/serializers/spree/image_serializer.rb +13 -0
  35. data/app/serializers/spree/line_item_serializer.rb +13 -0
  36. data/app/serializers/spree/option_type_serializer.rb +8 -0
  37. data/app/serializers/spree/option_value_serializer.rb +8 -0
  38. data/app/serializers/spree/order_serializer.rb +20 -0
  39. data/app/serializers/spree/price_serializer.rb +7 -0
  40. data/app/serializers/spree/product_serializer.rb +12 -0
  41. data/app/serializers/spree/role_serializer.rb +5 -0
  42. data/app/serializers/spree/state_serializer.rb +7 -0
  43. data/app/serializers/spree/store_serializer.rb +6 -0
  44. data/app/serializers/spree/taxon_serializer.rb +16 -0
  45. data/app/serializers/spree/taxonomy_serializer.rb +7 -0
  46. data/app/serializers/spree/user_serializer.rb +5 -0
  47. data/app/serializers/spree/variant_serializer.rb +12 -0
  48. data/circle.yml +12 -0
  49. data/config/locales/en.yml +25 -0
  50. data/config/routes.rb +53 -0
  51. data/docs/.nojekyll +0 -0
  52. data/docs/Dockerfile +12 -0
  53. data/docs/Gemfile +14 -0
  54. data/docs/README.md +12 -0
  55. data/docs/Rakefile +9 -0
  56. data/docs/config.rb +39 -0
  57. data/docs/font-selection.json +148 -0
  58. data/docs/source/CNAME +1 -0
  59. data/docs/source/fonts/slate.eot +0 -0
  60. data/docs/source/fonts/slate.svg +14 -0
  61. data/docs/source/fonts/slate.ttf +0 -0
  62. data/docs/source/fonts/slate.woff +0 -0
  63. data/docs/source/fonts/slate.woff2 +0 -0
  64. data/docs/source/images/favicon.ico +0 -0
  65. data/docs/source/images/navbar.png +0 -0
  66. data/docs/source/includes/_countries.md +133 -0
  67. data/docs/source/includes/_errors.md +17 -0
  68. data/docs/source/includes/_filtering.md +11 -0
  69. data/docs/source/includes/_images.md +201 -0
  70. data/docs/source/includes/_line_items.md +143 -0
  71. data/docs/source/includes/_option_types.md +267 -0
  72. data/docs/source/includes/_option_values.md +227 -0
  73. data/docs/source/includes/_orders.md +150 -0
  74. data/docs/source/includes/_pagination.md +10 -0
  75. data/docs/source/includes/_prices.md +188 -0
  76. data/docs/source/includes/_products.md +407 -0
  77. data/docs/source/includes/_states.md +96 -0
  78. data/docs/source/includes/_taxonomies.md +325 -0
  79. data/docs/source/includes/_taxons.md +414 -0
  80. data/docs/source/includes/_variants.md +430 -0
  81. data/docs/source/index.md +51 -0
  82. data/docs/source/javascripts/all.js +4 -0
  83. data/docs/source/javascripts/all_nosearch.js +3 -0
  84. data/docs/source/javascripts/app/_lang.js +162 -0
  85. data/docs/source/javascripts/app/_search.js +74 -0
  86. data/docs/source/javascripts/app/_toc.js +55 -0
  87. data/docs/source/javascripts/lib/_energize.js +169 -0
  88. data/docs/source/javascripts/lib/_imagesloaded.min.js +7 -0
  89. data/docs/source/javascripts/lib/_jquery.highlight.js +108 -0
  90. data/docs/source/javascripts/lib/_jquery.tocify.js +1042 -0
  91. data/docs/source/javascripts/lib/_jquery_ui.js +566 -0
  92. data/docs/source/javascripts/lib/_lunr.js +1910 -0
  93. data/docs/source/layouts/layout.erb +110 -0
  94. data/docs/source/stylesheets/_icon-font.scss +38 -0
  95. data/docs/source/stylesheets/_normalize.css +427 -0
  96. data/docs/source/stylesheets/_syntax.scss.erb +27 -0
  97. data/docs/source/stylesheets/_variables.scss +109 -0
  98. data/docs/source/stylesheets/print.css.scss +142 -0
  99. data/docs/source/stylesheets/screen.css.scss +622 -0
  100. data/lib/solidus_json_api/config.rb +8 -0
  101. data/lib/solidus_json_api/engine.rb +21 -0
  102. data/lib/solidus_json_api.rb +5 -0
  103. data/solidus_json_api.gemspec +36 -0
  104. data/spec/controllers/spree/api/v2/base_controller_spec.rb +46 -0
  105. data/spec/controllers/spree/api/v2/children_controller_spec.rb +28 -0
  106. data/spec/controllers/spree/api/v2/countries_controller_spec.rb +25 -0
  107. data/spec/controllers/spree/api/v2/images_controller_spec.rb +91 -0
  108. data/spec/controllers/spree/api/v2/line_items_controller_spec.rb +101 -0
  109. data/spec/controllers/spree/api/v2/option_types_controller_spec.rb +71 -0
  110. data/spec/controllers/spree/api/v2/option_values_controller_spec.rb +88 -0
  111. data/spec/controllers/spree/api/v2/orders_controller_spec.rb +61 -0
  112. data/spec/controllers/spree/api/v2/prices_controller_spec.rb +55 -0
  113. data/spec/controllers/spree/api/v2/products_controller_spec.rb +99 -0
  114. data/spec/controllers/spree/api/v2/states_controller_spec.rb +42 -0
  115. data/spec/controllers/spree/api/v2/taxonomies_controller_spec.rb +31 -0
  116. data/spec/controllers/spree/api/v2/taxons_controller_spec.rb +54 -0
  117. data/spec/controllers/spree/api/v2/variants_controller_spec.rb +106 -0
  118. data/spec/lib/solidus_json_api/config_spec.rb +10 -0
  119. data/spec/models/spree/base_decorator_spec.rb +9 -0
  120. data/spec/models/spree/price_decorator_spec.rb +3 -0
  121. data/spec/serializers/spree/address_serializer_spec.rb +35 -0
  122. data/spec/serializers/spree/country_serializer_spec.rb +27 -0
  123. data/spec/serializers/spree/error_serializer_spec.rb +141 -0
  124. data/spec/serializers/spree/image_serializer_spec.rb +30 -0
  125. data/spec/serializers/spree/line_item_serializer_spec.rb +40 -0
  126. data/spec/serializers/spree/option_type_serializer_spec.rb +27 -0
  127. data/spec/serializers/spree/option_value_serializer_spec.rb +29 -0
  128. data/spec/serializers/spree/order_serializer_spec.rb +68 -0
  129. data/spec/serializers/spree/price_serializer_spec.rb +28 -0
  130. data/spec/serializers/spree/product_serializer_spec.rb +47 -0
  131. data/spec/serializers/spree/role_serializer_spec.rb +17 -0
  132. data/spec/serializers/spree/state_serializer_spec.rb +25 -0
  133. data/spec/serializers/spree/store_serializer_spec.rb +25 -0
  134. data/spec/serializers/spree/taxon_serializer_spec.rb +44 -0
  135. data/spec/serializers/spree/taxonomy_serializer_spec.rb +27 -0
  136. data/spec/serializers/spree/user_serializer_spec.rb +17 -0
  137. data/spec/serializers/spree/variant_serializer_spec.rb +55 -0
  138. data/spec/spec_helper.rb +57 -0
  139. data/spec/support/shoulda_matchers.rb +6 -0
  140. metadata +442 -0
@@ -0,0 +1,143 @@
1
+ # Line Items
2
+
3
+ ## Create Line Item
4
+
5
+ ```shell
6
+ curl "https://example.com/api/v2/line_items"
7
+ -X POST
8
+ -d token=abc123
9
+ -d data[attributes][order_id]=1
10
+ -d data[attributes][variant_id]=1
11
+ -d data[attributes][quantity]=1
12
+ ```
13
+
14
+ ```json
15
+ {
16
+ "data": {
17
+ "attributes": {
18
+ "additional_tax_total": "0",
19
+ "adjustment_total": "0.0",
20
+ "amount": "10.0",
21
+ "cost_price": "17.0",
22
+ "currency": "CAD",
23
+ "display_amount": "$10.00 CAD",
24
+ "display_price": "$10.00 CAD",
25
+ "display_total": "$10.00 CAD",
26
+ "order_id": 1,
27
+ "price": "10.0",
28
+ "quantity": 1,
29
+ "total": "10.0",
30
+ "variant_id": 1
31
+ },
32
+ "relationships": {
33
+ "order": {
34
+ "data": {
35
+ "type": "spree_orders"
36
+ }
37
+ },
38
+ "variant": {
39
+ "data": {
40
+ "type": "spree_variants"
41
+ }
42
+ }
43
+ },
44
+ "type": "spree_line_items"
45
+ }
46
+ }
47
+ ```
48
+
49
+ This endpoint allows you add a variant to a users order by creating a line item.
50
+
51
+ ### When Out of Range
52
+
53
+ > Quantity is out of range.
54
+
55
+ ```shell
56
+ curl "https://example.com/api/v2/line_items"
57
+ -X POST
58
+ -d token=abc123
59
+ -d data[attributes][order_id]=1
60
+ -d data[attributes][variant_id]=1
61
+ -d data[attributes][quantity]=100000000000
62
+ ```
63
+
64
+ ```json
65
+ {
66
+ "errors": [
67
+ {
68
+ "code": "400",
69
+ "detail": "Quantity is too High",
70
+ "meta": {},
71
+ "status": "Bad Request",
72
+ "title": "The quantity that you have submitted is astronomically high, please tone it down a bit."
73
+ }
74
+ ]
75
+ }
76
+ ```
77
+
78
+ When requesting an insanely large amount of variants to be added to your order, this will result in an error.
79
+
80
+ ### When a Variant or an Order Could Not be Found
81
+
82
+ > Order could not be found.
83
+
84
+ ```shell
85
+ curl "https://example.com/api/v2/line_items"
86
+ -X POST
87
+ -d token=abc123
88
+ -d data[attributes][order_id]=0
89
+ -d data[attributes][variant_id]=1
90
+ -d data[attributes][quantity]=1
91
+ ```
92
+
93
+ ```json
94
+ {
95
+ "errors": [
96
+ {
97
+ "code": "400",
98
+ "detail": "Record Not Found",
99
+ "meta": {},
100
+ "status": "Bad Request",
101
+ "title": "One of the records that you were looking for could not be found. Please check to see if the record exists or if you're permitted to read it"
102
+ }
103
+ ]
104
+ }
105
+ ```
106
+
107
+ Sometimes, you'll submit a bad variant id or order id.
108
+ When this happens, you'll receive an error because of it.
109
+
110
+ ### When the Product is Out of Stock
111
+
112
+ > Product is out of stock.
113
+
114
+ ```shell
115
+ curl "https://example.com/api/v2/line_items"
116
+ -X POST
117
+ -d token=abc123
118
+ -d data[attributes][order_id]=1
119
+ -d data[attributes][variant_id]=1
120
+ -d data[attributes][quantity]=1
121
+ ```
122
+
123
+ ```json
124
+ {
125
+ "errors": [
126
+ {
127
+ "code": "400",
128
+ "detail": "Product is out of Stock",
129
+ "meta": {},
130
+ "status": "Bad Request",
131
+ "title": "This product is out of stock for the selected quantity."
132
+ }
133
+ ]
134
+ }
135
+ ```
136
+
137
+ Sometimes, there's just not going to be any left in stock.
138
+ This can happen for both two reasons:
139
+
140
+ 1. The variant is tracking inventory and its stock items `count_on_hand`s have all reached 0.
141
+ 2. The variant is not backorderable.
142
+
143
+ If both of these conditions are met, then you will reveice an out of stock error.
@@ -0,0 +1,267 @@
1
+ # Option Types
2
+
3
+ ## List Option Types
4
+
5
+ ```shell
6
+ curl "https://example.com/api/v2/option_types"
7
+ ```
8
+
9
+ ```json
10
+ {
11
+ "data": [
12
+ {
13
+ "id": "1",
14
+ "type": "spree_option_types",
15
+ "attributes": {
16
+ "name": "tshirt-size",
17
+ "presentation": "Size",
18
+ "position": 1
19
+ },
20
+ "relationships": {
21
+ "option_values": {
22
+ "data": [
23
+ {
24
+ "type": "spree_option_values",
25
+ "id": "1"
26
+ }
27
+ ]
28
+ },
29
+ "products": {
30
+ "data": [
31
+ {
32
+ "type": "spree_products",
33
+ "id": "1"
34
+ }
35
+ ]
36
+ }
37
+ }
38
+ }
39
+ ]
40
+ }
41
+ ```
42
+
43
+ List all of the option types in the database.
44
+
45
+ ## Show Option Type
46
+
47
+ ```shell
48
+ curl "https://example.com/api/v2/option_types/1"
49
+ ```
50
+
51
+ ```json
52
+ {
53
+ "data": {
54
+ "id": "1",
55
+ "type": "spree_option_types",
56
+ "attributes": {
57
+ "name": "tshirt-size",
58
+ "presentation": "Size",
59
+ "position": 1
60
+ },
61
+ "relationships": {
62
+ "option_values": {
63
+ "data": [
64
+ {
65
+ "type": "spree_option_values",
66
+ "id": "1"
67
+ }
68
+ ]
69
+ },
70
+ "products": {
71
+ "data": [
72
+ {
73
+ "type": "spree_products",
74
+ "id": "1"
75
+ }
76
+ ]
77
+ }
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
83
+ Fetch an option type in the database.
84
+
85
+ ## List Option Values of a Option Type
86
+
87
+ ```shell
88
+ curl "https://example.com/api/v2/option_types/1/option_values"
89
+ ```
90
+
91
+ ```json
92
+ {
93
+ "data": [
94
+ {
95
+ "id": "1",
96
+ "type": "spree_option_values",
97
+ "attributes": {
98
+ "name": "Small",
99
+ "presentation": "S",
100
+ "position": 1
101
+ },
102
+ "relationships": {
103
+ "option_type": {
104
+ "data": {
105
+ "type": "spree_option_types",
106
+ "id": "1"
107
+ }
108
+ }
109
+ }
110
+ }
111
+ ]
112
+ }
113
+ ```
114
+
115
+ See all of the option values that an option type owns.
116
+
117
+ ## Show Option Values of a Option Type
118
+
119
+ ```shell
120
+ curl "https://example.com/api/v2/option_types/1/option_values/1"
121
+ ```
122
+
123
+ ```json
124
+ {
125
+ "data": {
126
+ "id": "1",
127
+ "type": "spree_option_values",
128
+ "attributes": {
129
+ "name": "Small",
130
+ "presentation": "S",
131
+ "position": 1
132
+ },
133
+ "relationships": {
134
+ "option_type": {
135
+ "data": {
136
+ "type": "spree_option_types",
137
+ "id": "1"
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ ```
144
+
145
+ Fetch an option value that an option type owns.
146
+
147
+ ## List Products of a Option Type
148
+
149
+ ```shell
150
+ curl "https://example.com/api/v2/option_types/1/products"
151
+ ```
152
+
153
+ ```json
154
+ {
155
+ "data": [
156
+ {
157
+ "id": "1",
158
+ "type": "spree_products",
159
+ "attributes": {
160
+ "name": "Ruby on Rails Tote",
161
+ "description": "Velit nemo odio ducimus nobis non doloremque beatae sunt. Totam quia voluptatum perferendis tempore sed voluptate consequuntur. Sit id corporis autem veritatis reprehenderit.",
162
+ "slug": "ruby-on-rails-tote",
163
+ "meta_description": null,
164
+ "meta_keywords": null,
165
+ "store_name": "Whole New Home"
166
+ },
167
+ "relationships": {
168
+ "master": {
169
+ "data": {
170
+ "type": "spree_variants",
171
+ "id": "1"
172
+ }
173
+ },
174
+ "variants": {
175
+ "data": []
176
+ },
177
+ "taxons": {
178
+ "data": [
179
+ {
180
+ "type": "spree_taxons",
181
+ "id": "1"
182
+ }
183
+ ]
184
+ },
185
+ "option_types": {
186
+ "data": [
187
+ {
188
+ "type": "spree_option_types",
189
+ "id": "1"
190
+ }
191
+ ]
192
+ },
193
+ "images": {
194
+ "data": [
195
+ {
196
+ "type": "spree_images",
197
+ "id": "1"
198
+ }
199
+ ]
200
+ }
201
+ }
202
+ }
203
+ ]
204
+ }
205
+ ```
206
+
207
+ See all of the products that an option type owns.
208
+
209
+ ## Show Product of a Option Type
210
+
211
+ ```shell
212
+ curl "https://example.com/api/v2/option_types/1/products/1"
213
+ ```
214
+
215
+ ```json
216
+ {
217
+ "data": {
218
+ "id": "1",
219
+ "type": "spree_products",
220
+ "attributes": {
221
+ "name": "Ruby on Rails Tote",
222
+ "description": "Velit nemo odio ducimus nobis non doloremque beatae sunt. Totam quia voluptatum perferendis tempore sed voluptate consequuntur. Sit id corporis autem veritatis reprehenderit.",
223
+ "slug": "ruby-on-rails-tote",
224
+ "meta_description": null,
225
+ "meta_keywords": null,
226
+ "store_name": "Whole New Home"
227
+ },
228
+ "relationships": {
229
+ "master": {
230
+ "data": {
231
+ "type": "spree_variants",
232
+ "id": "1"
233
+ }
234
+ },
235
+ "variants": {
236
+ "data": []
237
+ },
238
+ "taxons": {
239
+ "data": [
240
+ {
241
+ "type": "spree_taxons",
242
+ "id": "1"
243
+ }
244
+ ]
245
+ },
246
+ "option_types": {
247
+ "data": [
248
+ {
249
+ "type": "spree_option_types",
250
+ "id": "1"
251
+ }
252
+ ]
253
+ },
254
+ "images": {
255
+ "data": [
256
+ {
257
+ "type": "spree_images",
258
+ "id": "1"
259
+ }
260
+ ]
261
+ }
262
+ }
263
+ }
264
+ }
265
+ ```
266
+
267
+ Find a product that an option type owns.
@@ -0,0 +1,227 @@
1
+ # Option Values
2
+
3
+ ## List Option Values
4
+
5
+ ```shell
6
+ curl "https://example.com/api/v2/option_values"
7
+ ```
8
+
9
+ ```json
10
+ {
11
+ "data": [
12
+ {
13
+ "id": "1",
14
+ "type": "spree_option_values",
15
+ "attributes": {
16
+ "name": "Small",
17
+ "presentation": "S",
18
+ "position": 1
19
+ },
20
+ "relationships": {
21
+ "option_type": {
22
+ "data": {
23
+ "type": "spree_option_types",
24
+ "id": "1"
25
+ }
26
+ }
27
+ }
28
+ }
29
+ ]
30
+ }
31
+ ```
32
+
33
+ List all of the option values.
34
+
35
+ ## Show Option Value
36
+
37
+ ```shell
38
+ curl "https://example.com/api/v2/option_values/1"
39
+ ```
40
+
41
+ ```json
42
+ {
43
+ "data": {
44
+ "id": "1",
45
+ "type": "spree_option_values",
46
+ "attributes": {
47
+ "name": "Small",
48
+ "presentation": "S",
49
+ "position": 1
50
+ },
51
+ "relationships": {
52
+ "option_type": {
53
+ "data": {
54
+ "type": "spree_option_types",
55
+ "id": "1"
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ ```
62
+
63
+ Find an option value by its `id`.
64
+
65
+ ## Show Option Type of an Option Value
66
+
67
+ ```shell
68
+ curl "https://example.com/api/v2/option_values/1/option_type"
69
+ ```
70
+
71
+ ```json
72
+ {
73
+ "data": {
74
+ "id": "1",
75
+ "type": "spree_option_types",
76
+ "attributes": {
77
+ "name": "tshirt-size",
78
+ "presentation": "Size",
79
+ "position": 1
80
+ },
81
+ "relationships": {
82
+ "option_values": {
83
+ "data": [
84
+ {
85
+ "type": "spree_option_values",
86
+ "id": "1"
87
+ }
88
+ ]
89
+ },
90
+ "products": {
91
+ "data": [
92
+ {
93
+ "type": "spree_products",
94
+ "id": "1"
95
+ }
96
+ ]
97
+ }
98
+ }
99
+ }
100
+ }
101
+ ```
102
+
103
+ Find the option type of an option value by the option value's `id`.
104
+
105
+ ## List Variants of an Option Value
106
+
107
+ ```shell
108
+ curl "https://example.com/api/v2/option_values/1/variants"
109
+ ```
110
+
111
+ ```json
112
+ {
113
+ "data": [
114
+ {
115
+ "id": "1",
116
+ "type": "spree_variants",
117
+ "attributes": {
118
+ "sku": "ROR-00001",
119
+ "weight": "0.0",
120
+ "height": null,
121
+ "width": null,
122
+ "depth": null,
123
+ "is_master": false,
124
+ "position": 2,
125
+ "name": "Ruby on Rails Baseball Jersey",
126
+ "price": "15.99",
127
+ "display_price": "$15.99 CAD"
128
+ },
129
+ "relationships": {
130
+ "prices": {
131
+ "data": [
132
+ {
133
+ "type": "spree_prices",
134
+ "id": "33"
135
+ }
136
+ ]
137
+ },
138
+ "option_values": {
139
+ "data": [
140
+ {
141
+ "type": "spree_option_values",
142
+ "id": "1"
143
+ }
144
+ ]
145
+ },
146
+ "images": {
147
+ "data": [
148
+ {
149
+ "type": "spree_images",
150
+ "id": "1"
151
+ }
152
+ ]
153
+ },
154
+ "product": {
155
+ "data": {
156
+ "type": "spree_products",
157
+ "id": "3"
158
+ }
159
+ }
160
+ }
161
+ }
162
+ ]
163
+ }
164
+ ```
165
+
166
+ List all of the variants that belong to an option value via the option value's `id`.
167
+
168
+ ## Show Variant of an Option Value
169
+
170
+ ```shell
171
+ curl "https://example.com/api/v2/option_values/1/variants/1"
172
+ ```
173
+
174
+ ```json
175
+ {
176
+ "data": {
177
+ "id": "1",
178
+ "type": "spree_variants",
179
+ "attributes": {
180
+ "sku": "ROR-00001",
181
+ "weight": "0.0",
182
+ "height": null,
183
+ "width": null,
184
+ "depth": null,
185
+ "is_master": false,
186
+ "position": 2,
187
+ "name": "Ruby on Rails Baseball Jersey",
188
+ "price": "15.99",
189
+ "display_price": "$15.99 CAD"
190
+ },
191
+ "relationships": {
192
+ "prices": {
193
+ "data": [
194
+ {
195
+ "type": "spree_prices",
196
+ "id": "33"
197
+ }
198
+ ]
199
+ },
200
+ "option_values": {
201
+ "data": [
202
+ {
203
+ "type": "spree_option_values",
204
+ "id": "1"
205
+ }
206
+ ]
207
+ },
208
+ "images": {
209
+ "data": [
210
+ {
211
+ "type": "spree_images",
212
+ "id": "1"
213
+ }
214
+ ]
215
+ },
216
+ "product": {
217
+ "data": {
218
+ "type": "spree_products",
219
+ "id": "3"
220
+ }
221
+ }
222
+ }
223
+ }
224
+ }
225
+ ```
226
+
227
+ Show a variant that belongs to an option value via the option value's `id`.