From b87619dcb42a109a2f3f6152e7fb9b4687d1d7cd Mon Sep 17 00:00:00 2001 From: noissefnoc Date: Fri, 23 Mar 2018 23:30:26 +0900 Subject: [PATCH] add methods for prepare --- lib/embulk/output/gsheets.rb | 12 +++++++++++- lib/embulk/output/gsheets/service.rb | 12 ++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/embulk/output/gsheets.rb b/lib/embulk/output/gsheets.rb index 4ed9a75..f976df1 100644 --- a/lib/embulk/output/gsheets.rb +++ b/lib/embulk/output/gsheets.rb @@ -22,9 +22,10 @@ def self.transaction(config, schema, count, &control) 'application_name' => config.param('application_name', :string, default: 'embulk-output-gsheets'), 'bulk_num' => config.param('bulk_num', :integer, default: 200), 'with_header' => config.param('with_header', :bool, default: true), + 'mode' => config.param('mode', :string, default: 'append'), } - Embulk.logger.info "Writing google sheets: " + + Embulk.logger.info 'Writing google sheets: ' + "spreadsheet id = [#{task['spreadsheet_id']}], sheet name = [#{task['sheet_name']}]" service = Service.new(task) @@ -35,6 +36,15 @@ def self.transaction(config, schema, count, &control) service.write([header_record]) end + case task['mode'] + when 'truncate' + service.clear + when 'append' + # nothing to do + else + raise ConfigError.new "Invalid write mode detected. mode = #{task['mode']}" + end + task_reports = yield(task) next_config_diff = {} return next_config_diff diff --git a/lib/embulk/output/gsheets/service.rb b/lib/embulk/output/gsheets/service.rb index a92fd43..f9436f5 100644 --- a/lib/embulk/output/gsheets/service.rb +++ b/lib/embulk/output/gsheets/service.rb @@ -96,6 +96,18 @@ def get_header header = get_values(range) header end + + def clear + begin + response = @service.batch_clear_values( + @spreadsheet_id, + Google::Apis::SheetsV4::BatchClearValuesRequest.new) + rescue => e + # TODO: more appropriate error handling + raise "Could not clear values from Google Sheets #{e.message}" + + "spreadsheet_id = #{@spreadsheet_id}" + end + end end end end