class Lita::Handlers::OnewheelBeerUpperlip
Public Instance Methods
get_abv(beer_desc)
click to toggle source
# File lib/lita/handlers/onewheel_beer_upperlip.rb, line 118 def get_abv(beer_desc) if (abv_matches = beer_desc.match(/\d+\.\d+%/)) abv_matches.to_s.sub '%', '' end end
get_beer_desc(noko)
click to toggle source
Return the desc of the beer, “Amber ale 6.9%”
# File lib/lita/handlers/onewheel_beer_upperlip.rb, line 125 def get_beer_desc(noko) beer_desc = '' if (beer_desc_matchdata = noko.to_s.gsub(/\n/, '').match(/(<br\s*\/*>)(.+%) /)) beer_desc = beer_desc_matchdata[2].gsub(/\s+/, ' ').strip end beer_desc end
get_brewery(noko)
click to toggle source
Get the brewery from the node, return it or blank.
# File lib/lita/handlers/onewheel_beer_upperlip.rb, line 134 def get_brewery(noko) brewery = '' if (node = noko.css('span a').first) brewery = node.children.to_s.gsub(/\n/, '') brewery.gsub! /RBBA/, '' brewery.strip! end brewery end
get_source()
click to toggle source
# File lib/lita/handlers/onewheel_beer_upperlip.rb, line 73 def get_source # https://visualizeapi.com/api/upperlip Lita.logger.debug "get_source started" unless (response = redis.get('page_response')) Lita.logger.info 'No cached result found, fetching.' response = RestClient.get('http://theupperlip.net/draft/') redis.setex('page_response', 1800, response) end # response.gsub! '<div id="responsecontainer"">', '' parse_response response end
get_tap_name(noko)
click to toggle source
Returns 1, 2, Cask 3, Nitro 4…
# File lib/lita/handlers/onewheel_beer_upperlip.rb, line 145 def get_tap_name(noko) noko.css('span').first.children.to_s end
parse_response(response)
click to toggle source
This is the worker bee- decoding the html into our “standard” document. Future implementations could simply override this implementation-specific code to help this grow more widely.
# File lib/lita/handlers/onewheel_beer_upperlip.rb, line 88 def parse_response(response) Lita.logger.debug "parse_response started." gimme_what_you_got = {} noko = Nokogiri.HTML response tap = 0 noko.css('div#boxfielddata').each do |beer_node| # gimme_what_you_got tap = tap + 1 tap_name = get_tap_name(beer_node) remaining = beer_node.attributes['title'].to_s brewery = get_brewery(beer_node) beer_name = beer_node.css('span i').first.children.to_s beer_desc = get_beer_desc(beer_node) abv = get_abv(beer_desc) full_text_search = "#{brewery} #{beer_name} #{beer_desc.to_s.gsub /\d+\.*\d*%*/, ''}" gimme_what_you_got[tap] = { remaining: remaining, brewery: brewery.to_s, name: beer_name.to_s, desc: beer_desc.to_s, abv: abv.to_f, search: full_text_search } end gimme_what_you_got end
send_response(tap, datum, response)
click to toggle source
# File lib/lita/handlers/onewheel_beer_upperlip.rb, line 60 def send_response(tap, datum, response) reply = "Bailey's Upperlip tap #{tap}) #{get_tap_type_text(datum[:type])}" reply += "#{datum[:brewery]} " reply += "#{datum[:name]} " reply += "- #{datum[:desc]}, " # reply += "Served in a #{datum[1]['glass']} glass. " reply += "#{datum[:remaining]}" Lita.logger.info "send_response: Replying with #{reply}" response.reply reply end
taps_list(response)
click to toggle source
# File lib/lita/handlers/onewheel_beer_upperlip.rb, line 44 def taps_list(response) # wakka wakka beers = self.get_source reply = "Bailey's Upperlip tap: " beers.each do |tap, datum| reply += "#{tap}) " reply += get_tap_type_text(datum[:type]) reply += datum[:brewery].to_s + ' ' reply += (datum[:name].to_s.empty?)? '' : datum[:name].to_s + ' ' end reply = reply.strip.sub /,\s*$/, '' Lita.logger.info "Replying with #{reply}" response.reply reply end