commit 1fe1d7d519a45de684dfc445da12b555eb84680c
parent 0deef7ce2c1b09458d4c39d8f7ac084e9eb11887
Author: Michal Sapka <msapka@gmail.com>
Date: Fri, 6 Nov 2015 23:01:30 +0100
refactor
Diffstat:
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