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