class TrelloFreestyler::Main

Public Class Methods

dump(options) click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/trello_freestyler/main.rb, line 14
def self.dump(options)
  client = TrelloFreestyler::Client.new(options.key, options.token, options.url)
  execution_datetime = Time.now.getlocal(options.timezone.current_period.offset.utc_total_offset)
  execution_date = Date.parse(execution_datetime.strftime('%Y/%m/%d')).to_s

  response_cards = client.cards(options.board_id)
  card_dump = parse_cards(response_cards.body)

  actions_dump = Struct::ActionsDump.new(
    card_dump
      .card_ids
      .map do |card_id|
      action_response = client.card_actions(card_id, options.action_types)
      parse_actions(action_response.body)
    end.flatten
  )

  basename = init_output_basename(options.output, execution_date)
  export_with_stamp(card_dump.raw, basename.join('cards.jsonl').to_s, execution_datetime, execution_date)
  export_with_stamp(actions_dump.raw, basename.join('actions.jsonl').to_s, execution_datetime, execution_date)
end
export_with_stamp(dump, to, execution_datetime, execution_date) click to toggle source
# File lib/trello_freestyler/main.rb, line 60
def self.export_with_stamp(dump, to, execution_datetime, execution_date)
  File.open(to, 'w') do |f|
    dump.each do |row|
      row[:execution_datetime] = execution_datetime.strftime('%Y-%m-%d %H:%M:%S.%L %:z')
      row[:execution_local_date] = execution_date
      f.puts row.to_json
    end
  end
end
init_output_basename(base, date) click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/trello_freestyler/main.rb, line 37
def self.init_output_basename(base, date)
  base = Pathname.new(base).join(date)
  Pathname.new(base).mkpath
  base
end
parse_actions(raw_text) click to toggle source
# File lib/trello_freestyler/main.rb, line 53
def self.parse_actions(raw_text)
  actions = JSON.parse(raw_text)
  actions.map do |action|
    Utils.deep_deep_clean(action)
  end
end
parse_cards(raw_text) click to toggle source
# File lib/trello_freestyler/main.rb, line 43
def self.parse_cards(raw_text)
  cards = JSON.parse(raw_text)
  cards.each_with_object(Struct::CardDump.new([], [])) do |card, all|
    Struct::CardDump.new(
      all.card_ids.push(card['id']),
      all.raw.push(Utils.deep_deep_clean(card))
    )
  end
end