class Lita::Handlers::Wtf
Constants
- SOURCE_NAMES
Public Instance Methods
define(response)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 55 def define(response) term = response.match_data['term'] info = response.match_data['definition'] write(term, info, response.user.id) response.reply(format_definition(term, definition(term))) end
lookup(response)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 39 def lookup(response) term = response.match_data['term'] return response.reply(format_definition(term, definition(term))) if known?(term) definition, source_name = alternate_definition(term) if definition return response.reply(t('wtf.seealso', term: term, definition: definition, source: SOURCE_NAMES[source_name])) end response.reply(t('wtf.unknown', term: term)) end
Private Instance Methods
alternate_definition(term)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 81 def alternate_definition(term) config.see_also.each do |source_name| definition = send("lookup_#{source_name}", term) return definition, source_name if definition end nil end
definition(term)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 72 def definition(term) redis.hget(term.downcase, 'definition') end
format_definition(term, definition)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 64 def format_definition(term, definition) t('wtf.is', term: term, definition: definition) end
format_merriam_entries(content)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 104 def format_merriam_entries(content) nokogiri_dom = Nokogiri::XML(content) do |config| config.options = Nokogiri::XML::ParseOptions::STRICT | Nokogiri::XML::ParseOptions::NONET end nokogiri_dom.css('//entry[1]/def/dt/text()').to_s[1..-1] rescue StandardError nil end
known?(term)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 68 def known?(term) redis.exists(term.downcase) end
lookup_merriam(term)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 90 def lookup_merriam(term) api_key = config.api_keys['merriam'] # FIXME: Add timeouts. response = http.get('http://www.dictionaryapi.com/api/v1/'\ "references/collegiate/xml/#{term}", key: api_key) raise unless response.status == 200 format_merriam_entries(response.body) rescue StandardError nil end
lookup_urbandictionary(term)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 115 def lookup_urbandictionary(term) # FIXME: Add timeouts. response = http.get('http://api.urbandictionary.com/v0/define', term: term) def_list = JSON.parse(response.body)['list'] def_text = def_list[0]['definition'].strip def_text[0] = def_text[0].chr.downcase def_text rescue StandardError nil end
write(term, definition, owner)
click to toggle source
# File lib/lita/handlers/wtf.rb, line 76 def write(term, definition, owner) redis.hset(term.downcase, 'definition', definition) redis.hset(term.downcase, 'owner', owner) end