class SpBus::Scrapers::RouteDetails

Constants

URL

Public Class Methods

new(route) click to toggle source
# File lib/spbus/scrapers/route_details.rb, line 6
def initialize(route)
  @route = route
end

Public Instance Methods

fetch() click to toggle source
# File lib/spbus/scrapers/route_details.rb, line 10
def fetch
  doc = SpBus::Request.new(url_with_params).get
  @json = JSON.parse(doc, symbolize_names: true)

  validate_response
  build_route

  true
rescue OpenURI::HTTPError => e
  if e.io && e.io.status.first.to_i == 500
    raise SpBus::InvalidRoute
  else
    raise e
  end
end

Private Instance Methods

build_route() click to toggle source
# File lib/spbus/scrapers/route_details.rb, line 42
def build_route
  origin      = find_origin
  destination = find_destination

  @route.origin    = origin[:DenominacaoTSTP]
  @route.origin_id = origin[:CodigoLinha] unless @route.one_way?

  @route.destination    = destination[:DenominacaoTPTS]
  @route.destination_id = destination[:CodigoLinha]
end
find_destination() click to toggle source
# File lib/spbus/scrapers/route_details.rb, line 57
def find_destination
  @json.select { |h| h[:Sentido] == 1 }.first
end
find_origin() click to toggle source
# File lib/spbus/scrapers/route_details.rb, line 53
def find_origin
  @json.select { |h| h[:Sentido] == 2 }.first
end
url_with_params() click to toggle source
# File lib/spbus/scrapers/route_details.rb, line 28
def url_with_params
  params = URI.encode_www_form(termosBusca: @route.number)
  "#{URL}?#{params}"
end
validate_response() click to toggle source
# File lib/spbus/scrapers/route_details.rb, line 33
def validate_response
  if @json.nil? ||
     @json.size != 2 ||
     @json[0][:DenominacaoTSTP] != @json[1][:DenominacaoTSTP] ||
     @json[0][:DenominacaoTPTS] != @json[1][:DenominacaoTPTS]
    raise SpBus::UnknownResponse
  end
end