workarea-api-admin 4.4.6

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 (178) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/README.md +82 -0
  4. data/Rakefile +10 -0
  5. data/app/assets/images/workarea/api/admin/icons/api.svg +1 -0
  6. data/app/controllers/workarea/api/admin/application_controller.rb +73 -0
  7. data/app/controllers/workarea/api/admin/categories_controller.rb +305 -0
  8. data/app/controllers/workarea/api/admin/category_product_rules_controller.rb +232 -0
  9. data/app/controllers/workarea/api/admin/content_assets_controller.rb +299 -0
  10. data/app/controllers/workarea/api/admin/content_controller.rb +268 -0
  11. data/app/controllers/workarea/api/admin/discounts_controller.rb +271 -0
  12. data/app/controllers/workarea/api/admin/email_signups_controller.rb +108 -0
  13. data/app/controllers/workarea/api/admin/fulfillments_controller.rb +268 -0
  14. data/app/controllers/workarea/api/admin/inventory_skus_controller.rb +305 -0
  15. data/app/controllers/workarea/api/admin/navigation_menus_controller.rb +267 -0
  16. data/app/controllers/workarea/api/admin/navigation_taxons_controller.rb +305 -0
  17. data/app/controllers/workarea/api/admin/orders_controller.rb +160 -0
  18. data/app/controllers/workarea/api/admin/pages_controller.rb +305 -0
  19. data/app/controllers/workarea/api/admin/payment_profiles_controller.rb +305 -0
  20. data/app/controllers/workarea/api/admin/payment_transactions_controller.rb +108 -0
  21. data/app/controllers/workarea/api/admin/payments_controller.rb +115 -0
  22. data/app/controllers/workarea/api/admin/prices_controller.rb +232 -0
  23. data/app/controllers/workarea/api/admin/pricing_skus_controller.rb +305 -0
  24. data/app/controllers/workarea/api/admin/product_images_controller.rb +232 -0
  25. data/app/controllers/workarea/api/admin/products_controller.rb +305 -0
  26. data/app/controllers/workarea/api/admin/promo_code_lists_controller.rb +305 -0
  27. data/app/controllers/workarea/api/admin/recommendation_settings_controller.rb +122 -0
  28. data/app/controllers/workarea/api/admin/redirects_controller.rb +305 -0
  29. data/app/controllers/workarea/api/admin/releases_controller.rb +304 -0
  30. data/app/controllers/workarea/api/admin/saved_addresses_controller.rb +232 -0
  31. data/app/controllers/workarea/api/admin/saved_credit_cards_controller.rb +256 -0
  32. data/app/controllers/workarea/api/admin/shipping_rates_controller.rb +232 -0
  33. data/app/controllers/workarea/api/admin/shipping_services_controller.rb +299 -0
  34. data/app/controllers/workarea/api/admin/shippings_controller.rb +105 -0
  35. data/app/controllers/workarea/api/admin/swagger_controller.rb +41 -0
  36. data/app/controllers/workarea/api/admin/tax_categories_controller.rb +242 -0
  37. data/app/controllers/workarea/api/admin/tax_rates_controller.rb +292 -0
  38. data/app/controllers/workarea/api/admin/users_controller.rb +296 -0
  39. data/app/controllers/workarea/api/admin/variants_controller.rb +232 -0
  40. data/app/models/workarea/api/admin/bulk_upsert.rb +74 -0
  41. data/app/models/workarea/user.decorator +7 -0
  42. data/app/views/workarea/admin/users/_api_permissions.html.haml +6 -0
  43. data/app/workers/workarea/perform_api_bulk_upsert.rb +15 -0
  44. data/bin/rails +18 -0
  45. data/config/initializers/append_points.rb +4 -0
  46. data/config/initializers/config.rb +15 -0
  47. data/config/locales/en.yml +9 -0
  48. data/config/routes.rb +81 -0
  49. data/lib/workarea/api/admin.rb +21 -0
  50. data/lib/workarea/api/admin/engine.rb +14 -0
  51. data/lib/workarea/api/admin/swagger.rb +106 -0
  52. data/test/documentation/workarea/api/admin/categories_documentation_test.rb +106 -0
  53. data/test/documentation/workarea/api/admin/category_product_rules_documentation_test.rb +78 -0
  54. data/test/documentation/workarea/api/admin/content_assets_documentation_test.rb +94 -0
  55. data/test/documentation/workarea/api/admin/content_documentation_test.rb +87 -0
  56. data/test/documentation/workarea/api/admin/discounts_documentation_test.rb +85 -0
  57. data/test/documentation/workarea/api/admin/email_signups_documentation_test.rb +41 -0
  58. data/test/documentation/workarea/api/admin/fulfillment_documentation_test.rb +84 -0
  59. data/test/documentation/workarea/api/admin/inventory_skus_documentation_test.rb +95 -0
  60. data/test/documentation/workarea/api/admin/navigation_menus_documentation_test.rb +81 -0
  61. data/test/documentation/workarea/api/admin/navigation_taxons_documentation_test.rb +94 -0
  62. data/test/documentation/workarea/api/admin/orders_documentation_test.rb +65 -0
  63. data/test/documentation/workarea/api/admin/pages_documentation_test.rb +93 -0
  64. data/test/documentation/workarea/api/admin/payment_profiles_documentation_test.rb +98 -0
  65. data/test/documentation/workarea/api/admin/payment_transactions_documentation_test.rb +43 -0
  66. data/test/documentation/workarea/api/admin/payments_documentation_test.rb +41 -0
  67. data/test/documentation/workarea/api/admin/prices_documentation_test.rb +82 -0
  68. data/test/documentation/workarea/api/admin/pricing_skus_documentation_test.rb +95 -0
  69. data/test/documentation/workarea/api/admin/product_images_documentation_test.rb +101 -0
  70. data/test/documentation/workarea/api/admin/products_documentation_test.rb +96 -0
  71. data/test/documentation/workarea/api/admin/promo_code_lists_documentation_test.rb +94 -0
  72. data/test/documentation/workarea/api/admin/recommendation_settings_documentation_test.rb +37 -0
  73. data/test/documentation/workarea/api/admin/redirects_documentation_test.rb +96 -0
  74. data/test/documentation/workarea/api/admin/release_changes_documentation_test.rb +32 -0
  75. data/test/documentation/workarea/api/admin/releases_documentation_test.rb +93 -0
  76. data/test/documentation/workarea/api/admin/saved_addresses_documentation_test.rb +92 -0
  77. data/test/documentation/workarea/api/admin/saved_credit_cards_documentation_test.rb +86 -0
  78. data/test/documentation/workarea/api/admin/shipping_rates_documentation_test.rb +78 -0
  79. data/test/documentation/workarea/api/admin/shipping_services_documentation_test.rb +93 -0
  80. data/test/documentation/workarea/api/admin/shippings_documentation_test.rb +41 -0
  81. data/test/documentation/workarea/api/admin/tax_categories_documentation_test.rb +95 -0
  82. data/test/documentation/workarea/api/admin/tax_rates_documentation_test.rb +78 -0
  83. data/test/documentation/workarea/api/admin/users_documentation_test.rb +99 -0
  84. data/test/documentation/workarea/api/admin/variants_documentation_test.rb +80 -0
  85. data/test/dummy/Rakefile +7 -0
  86. data/test/dummy/app/assets/config/manifest.js +4 -0
  87. data/test/dummy/app/assets/images/.keep +0 -0
  88. data/test/dummy/app/assets/javascripts/application.js +13 -0
  89. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  90. data/test/dummy/app/controllers/application_controller.rb +3 -0
  91. data/test/dummy/app/controllers/concerns/.keep +0 -0
  92. data/test/dummy/app/helpers/application_helper.rb +2 -0
  93. data/test/dummy/app/jobs/application_job.rb +2 -0
  94. data/test/dummy/app/mailers/.keep +0 -0
  95. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  96. data/test/dummy/app/models/.keep +0 -0
  97. data/test/dummy/app/models/concerns/.keep +0 -0
  98. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  99. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  100. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  101. data/test/dummy/bin/bundle +3 -0
  102. data/test/dummy/bin/rails +4 -0
  103. data/test/dummy/bin/rake +4 -0
  104. data/test/dummy/bin/setup +34 -0
  105. data/test/dummy/bin/update +29 -0
  106. data/test/dummy/config.ru +4 -0
  107. data/test/dummy/config/application.rb +25 -0
  108. data/test/dummy/config/boot.rb +5 -0
  109. data/test/dummy/config/cable.yml +9 -0
  110. data/test/dummy/config/environment.rb +5 -0
  111. data/test/dummy/config/environments/development.rb +55 -0
  112. data/test/dummy/config/environments/production.rb +86 -0
  113. data/test/dummy/config/environments/test.rb +43 -0
  114. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  115. data/test/dummy/config/initializers/assets.rb +11 -0
  116. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  117. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  118. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  119. data/test/dummy/config/initializers/inflections.rb +16 -0
  120. data/test/dummy/config/initializers/mime_types.rb +4 -0
  121. data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
  122. data/test/dummy/config/initializers/session_store.rb +3 -0
  123. data/test/dummy/config/initializers/workarea.rb +8 -0
  124. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  125. data/test/dummy/config/locales/en.yml +23 -0
  126. data/test/dummy/config/puma.rb +47 -0
  127. data/test/dummy/config/routes.rb +6 -0
  128. data/test/dummy/config/secrets.yml +22 -0
  129. data/test/dummy/config/spring.rb +6 -0
  130. data/test/dummy/db/seeds.rb +2 -0
  131. data/test/dummy/log/.keep +0 -0
  132. data/test/dummy/public/404.html +67 -0
  133. data/test/dummy/public/422.html +67 -0
  134. data/test/dummy/public/500.html +66 -0
  135. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  136. data/test/dummy/public/apple-touch-icon.png +0 -0
  137. data/test/dummy/public/favicon.ico +1 -0
  138. data/test/integration/workarea/api/admin/audit_log_integration_test.rb +20 -0
  139. data/test/integration/workarea/api/admin/authentication_integration_test.rb +61 -0
  140. data/test/integration/workarea/api/admin/categories_integration_test.rb +64 -0
  141. data/test/integration/workarea/api/admin/category_product_rules_integration_test.rb +58 -0
  142. data/test/integration/workarea/api/admin/content_assets_integration_test.rb +65 -0
  143. data/test/integration/workarea/api/admin/content_integration_test.rb +59 -0
  144. data/test/integration/workarea/api/admin/discounts_integration_test.rb +64 -0
  145. data/test/integration/workarea/api/admin/email_signups_integration_test.rb +32 -0
  146. data/test/integration/workarea/api/admin/error_handling_integration_test.rb +16 -0
  147. data/test/integration/workarea/api/admin/fulfillments_integration_test.rb +62 -0
  148. data/test/integration/workarea/api/admin/inventory_skus_integration_test.rb +70 -0
  149. data/test/integration/workarea/api/admin/navigation_menus_integration_test.rb +54 -0
  150. data/test/integration/workarea/api/admin/navigation_taxons_integration_test.rb +63 -0
  151. data/test/integration/workarea/api/admin/orders_integration_test.rb +53 -0
  152. data/test/integration/workarea/api/admin/pages_integration_test.rb +64 -0
  153. data/test/integration/workarea/api/admin/payment_profiles_integration_test.rb +75 -0
  154. data/test/integration/workarea/api/admin/payment_transactions_integration_test.rb +45 -0
  155. data/test/integration/workarea/api/admin/payments_integration_test.rb +29 -0
  156. data/test/integration/workarea/api/admin/prices_integration_test.rb +55 -0
  157. data/test/integration/workarea/api/admin/pricing_skus_integration_test.rb +72 -0
  158. data/test/integration/workarea/api/admin/product_images_integration_test.rb +56 -0
  159. data/test/integration/workarea/api/admin/products_integration_test.rb +66 -0
  160. data/test/integration/workarea/api/admin/promo_code_lists_integration_test.rb +70 -0
  161. data/test/integration/workarea/api/admin/recommendation_settings_integration_test.rb +41 -0
  162. data/test/integration/workarea/api/admin/redirects_integration_test.rb +69 -0
  163. data/test/integration/workarea/api/admin/release_changes_integration_test.rb +32 -0
  164. data/test/integration/workarea/api/admin/releases_integration_test.rb +60 -0
  165. data/test/integration/workarea/api/admin/saved_addresses_integration_test.rb +70 -0
  166. data/test/integration/workarea/api/admin/saved_credit_cards_integration_test.rb +76 -0
  167. data/test/integration/workarea/api/admin/shipping_rates_integration_test.rb +54 -0
  168. data/test/integration/workarea/api/admin/shipping_services_integration_test.rb +64 -0
  169. data/test/integration/workarea/api/admin/shippings_integration_test.rb +34 -0
  170. data/test/integration/workarea/api/admin/tax_categories_integration_test.rb +64 -0
  171. data/test/integration/workarea/api/admin/tax_rates_integration_test.rb +66 -0
  172. data/test/integration/workarea/api/admin/users_integration_test.rb +67 -0
  173. data/test/integration/workarea/api/admin/variants_integration_test.rb +59 -0
  174. data/test/models/workarea/api/admin/bulk_upsert_test.rb +79 -0
  175. data/test/test_helper.rb +10 -0
  176. data/test/vcr_cassettes/product_image_from_url.yml +43 -0
  177. data/workarea-api-admin.gemspec +18 -0
  178. metadata +252 -0
@@ -0,0 +1,268 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class ContentController < Admin::ApplicationController
5
+ before_action :find_content, except: [:index, :create, :bulk]
6
+
7
+ swagger_path '/content' do
8
+ operation :get do
9
+ key :summary, 'All Content'
10
+ key :description, 'Returns all content from the system'
11
+ key :operationId, 'listContent'
12
+ key :produces, ['application/json']
13
+
14
+ parameter do
15
+ key :name, :page
16
+ key :in, :query
17
+ key :description, 'Current page'
18
+ key :required, false
19
+ key :type, :integer
20
+ key :default, 1
21
+ end
22
+ parameter do
23
+ key :name, :sort_by
24
+ key :in, :query
25
+ key :description, 'Field on which to sort (see responses for possible values)'
26
+ key :required, false
27
+ key :type, :string
28
+ key :default, 'created_at'
29
+ end
30
+ parameter do
31
+ key :name, :sort_direction
32
+ key :in, :query
33
+ key :description, 'Direction for sort by'
34
+ key :type, :string
35
+ key :enum, %w(asc desc)
36
+ key :default, 'desc'
37
+ end
38
+
39
+ response 200 do
40
+ key :description, 'Content'
41
+ schema do
42
+ key :type, :object
43
+ property :content do
44
+ key :type, :array
45
+ items do
46
+ key :'$ref', 'Workarea::Content'
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ operation :post do
54
+ key :summary, 'Create Content'
55
+ key :description, 'Creates a new content.'
56
+ key :operationId, 'addContent'
57
+ key :produces, ['application/json']
58
+
59
+ parameter do
60
+ key :name, :body
61
+ key :in, :body
62
+ key :description, 'Content to add'
63
+ key :required, true
64
+ schema do
65
+ key :type, :object
66
+ property :content do
67
+ key :'$ref', 'Workarea::Content'
68
+ end
69
+ end
70
+ end
71
+
72
+ response 201 do
73
+ key :description, 'Content created'
74
+ schema do
75
+ key :type, :object
76
+ property :content do
77
+ key :'$ref', 'Workarea::Content'
78
+ end
79
+ end
80
+ end
81
+
82
+ response 422 do
83
+ key :description, 'Validation failure'
84
+ schema do
85
+ key :type, :object
86
+ property :problem do
87
+ key :type, :string
88
+ end
89
+ property :document do
90
+ key :'$ref', 'Workarea::Content'
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ def index
98
+ @content = Content
99
+ .all
100
+ .order_by(sort_field => sort_direction)
101
+ .page(params[:page])
102
+
103
+ respond_with content: @content
104
+ end
105
+
106
+ def create
107
+ @content = Content.create!(params[:content])
108
+ respond_with(
109
+ { content: @content },
110
+ { status: :created,
111
+ location: content_path(@content) }
112
+ )
113
+ end
114
+
115
+ swagger_path '/content/{id}' do
116
+ operation :get do
117
+ key :summary, 'Find Content by ID'
118
+ key :description, 'Returns one content'
119
+ key :operationId, 'showContent'
120
+
121
+ parameter do
122
+ key :name, :id
123
+ key :in, :path
124
+ key :description, 'ID of content to fetch'
125
+ key :required, true
126
+ key :type, :string
127
+ end
128
+
129
+ response 200 do
130
+ key :description, 'Content details'
131
+ schema do
132
+ key :type, :object
133
+ property :content do
134
+ key :'$ref', 'Workarea::Content'
135
+ end
136
+ end
137
+ end
138
+
139
+ response 404 do
140
+ key :description, 'Content not found'
141
+ schema do
142
+ key :type, :object
143
+ property :problem do
144
+ key :type, :string
145
+ end
146
+ property :params do
147
+ key :type, :object
148
+ key :additionalProperties, true
149
+ end
150
+ end
151
+ end
152
+ end
153
+
154
+ operation :patch do
155
+ key :summary, 'Update Content'
156
+ key :description, 'Updates attributes on content'
157
+ key :operationId, 'updateContent'
158
+
159
+ parameter do
160
+ key :name, :id
161
+ key :in, :path
162
+ key :description, 'ID of content to update'
163
+ key :required, true
164
+ key :type, :string
165
+ end
166
+
167
+ parameter do
168
+ key :name, :body
169
+ key :in, :body
170
+ key :description, 'New attributes'
171
+ key :required, true
172
+ schema do
173
+ key :type, :object
174
+ property :content do
175
+ key :'$ref', 'Workarea::Content'
176
+ end
177
+ end
178
+ end
179
+
180
+ response 204 do
181
+ key :description, 'Content updated successfully'
182
+ end
183
+
184
+ response 422 do
185
+ key :description, 'Validation failure'
186
+ schema do
187
+ key :type, :object
188
+ property :problem do
189
+ key :type, :string
190
+ end
191
+ property :document do
192
+ key :'$ref', 'Workarea::Content'
193
+ end
194
+ end
195
+ end
196
+
197
+ response 404 do
198
+ key :description, 'Content not found'
199
+ schema do
200
+ key :type, :object
201
+ property :problem do
202
+ key :type, :string
203
+ end
204
+ property :params do
205
+ key :type, :object
206
+ key :additionalProperties, true
207
+ end
208
+ end
209
+ end
210
+ end
211
+ end
212
+
213
+ def show
214
+ respond_with content: @content
215
+ end
216
+
217
+ def update
218
+ @content.update_attributes!(params[:content])
219
+ respond_with content: @content
220
+ end
221
+
222
+ swagger_path '/content/bulk' do
223
+ operation :patch do
224
+ key :summary, 'Bulk Upsert Content'
225
+ key :description, 'Creates new content or updates existing ones in bulk.'
226
+ key :operationId, 'upsertContent'
227
+ key :produces, ['application/json']
228
+
229
+ parameter do
230
+ key :name, :body
231
+ key :in, :body
232
+ key :description, 'Array of content to upsert'
233
+ key :required, true
234
+ schema do
235
+ key :type, :object
236
+ property :content do
237
+ key :type, :array
238
+ items do
239
+ key :'$ref', 'Workarea::Content'
240
+ end
241
+ end
242
+ end
243
+ end
244
+
245
+ response 204 do
246
+ key :description, 'Upsert received'
247
+ end
248
+ end
249
+ end
250
+
251
+ def bulk
252
+ @bulk = Api::Admin::BulkUpsert.create!(
253
+ klass: Content,
254
+ data: params[:content].map(&:to_h)
255
+ )
256
+
257
+ head :no_content
258
+ end
259
+
260
+ private
261
+
262
+ def find_content
263
+ @content = Content.find(params[:id])
264
+ end
265
+ end
266
+ end
267
+ end
268
+ end
@@ -0,0 +1,271 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class DiscountsController < Admin::ApplicationController
5
+ before_action :find_discount, except: [:index, :create, :bulk]
6
+
7
+ swagger_path '/discounts' do
8
+ operation :get do
9
+ key :summary, 'All Discounts'
10
+ key :description, 'Returns all discounts from the system'
11
+ key :operationId, 'listDiscounts'
12
+ key :produces, ['application/json']
13
+
14
+ parameter do
15
+ key :name, :page
16
+ key :in, :query
17
+ key :description, 'Current page'
18
+ key :required, false
19
+ key :type, :integer
20
+ key :default, 1
21
+ end
22
+ parameter do
23
+ key :name, :sort_by
24
+ key :in, :query
25
+ key :description, 'Field on which to sort (see responses for possible values)'
26
+ key :required, false
27
+ key :type, :string
28
+ key :default, 'created_at'
29
+ end
30
+ parameter do
31
+ key :name, :sort_direction
32
+ key :in, :query
33
+ key :description, 'Direction for sort by'
34
+ key :type, :string
35
+ key :enum, %w(asc desc)
36
+ key :default, 'desc'
37
+ end
38
+
39
+ response 200 do
40
+ key :description, 'Discounts'
41
+ schema do
42
+ key :type, :object
43
+ property :discounts do
44
+ key :type, :array
45
+ items do
46
+ key :'$ref', 'Workarea::Pricing::Discount'
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ operation :post do
54
+ key :summary, 'Create Discount'
55
+ key :description, 'Creates a new discount.'
56
+ key :operationId, 'addDiscount'
57
+ key :produces, ['application/json']
58
+
59
+ parameter do
60
+ key :name, :body
61
+ key :in, :body
62
+ key :description, 'Discount to add'
63
+ key :required, true
64
+ schema do
65
+ key :type, :object
66
+ property :discount do
67
+ key :'$ref', 'Workarea::Pricing::Discount'
68
+ end
69
+ end
70
+ end
71
+
72
+ response 201 do
73
+ key :description, 'Discount created'
74
+ schema do
75
+ key :type, :object
76
+ property :discount do
77
+ key :'$ref', 'Workarea::Pricing::Discount'
78
+ end
79
+ end
80
+ end
81
+
82
+ response 422 do
83
+ key :description, 'Validation failure'
84
+ schema do
85
+ key :type, :object
86
+ property :problem do
87
+ key :type, :string
88
+ end
89
+ property :document do
90
+ key :'$ref', 'Workarea::Pricing::Discount'
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ def index
98
+ @discounts = Pricing::Discount
99
+ .all
100
+ .order_by(sort_field => sort_direction)
101
+ .page(params[:page])
102
+
103
+ respond_with discounts: @discounts
104
+ end
105
+
106
+ def create
107
+ attrs = params[:discount].presence || {}
108
+
109
+ @discount = NewDiscount.new_discount(attrs[:type], attrs.except(:type))
110
+ @discount.save!
111
+
112
+ respond_with(
113
+ { discount: @discount },
114
+ { status: :created,
115
+ location: discount_path(@discount) }
116
+ )
117
+ end
118
+
119
+ swagger_path '/discounts/{id}' do
120
+ operation :get do
121
+ key :summary, 'Find Discount by ID'
122
+ key :description, 'Returns a single discount'
123
+ key :operationId, 'showDiscount'
124
+
125
+ parameter do
126
+ key :name, :id
127
+ key :in, :path
128
+ key :description, 'ID of discount to fetch'
129
+ key :required, true
130
+ key :type, :string
131
+ end
132
+
133
+ response 200 do
134
+ key :description, 'Discount details'
135
+ schema do
136
+ key :type, :object
137
+ property :discount do
138
+ key :'$ref', 'Workarea::Pricing::Discount'
139
+ end
140
+ end
141
+ end
142
+
143
+ response 404 do
144
+ key :description, 'Discount not found'
145
+ schema do
146
+ key :type, :object
147
+ property :problem do
148
+ key :type, :string
149
+ end
150
+ property :params do
151
+ key :type, :object
152
+ key :additionalProperties, true
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+ operation :patch do
159
+ key :summary, 'Update a Discount'
160
+ key :description, 'Updates attributes on a discount'
161
+ key :operationId, 'updateDiscount'
162
+
163
+ parameter do
164
+ key :name, :id
165
+ key :in, :path
166
+ key :description, 'ID of discount to update'
167
+ key :required, true
168
+ key :type, :string
169
+ end
170
+
171
+ parameter do
172
+ key :name, :body
173
+ key :in, :body
174
+ key :description, 'New attributes'
175
+ key :required, true
176
+ schema do
177
+ key :type, :object
178
+ property :discount do
179
+ key :'$ref', 'Workarea::Pricing::Discount'
180
+ end
181
+ end
182
+ end
183
+
184
+ response 204 do
185
+ key :description, 'Discount updated successfully'
186
+ end
187
+
188
+ response 422 do
189
+ key :description, 'Validation failure'
190
+ schema do
191
+ key :type, :object
192
+ property :problem do
193
+ key :type, :string
194
+ end
195
+ property :document do
196
+ key :'$ref', 'Workarea::Pricing::Discount'
197
+ end
198
+ end
199
+ end
200
+
201
+ response 404 do
202
+ key :description, 'Discount not found'
203
+ schema do
204
+ key :type, :object
205
+ property :problem do
206
+ key :type, :string
207
+ end
208
+ property :params do
209
+ key :type, :object
210
+ key :additionalProperties, true
211
+ end
212
+ end
213
+ end
214
+ end
215
+
216
+ operation :delete do
217
+ key :summary, 'Remove a Discount'
218
+ key :description, 'Remove a discount'
219
+ key :operationId, 'removeDiscount'
220
+
221
+ parameter do
222
+ key :name, :id
223
+ key :in, :path
224
+ key :description, 'ID of discount to remove'
225
+ key :required, true
226
+ key :type, :string
227
+ end
228
+
229
+ response 204 do
230
+ key :description, 'Discount removed successfully'
231
+ end
232
+
233
+ response 404 do
234
+ key :description, 'Discount not found'
235
+ schema do
236
+ key :type, :object
237
+ property :problem do
238
+ key :type, :string
239
+ end
240
+ property :params do
241
+ key :type, :object
242
+ key :additionalProperties, true
243
+ end
244
+ end
245
+ end
246
+ end
247
+ end
248
+
249
+ def show
250
+ respond_with discount: @discount
251
+ end
252
+
253
+ def update
254
+ @discount.update_attributes!(params[:discount])
255
+ respond_with discount: @discount
256
+ end
257
+
258
+ def destroy
259
+ @discount.destroy
260
+ head :no_content
261
+ end
262
+
263
+ private
264
+
265
+ def find_discount
266
+ @discount = Pricing::Discount.find(params[:id])
267
+ end
268
+ end
269
+ end
270
+ end
271
+ end