;;;; search.lisp -- search function interface for oneliners wiki cli (in-package :oneliners.cli.app ) (defun search/options () "Returns a list of options for the search command." (list (cli:make-option :integer :short-name #\l :long-name "limit" :description "number of results to return" :initial-value 10 :key :limit) (cli:make-option :flag :short-name #\f :long-name "flagged" :description "only flagged oneliners are returned" :key :flagged) (cli:make-option :flag :short-name #\F :long-name "no-flagged" :description "only unflagged oneliners are returned" :key :no-flagged) (cli:make-option :flag :short-name #\n :long-name "newest" :description "the newest matching oneliners are returned" :key :newest))) (defun search/handler (cmd) "Handler function for the search command. " (let ((args (cli:command-arguments cmd)) (limit (cli:getopt cmd :limit))) (cond (args ;; if there are search terms, call the main search function (ol:search-for-oneliners args limit (cli:getopt cmd :no-flagged) (cli:getopt cmd :flagged) (cli:getopt cmd :newest))) ;; if no search terms, but --newest or -n ((cli:getopt cmd :newest) (ol::newest-oneliners limit)) ;; no args, but --flagged or -f ((cli:getopt cmd :flagged) (ol::all-flagged-oneliners limit)) (t (cli::print-usage-and-exit cmd t))))) (defparameter +search/examples+ '(("Search for oneliners involving grep and awk" . "ol search grep awk") ("Limit search to flagged oneliners (useful for contributors)" . "ol search --flagged grep awk"))) (defun search/command () "Creates a new command for interfacing with the search api." (cli:make-command :name "search" :description "search for oneliners with provided tags" :options (search/options) :handler #'search/handler :examples +search/examples+))