Class: CloudXLSRails::CSVResponder

Inherits:
Object
  • Object
show all
Defined in:
lib/cloudxls-rails/handlers/csv.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(controller, stream) ⇒ CSVResponder

Returns a new instance of CSVResponder.



4
5
6
7
# File 'lib/cloudxls-rails/handlers/csv.rb', line 4

def initialize(controller, stream)
  @controller = controller
  @stream = stream
end

Class Method Details

.stream!(controller, scope, options) ⇒ Object



25
26
27
28
29
# File 'lib/cloudxls-rails/handlers/csv.rb', line 25

def self.stream!(controller, scope, options)
  filename = options.fetch(:doc, {}).fetch(:filename, "data.csv")
  enum     = CloudXLS::CSVWriter.enumerator(scope, options)
  new(controller, enum).stream!(filename)
end

Instance Method Details

#stream!(filename) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/cloudxls-rails/handlers/csv.rb', line 9

def stream!(filename)
  headers = @controller.headers
  headers['Last-Modified'] = Time.now.to_s
  headers["Content-Type"] = "text/csv"
  headers["Content-disposition"] = "attachment; filename=\"#{filename}\""
  # nginx doc: Setting this to "no" will allow unbuffered responses suitable
  # for Comet and HTTP streaming applications
  headers['X-Accel-Buffering'] = 'no'
  headers["Cache-Control"] ||= "no-cache"
  headers.delete("Content-Length")

  @controller.response.status = 200
  # setting the body to an enumerator, rails will iterate this enumerator
  @controller.response_body = @stream
end