class Lionel::Export

Attributes

options[R]

Public Class Methods

builder() click to toggle source
# File lib/lionel/export.rb, line 13
def self.builder
  @builder || ExportBuilder.default
end
builder=(builder) click to toggle source
# File lib/lionel/export.rb, line 9
def self.builder=(builder)
  @builder = builder
end
new(options = {}) click to toggle source
# File lib/lionel/export.rb, line 17
def initialize(options = {})
  @options = options
end

Public Instance Methods

authenticate() click to toggle source
# File lib/lionel/export.rb, line 116
def authenticate
  return if @authenticated
  authenticate_trello
  authenticate_google
  @authenticated
end
authenticate_google() click to toggle source
# File lib/lionel/export.rb, line 128
def authenticate_google
  google_session
  @worksheet = Lionel::ProxyWorksheet.new(spreadsheet.worksheets[0])
end
authenticate_trello() click to toggle source
# File lib/lionel/export.rb, line 123
def authenticate_trello
  trello_session.configure
  @board = Trello::Board.find(trello_board_id)
end
board() click to toggle source
# File lib/lionel/export.rb, line 28
def board
  @board ||= Trello::Board.find(trello_board_id)
end
builder() click to toggle source
# File lib/lionel/export.rb, line 100
def builder
  self.class.builder
end
card_column_rows() click to toggle source
# File lib/lionel/export.rb, line 112
def card_column_rows
  @card_column_rows ||= {}
end
card_columns(card) click to toggle source
# File lib/lionel/export.rb, line 104
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
  end
end
card_map() click to toggle source
# File lib/lionel/export.rb, line 88
def card_map
  @card_map ||= CardMap.new(cards, worksheet)
end
cards() click to toggle source
# File lib/lionel/export.rb, line 32
def cards
  # iterate over active lists rather
  # than retrieving all historical cards;
  # trello api returns association proxy
  # that does not respond to "flatten"
  @cards ||= begin
    case options.fetch('filter', 'open-lists')
    when 'open-cards'
      retrieve_open_cards
    when 'open-lists'
      retrieve_open_cards_in_open_lists
    end.map { |c| Lionel::ProxyCard.new(c) }
  end
end
data() click to toggle source
# File lib/lionel/export.rb, line 21
def data
  {
    trello_board_id: trello_board_id,
    google_doc_id: google_doc_id
  }
end
download() click to toggle source
# File lib/lionel/export.rb, line 68
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) do
        row_data = card_columns(card).map do |col, value|
          worksheet[col,row] = value
        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
end
google_session() click to toggle source
# File lib/lionel/export.rb, line 133
def google_session
  @google_session ||= GoogleDrive.login_with_oauth(configuration.google_token)
end
process() click to toggle source
# File lib/lionel/export.rb, line 55
def process
  download

  if options['print']
    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
raise_missing_builder_error() click to toggle source
# File lib/lionel/export.rb, line 155
    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
retrieve_open_cards() click to toggle source
# File lib/lionel/export.rb, line 141
def retrieve_open_cards
  board.cards(filter: :open)
end
retrieve_open_cards_in_open_lists() click to toggle source
# File lib/lionel/export.rb, line 145
def retrieve_open_cards_in_open_lists
  [].tap do |c|
    board.lists(filter: :open).each do |list|
      list.cards(filter: :open).each do |card|
        c << card
      end
    end
  end
end
rows() click to toggle source
# File lib/lionel/export.rb, line 96
def rows
  worksheet.rows
end
spreadsheet() click to toggle source
# File lib/lionel/export.rb, line 47
def spreadsheet
  @spreadsheet ||= google_session.spreadsheet_by_key(google_doc_id)
end
trello_session() click to toggle source
# File lib/lionel/export.rb, line 137
def trello_session
  @trello_session ||= TrelloAuthentication.new
end
upload() click to toggle source
# File lib/lionel/export.rb, line 92
def upload
  worksheet.save
end
worksheet() click to toggle source
# File lib/lionel/export.rb, line 51
def worksheet
  @worksheet ||= get_worksheet
end