class GoogleDrive::List
Provides access to cells using column names. Use GoogleDrive::Worksheet#list
to get GoogleDrive::List
object.
Public Class Methods
@api private
# File lib/google_drive/list.rb, line 19 def initialize(worksheet) @worksheet = worksheet end
Public Instance Methods
Returns Hash-like object (GoogleDrive::ListRow
) for the row with the index. Keys of the object are colum names (the first row). The second row has index 0.
Note that updates to the returned object are not sent to the server until you call GoogleDrive::Worksheet#save()
.
# File lib/google_drive/list.rb, line 34 def [](index) ListRow.new(self, index) end
Updates the row with the index with the given Hash object. Keys of hash
are colum names (the first row). The second row has index 0.
Note that update is not sent to the server until you call GoogleDrive::Worksheet#save()
.
# File lib/google_drive/list.rb, line 44 def []=(index, hash) self[index].replace(hash) end
Iterates over Hash-like object (GoogleDrive::ListRow
) for each row (except for the first row). Keys of the object are colum names (the first row).
# File lib/google_drive/list.rb, line 51 def each(&_block) for i in 0...size yield(self[i]) end end
@api private
# File lib/google_drive/list.rb, line 95 def get(index, key) @worksheet[index + 2, key_to_col(key)] end
@api private
# File lib/google_drive/list.rb, line 105 def input_value(index, key) @worksheet.input_value(index + 2, key_to_col(key)) end
Column names i.e. the contents of the first row. Duplicates are removed.
# File lib/google_drive/list.rb, line 59 def keys (1..@worksheet.num_cols).map { |i| @worksheet[1, i] }.uniq end
Updates column names i.e. the contents of the first row.
Note that update is not sent to the server until you call GoogleDrive::Worksheet#save()
.
# File lib/google_drive/list.rb, line 67 def keys=(ary) for i in 1..ary.size @worksheet[1, i] = ary[i - 1] end for i in (ary.size + 1)..@worksheet.num_cols @worksheet[1, i] = '' end end
@api private
# File lib/google_drive/list.rb, line 100 def numeric_value(index, key) @worksheet.numeric_value(index + 2, key_to_col(key)) end
Adds a new row to the bottom. Keys of hash
are colum names (the first row). Returns GoogleDrive::ListRow
for the new row.
Note that update is not sent to the server until you call GoogleDrive::Worksheet#save()
.
# File lib/google_drive/list.rb, line 82 def push(hash) row = self[size] row.update(hash) row end
@api private
# File lib/google_drive/list.rb, line 110 def set(index, key, value) @worksheet[index + 2, key_to_col(key)] = value end
Number of non-empty rows in the worksheet excluding the first row.
# File lib/google_drive/list.rb, line 24 def size @worksheet.num_rows - 1 end
Returns all rows (except for the first row) as Array of Hash. Keys of Hash objects are colum names (the first row).
# File lib/google_drive/list.rb, line 90 def to_hash_array map(&:to_hash) end
Private Instance Methods
# File lib/google_drive/list.rb, line 116 def key_to_col(key) key = key.to_s col = (1..@worksheet.num_cols).find { |c| @worksheet[1, c] == key } unless col raise(GoogleDrive::Error, format("Column doesn't exist: %p", key)) end col end