lib/lionel/export.rb in lionel_richie-0.1.5.1 vs lib/lionel/export.rb in lionel_richie-0.2.0

- old
+ new

@@ -4,10 +4,18 @@ attr_reader :options config_accessor :google_doc_id, :trello_board_id + def self.builder=(builder) + @builder = builder + end + + def self.builder + @builder || ExportBuilder.default + end + def initialize(options = {}) @options = options end def data @@ -46,28 +54,32 @@ def process download if options['print'] - rows.each { |row| Lionel.logger.info row.inspect } + Lionel.logger.info "DRY RUN..." + Lionel.logger.info "Results were not uploaded to Google Drive" else + Lionel.logger.info "Uploading..." upload + Lionel.logger.info "Done!" end end def download + raise_missing_builder_error unless builder + Lionel.logger.info "Exporting trello board '#{board.name}' (#{trello_board_id}) to " + "google doc '#{spreadsheet.title}' (#{google_doc_id})" card_map.each do |row, card| begin - Timeout.timeout(5) { - Lionel.logger.info "row[#{row}] = #{card.name}" - - sync_columns(card).each do |col, value| + Timeout.timeout(5) do + row_data = card_columns(card).map do |col, value| worksheet[col,row] = value - end - } + end.join(" | ") + Lionel.logger.info "row[#{row}]: " + row_data + end rescue Timeout::Error, Trello::Error => e Lionel.logger.warn e.inspect Lionel.logger.warn card.inspect end end @@ -83,52 +95,26 @@ def rows worksheet.rows end - def sync_columns(card) - {}.tap do |columns| - columns["B"] = card.id + def builder + self.class.builder + end - # Card link - columns["C"] = card.link(card.name.gsub(/^\[.*\]\s*/, "")) - - # Ready date - ready_action = card.first_action do |a| - (a.create? && a.board_id == trello_board_id) || a.moved_to?("Ready") + def card_columns(card) + card_column_rows[card.id] ||= {}.tap do |columns| + builder.columns.each do |col_name, block| + columns[col_name] = card.instance_exec(self, &block) end - columns["D"] = card.format_date(ready_action.date) if ready_action - - # In Progress date - columns["E"] = card.date_moved_to("In Progress") - - # Code Review date - columns["F"] = card.date_moved_to("Code Review") - - # Review date - columns["G"] = card.date_moved_to("Review") - - # Deploy date - columns["H"] = card.date_moved_to("Deploy") - - # Completed date - columns["I"] = card.date_moved_to("Completed") - - # Type - columns["J"] = card.type - - # Project - columns["K"] = card.project - - # Estimate - columns["L"] = card.estimate - - # Due Date - columns["M"] = card.due_date end end + def card_column_rows + @card_column_rows ||= {} + end + def authenticate return if @authenticated authenticate_trello authenticate_google @authenticated @@ -164,10 +150,23 @@ end end end end + def raise_missing_builder_error + message = <<-ERROR.gsub(/^ {6}/, '') + The export is not configured. Example: + + Lionel.export do + A { id } + B { name } + C { url } + end + ERROR + raise MissingBuilderError.new(message) + end + class CardMap include Enumerable attr_reader :cards, :worksheet @@ -184,14 +183,13 @@ end private def populate_rows - Lionel.logger.info "Using CardMap!!!!" {}.tap do |card_rows| - start_row = 2 + start_row = 2 # Currently assumes a header column rows = worksheet.size # Find existing rows for current cards (start_row..rows).each do |row| cell_id = worksheet["B",row] @@ -208,7 +206,8 @@ card_rows[row] = card end end end end + end end