Sha256: 4dc05bccaf2e38bfb759efc224e91ce6f8c49108c8b239b07092edc5b80f4c3c

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

require "nokogiri"

module PunkyBrewster
  class BeerListResponse
    IMAGE_URL_BASE = 'http://www.punkybrewster.co.nz'

    def initialize(raw_response)
      @raw_response = raw_response
    end

    def beers
      @beers ||= begin
        content = document.at_css('#content')
        divide = content.at_css('.styled-hr')
        past_divide = false
        beer_list = []

        content.traverse do |node|
          past_divide = true if node == divide
          next unless past_divide

          if node.name == 'h2'
            beer_list << Beer.new
            # Includes non-breaking spaces
            beer_list.last.name = node.text.upcase.gsub(/[\s\u00A0]+/, ' ')
          elsif node.name == 'img'
            beer_list.last.image_url = IMAGE_URL_BASE + node[:src]
          elsif price = node.text.scan(/^\$(\d+\.\d+)\/L$/).flatten.first
            beer_list.last.price = price.to_f
          elsif abv = node.text.scan(/(\d+\.\d+)\s*%/).flatten.first
            beer_list.last.abv = abv.to_f
          end
        end

        beer_list
      end
    end

    private

    def document
      @document ||= Nokogiri::HTML(@raw_response.body)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
punky_brewster-1.3.0 lib/punky_brewster/beer_list_response.rb