Sha256: 97153073449556de909ed51be606af2c073733b73245a888cab0307e0bade8c2

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

require 'rest_client'
require 'nokogiri'

module Lita
  module Handlers
    class OnewheelWolframAlpha < Handler
      config :app_id
      config :api_uri

      route(/^alpha\s*(.*)/i, :handle_wolfram_query, command: true)

      def handle_wolfram_query(response)
        unless config.app_id and config.api_uri
          Lita.logger.error 'Configuration error!'
          return
        end
        query = response.matches[0][0]
        api_response = make_api_call query
        response.reply api_response
      end

      def make_api_call(query)
        uri = build_uri query
        response = RestClient.get(uri)
        noko_doc = Nokogiri::XML response.to_s
        success_node = noko_doc.xpath('queryresult').attribute('success')
        if success_node.to_s == 'true'
          plaintext_nodes = noko_doc.xpath('//plaintext')
          plaintext_nodes[1].child.to_s
        else
          "Wolfram couldn't parse #{query}."
        end
      end

      def build_uri(query)
        uri = config.api_uri.sub '[query]', CGI::escape(query)
        uri = uri.sub '[appid]', config.app_id
      end
    end
    Lita.register_handler(OnewheelWolframAlpha)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lita-onewheel-wolfram-alpha-0.0.0 lib/lita/handlers/onewheel_wolfram_alpha.rb