Class: S3FileHandler::CSV::AddColumn
- Inherits:
-
BaseOperation
- Object
- BaseOperation
- S3FileHandler::CSV::AddColumn
- Defined in:
- lib/s3_file_handler/csv/add_column.rb
Instance Attribute Summary collapse
-
#bucket_name ⇒ Object
readonly
Returns the value of attribute bucket_name.
-
#column_name ⇒ Object
readonly
Returns the value of attribute column_name.
-
#file_key ⇒ Object
readonly
Returns the value of attribute file_key.
Attributes inherited from BaseOperation
Instance Method Summary collapse
- #execute ⇒ Object
-
#initialize(bucket_name, file_key, column_name:, client: S3FileHandler.client) ⇒ AddColumn
constructor
A new instance of AddColumn.
Constructor Details
#initialize(bucket_name, file_key, column_name:, client: S3FileHandler.client) ⇒ AddColumn
Returns a new instance of AddColumn.
10 11 12 13 14 15 16 |
# File 'lib/s3_file_handler/csv/add_column.rb', line 10 def initialize(bucket_name, file_key, column_name:, client: S3FileHandler.client) super(client: client) @bucket_name = bucket_name @file_key = file_key @column_name = column_name.to_s end |
Instance Attribute Details
#bucket_name ⇒ Object (readonly)
Returns the value of attribute bucket_name.
8 9 10 |
# File 'lib/s3_file_handler/csv/add_column.rb', line 8 def bucket_name @bucket_name end |
#column_name ⇒ Object (readonly)
Returns the value of attribute column_name.
8 9 10 |
# File 'lib/s3_file_handler/csv/add_column.rb', line 8 def column_name @column_name end |
#file_key ⇒ Object (readonly)
Returns the value of attribute file_key.
8 9 10 |
# File 'lib/s3_file_handler/csv/add_column.rb', line 8 def file_key @file_key end |
Instance Method Details
#execute ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/s3_file_handler/csv/add_column.rb', line 18 def execute read_result = S3FileHandler.read_file(bucket_name, file_key) return read_result unless read_result.success? raw_csv = read_result.data[:content] parsed_csv = ::CSV.parse(raw_csv, headers: true) headers = parsed_csv.headers || [] if headers.include?(column_name) errors << "Column already exists: #{column_name}" return result end headers << column_name new_csv_content = ::CSV.generate do |csv| csv << headers parsed_csv.each do |row| row[column_name] = "" csv << headers.map { |h| row[h] } end end S3FileHandler.upload_file(bucket_name, file_key, content: new_csv_content) end |