Skip to content

Instantly share code, notes, and snippets.

@davidrichards
Created September 15, 2017 15:30
Show Gist options
  • Select an option

  • Save davidrichards/c99ad0d5a024011718e0360fc0773156 to your computer and use it in GitHub Desktop.

Select an option

Save davidrichards/c99ad0d5a024011718e0360fc0773156 to your computer and use it in GitHub Desktop.

Revisions

  1. davidrichards created this gist Sep 15, 2017.
    74 changes: 74 additions & 0 deletions auto_suggest
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,74 @@
    #!/usr/bin/env ruby

    require 'json'
    require 'yaml'

    class AutoSuggest

    def self.call(*args)
    new(*args).call
    end

    attr_reader :term

    def initialize(term)
    @term = term
    end

    def cmd
    @cmd ||= <<-CMD
    curl -G --data-urlencode "q=#{term}" --data-urlencode "client=chrome" http://suggestqueries.google.com/complete/search
    CMD
    end

    def result
    @result ||= `#{cmd}`
    end

    def list
    @list ||= JSON.parse(result) rescue []
    end

    def returned_term
    @returned_term ||= list[0]
    end

    def suggestions
    @suggestions ||= list[1]
    @suggestions ||= []
    end

    def meta
    @meta ||= list[4]
    @meta ||= {}
    end

    def relevance
    @relevance ||= meta.fetch("google:suggestrelevance", [])
    end

    def types
    @types ||= meta.fetch("google:suggesttype", [])
    end

    def object
    @object ||= {
    "term" => returned_term,
    "suggestions" => suggestions,
    "relevance" => suggestions.zip(relevance),
    "types" => suggestions.zip(types)
    }
    end

    def yaml
    @yaml ||= YAML.dump(object)
    end

    def call
    yaml
    end
    end

    if __FILE__ == $0
    puts AutoSuggest.call(ARGV[0])
    end