Sha256: 8c002975674c6d4e8e73ff339162954768f358fee2c8aea23edc586027c04330

Contents?: true

Size: 1.43 KB

Versions: 2

Compression:

Stored size: 1.43 KB

Contents

module Reponaut
  module Application
    class List < Command
      def initialize(prog)
        prog.command(:list) do |c|
          c.alias :ls
          c.syntax 'list [options] <username> [language]'
          c.description "List a user's repos"
          c.option 'ignore_forks', '-f', 'Ignore forks'
          c.option 'show_description', '-d', 'Show repo description'
          c.option 'show_language', '-l', 'Show repo language'

          c.action do |args, options|
            process(options, args)
          end
        end
      end

      def process(options, args)
        super

        language = args[1]

        quit 6, 'Only one of -l and -d may be specified' if options['show_description'] && options['show_language']

        filtered_repos = repos
        filtered_repos = filtered_repos.select { |r| r.language.downcase == language.downcase } if language
        if filtered_repos.empty?
          msg = "#{username} has no repositories"
          msg += " written in #{language}" if language
          quit 4, msg
        end

        formatter = formatter_class(options).new
        filtered_repos.sort.each do |r|
          puts formatter.format(r)
        end
      end

      private

      def formatter_class(options)
        if options['show_description']
          LongPresenter
        elsif options['show_language']
          LanguagePresenter
        else
          SimplePresenter
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
reponaut-2.1.1 lib/reponaut/commands/list.rb
reponaut-2.1.0 lib/reponaut/commands/list.rb