Class: Nifty::Report

Inherits:
Object
  • Object
show all
Defined in:
lib/nifty-report/report.rb

Instance Method Summary collapse

Constructor Details

#initialize(sql, name, connection_string = nil) ⇒ Report

Returns a new instance of Report.



5
6
7
8
9
# File 'lib/nifty-report/report.rb', line 5

def initialize(sql, name, connection_string = nil)
  @sql = sql
  @name = name
  @connection_string = connection_string
end

Instance Method Details

#csvObject



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/nifty-report/report.rb', line 15

def csv
  Model.establish_connection(@connection_string)
  Model.connection.execute("COPY (#{@sql}) TO STDOUT WITH DELIMITER ',' CSV HEADER")

  csv = ''

  while line = Model.connection.raw_connection.get_copy_data do
    csv << line
  end

  csv
end

#email_to(email_address) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/nifty-report/report.rb', line 28

def email_to(email_address)
  AWS::S3::Base.establish_connection!(
    access_key_id: ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
  )

  AWS::S3::S3Object.store(filename, csv, ENV['AWS_S3_BUCKET'])
  remote_file = AWS::S3::S3Object.find(filename, ENV['AWS_S3_BUCKET'])

  ReportMailer.report_email(email_address, remote_file.url(expires_in: 30 * 60)).deliver
end

#filenameObject



11
12
13
# File 'lib/nifty-report/report.rb', line 11

def filename
  @name.downcase.gsub(' ', '.') + ".#{Time.now.strftime('%F')}.csv"
end