Class: DataPitcher::Spreadsheet

Inherits:
Object
  • Object
show all
Defined in:
lib/data_pitcher/spreadsheet.rb

Constant Summary collapse

BATCH_SIZE =
1000

Instance Method Summary collapse

Constructor Details

#initialize(spreadsheet_key, worksheet_title = nil) ⇒ Spreadsheet

Returns a new instance of Spreadsheet.



7
8
9
10
# File 'lib/data_pitcher/spreadsheet.rb', line 7

def initialize(spreadsheet_key, worksheet_title = nil)
  @spreadsheet_key = spreadsheet_key
  @worksheet_title = worksheet_title
end

Instance Method Details

#clear_sheetObject



25
26
27
28
29
# File 'lib/data_pitcher/spreadsheet.rb', line 25

def clear_sheet
  worksheet.reload
  worksheet.delete_rows(1, worksheet.num_rows)
  worksheet.save
end

#fill_sheet(sql_query) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/data_pitcher/spreadsheet.rb', line 31

def fill_sheet(sql_query)
  result = DataPitcher::Executor.new(sql_query).execute
  worksheet.reload
  # fill header
  worksheet.insert_rows(1, [result.header])
  # fill rows
  result.rows.each_slice(BATCH_SIZE).with_index do |array, batch_index|
    worksheet.insert_rows(2 + batch_index * BATCH_SIZE, array)
    worksheet.save
  end
end

#replace_worksheet_with_query(sql_query) ⇒ Object



43
44
45
46
# File 'lib/data_pitcher/spreadsheet.rb', line 43

def replace_worksheet_with_query(sql_query)
  clear_sheet
  fill_sheet(sql_query)
end

#sessionObject



55
56
57
# File 'lib/data_pitcher/spreadsheet.rb', line 55

def session
  @session ||= ::GoogleDrive::Session.(DataPitcher.configuration.)
end

#spreadsheetObject



12
13
14
# File 'lib/data_pitcher/spreadsheet.rb', line 12

def spreadsheet
  @spreadsheet ||= session.spreadsheet_by_key(@spreadsheet_key)
end

#valid?Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
# File 'lib/data_pitcher/spreadsheet.rb', line 48

def valid?
  worksheet
  true
rescue => e
  false
end

#worksheetObject



16
17
18
19
20
21
22
23
# File 'lib/data_pitcher/spreadsheet.rb', line 16

def worksheet
  @worksheet ||=
    if @worksheet_title
      spreadsheet.worksheet_by_title(@worksheet_title)
    else
      spreadsheet.worksheets.first
    end
end