mpk-krakow-rb

Ruby library for fetching schedules for MPK Krakow.
git clone git://vcs.sapka.me/mpk-krakow-pl
Log | Files | Refs | README

commit 1fe1d7d519a45de684dfc445da12b555eb84680c
parent 0deef7ce2c1b09458d4c39d8f7ac084e9eb11887
Author: Michal Sapka <msapka@gmail.com>
Date:   Fri,  6 Nov 2015 23:01:30 +0100

refactor

Diffstat:
Mlib/mpk_krakow_rb.rb | 1+
Alib/mpk_krakow_rb/fetchers/stops.rb | 24++++++++++++++++++++++++
Mlib/mpk_krakow_rb/stops.rb | 35++++++++++++++++-------------------
3 files changed, 41 insertions(+), 19 deletions(-)

diff --git a/lib/mpk_krakow_rb.rb b/lib/mpk_krakow_rb.rb @@ -8,6 +8,7 @@ require 'mpk_krakow_rb/version' require 'mpk_krakow_rb/stops.rb' require 'mpk_krakow_rb/stop.rb' require 'mpk_krakow_rb/fetchers/lines_for_stop' +require 'mpk_krakow_rb/fetchers/stops' module MpkKrakowRb # Your code goes here... diff --git a/lib/mpk_krakow_rb/fetchers/stops.rb b/lib/mpk_krakow_rb/fetchers/stops.rb @@ -0,0 +1,24 @@ +module MpkKrakowRb + module Fetchers + class Stops + def initialize + @url = "http://rozklady.mpk.krakow.pl/aktualne/przystan.htm" + @parser = /p(?<id>\d+).htm\W+(?<name>[^<]*)/ + end + + def fetch + stops = [] + @doc = get_content + @doc.scan(@parser).each do |stop| + stops << { id: stop[0], name: stop[1].encode("UTF-8")} + end + stops.uniq + end + + def get_content + Net::HTTP.get_response(URI(@url)).body.force_encoding("ISO-8859-2") + end + + end + end +end diff --git a/lib/mpk_krakow_rb/stops.rb b/lib/mpk_krakow_rb/stops.rb @@ -1,29 +1,26 @@ module MpkKrakowRb class Stops include Enumerable - Url = "http://rozklady.mpk.krakow.pl/aktualne/przystan.htm" - Parser = /<li><a href=\\"p\/p(?<id>\d*).htm\\">(?<name>.*)<\/a><\/li>/ - def initialize - @stops = [] - get_stops - end + def initialize + @fetcher = Fetchers::Stops.new + @stops = [] + get_stops + end - def each - return to_enum(__callee__) unless block_given? - 0.step.each do |index| - item = @stops[index] or break - yield item - end + def each + return to_enum(__callee__) unless block_given? + 0.step.each do |index| + item = @stops[index] or break + yield item end + end - private + private - def get_stops - doc = Nokogiri::HTML(open(Url)) - doc.xpath("//li").each do |stop| - parsed = stop.to_s.match(/<li><a href=\"p\/p(?<id>\d*).htm\">(?<name>.*)<\/a><\/li>/i) - @stops << Stop.new(id: parsed["id"], name: parsed["name"].encode("UTF-8")) - end + def get_stops + @fetcher.fetch.each do |stop| + @stops << Stop.new(id: stop[:id], name: stop[:name]) end + end end end