class CountsExportsController < ApplicationController wrap_parameters false def index locale = resolve_locale! payload = request.request_parameters.except('authenticity_token') .merge(request.query_parameters) exporter = CountsExporter.new(payload, language_code: locale.language_code) response.headers['Content-Type'] = exporter.format == 'json' ? 'application/json; charset=utf-8' : 'text/csv; charset=utf-8' response.headers['Content-Disposition'] = "attachment; filename=\"counts-#{ exporter.resource }.#{ exporter.format }\"" response.headers['Cache-Control'] = 'private, no-store' response.headers['X-Accel-Buffering'] = 'no' # Rack::ETag otherwise materialises the response to calculate a digest. response.headers['Last-Modified'] = Time.current.httpdate self.response_body = exporter.body rescue ArgumentError, TypeError, KeyError, JSON::ParserError head :bad_request end end