Sha256: d30d29a4dd033646f3b758a45fc3c0381fa1e9ed8be028abab5bf3b60a67aabe

Contents?: true

Size: 1.99 KB

Versions: 3

Compression:

Stored size: 1.99 KB

Contents

module FlightPlanCli
  module Commands
    class List
      module Color
        SWIMLANE = :cyan
        ISSUE = :yellow
        ISSUE_NO = :light_red
        CHECKED_OUT_BACKGROUND = :light_black
      end

      include FlightPlanCli::Config

      def initialize
        read_config
      end

      def process
        swimlanes = tickets_by_swimlane
        default_swimlane_ids.each do |swimlane_id|
          next unless swimlanes.key?(swimlane_id)

          print_swimlane(swimlanes[swimlane_id])
        end
      rescue ApiUnauthorized
        puts 'Unauthorize. Please ensure your key and secret as setup correctly'.red
      rescue Errno::ECONNREFUSED, SocketError => e
        # TODO: caching - low timeout (5s) then fallback to cache
        puts "Network error. #{e.message}".red
      end

      private

      def tickets_by_swimlane
        response = client.board_tickets
        raise ApiUnauthorized if response.code == 401
        raise ApiNotFound if response.code == 404

        swimlanes = {}
        response.each do |board_ticket|
          swimlane = board_ticket['swimlane']
          next unless default_swimlane_ids.include? swimlane['id']

          swimlanes[swimlane['id']] ||= swimlane
          swimlanes[swimlane['id']]['tickets'] ||= []
          swimlanes[swimlane['id']]['tickets'] << board_ticket['ticket']
        end
        swimlanes
      end

      def print_swimlane(swimlane)
        puts "#{swimlane['name']} (#{swimlane['tickets'].count})"
          .colorize(Color::SWIMLANE)

        swimlane['tickets'].each do |ticket|
          print_ticket(ticket)
        end
        puts
      end

      def print_ticket(ticket)
        checked_out = git.current_branch =~ /##{ticket['remote_number']}[^0-9]/
        line =
          "  #{ticket['remote_number']}".colorize(Color::ISSUE_NO) +
          " #{ticket['remote_title']} ".colorize(Color::ISSUE)
        line = line.colorize(background: Color::CHECKED_OUT_BACKGROUND) if checked_out

        puts line
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
flight_plan_cli-0.3.4 lib/flight_plan_cli/commands/list.rb
flight_plan_cli-0.3.3 lib/flight_plan_cli/commands/list.rb
flight_plan_cli-0.3.2 lib/flight_plan_cli/commands/list.rb