Sha256: 88d34a497c1b3305282e602eb48d29d751f9aa46b91b94d6dfa216e75975312a

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

class Ppl::Command::Mutt < Ppl::Application::Command

  attr_writer :format

  def initialize
    @name        = "mutt"
    @description = "Integration with mutt's query_command"

    @format = Ppl::Format::AddressBook::MuttQuery.new
  end

  def options(parser, options)
    parser.banner = "usage: ppl mutt <query>"
  end

  def execute(input, output)
    query = input.arguments.shift
    if query.nil?
      raise Ppl::Error::IncorrectUsage, "You must provide a query"
    end

    address_book = @storage.load_address_book

    matches = mutt_search(address_book, query)

    if matches.count > 0

      line = sprintf(
        "Searching database... %d entries... %d matching:",
        address_book.count,
        matches.count
      )

      results = @format.process(matches)

      output.line(line)
      output.line(results) unless results == ""
      true

    else
      output.line("No matches")
      false
    end

  end


  private

  def mutt_search(address_book, query)
    matches = Ppl::Entity::AddressBook.new

    address_book.each do |contact|
      next if contact.email_address.nil?

      if contact.email_address.include?(query)
        matches.add_contact(contact)
      elsif !contact.name.nil? && contact.name.include?(query)
        matches.add_contact(contact)
      end
    end

    matches
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ppl-1.3.0 lib/ppl/command/mutt.rb
ppl-1.2.0 lib/ppl/command/mutt.rb
ppl-1.1.0 lib/ppl/command/mutt.rb