class SpBus::Scrapers::Routes

Constants

ALL_ROUTES_URL
ROUTE_NUMBER_PATH
ROUTE_NUMBER_REGEX
ROUTE_PATH
SPACES
VALIDATOR_PATH
VALIDATOR_REGEX
WAY_MATCHER
WAY_PATH

Attributes

routes[R]

Public Instance Methods

fetch() click to toggle source
# File lib/spbus/scrapers/routes.rb, line 18
def fetch
  make_request
  validate_response
  build_routes
  true
end

Private Instance Methods

build_route(node) click to toggle source
# File lib/spbus/scrapers/routes.rb, line 60
def build_route(node)
  raw_number = normalize(node.css(ROUTE_NUMBER_PATH).inner_text)
  match = ROUTE_NUMBER_REGEX.match(raw_number)

  if match
    route = SpBus::Route.new(match[:number])
    route.one_way = one_way?(node)
    route
  else
    false
  end
end
build_routes() click to toggle source
# File lib/spbus/scrapers/routes.rb, line 40
def build_routes
  @routes = []

  @doc.css(ROUTE_PATH).each do |node|
    if route = build_route(node)
      @routes << route
    end
  end
end
make_request() click to toggle source
# File lib/spbus/scrapers/routes.rb, line 27
def make_request
  request = SpBus::Request.new(ALL_ROUTES_URL)
  request.authenticated = false

  @doc = Nokogiri::HTML(request.get)
end
normalize(str) click to toggle source
# File lib/spbus/scrapers/routes.rb, line 50
def normalize(str)
  str.gsub(SPACES, " ").squeeze(" ").strip
end
one_way?(node) click to toggle source
# File lib/spbus/scrapers/routes.rb, line 54
def one_way?(node)
  text = normalize(node.css(WAY_PATH).inner_text)
  match = WAY_MATCHER.match(text)
  match && !match[:two_way]
end
validate_response() click to toggle source
# File lib/spbus/scrapers/routes.rb, line 34
def validate_response
  if @doc.css(VALIDATOR_PATH).inner_text !~ VALIDATOR_REGEX
    raise SpBus::UnknownResponse
  end
end