lpp 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: cb1739cd18e257f19749f3fce7a91c028041136e
4
+ data.tar.gz: 1c809827fbd3f903282a2bfad738fef1932e4eeb
5
+ !binary "U0hBNTEy":
6
+ metadata.gz: 6d123acc7935cf2ad5c7b5443161fbe1a949c38ff5a6c9522c1096d26742b8e8b1e0ae1ff2f5ae9baac015672c716e10f3cdde31e3861e998a89b1e29f44cedb
7
+ data.tar.gz: b6d619e0e866f1f88bd518c28d72fa35edfc0403ee5842d7837f468ef3f26c5132ec7b32788c27b0d04cf71989dc2ef0435674c28f36dadf228192277579ee93
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in lpp.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Jure Triglav
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # Lpp
2
+
3
+ Lpp is a simple gem for getting bus arrivals in Ljubljana. It uses the wbus.talktrack.com website.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'lpp'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install lpp
18
+
19
+ ## Usage examples
20
+
21
+ If you query Lpp to get arrivals from the main bus station in Ljubljana, Bavarski dvor:
22
+ Lpp.arrivals('bavarski')
23
+
24
+ You'll be returned a hash similar to this:
25
+ {"600012"=>
26
+ {:name=>"BAVARSKI DVOR",
27
+ :buses=>
28
+ {"1N BROD - BAVARSKI DVOR"=>
29
+ {:route=>"BROD - BAVARSKI DVOR",
30
+ :bus_number=>"1N",
31
+ :arrivals=>
32
+ [{:time=>"02:59", :easy=>false},
33
+ {:time=>"03:24", :easy=>false},
34
+ {:time=>"04:05", :easy=>false}]},
35
+ "3 LITOSTROJ - RUDNIK"=>
36
+ {:route=>"LITOSTROJ - RUDNIK",
37
+ :bus_number=>"3",
38
+ :arrivals=>[{:time=>"21:01", :easy=>false}]},
39
+ "3L BAVARSKI DVOR - TOVARNA LEK"=>
40
+ {:route=>"BAVARSKI DVOR - TOVARNA LEK",
41
+ :bus_number=>"3L",
42
+ :arrivals=>[{:time=>"21:25", :easy=>false}]},
43
+ "3N KOFLJICA - BAVARSKI DVOR"=>
44
+ {:route=>"KOFLJICA - BAVARSKI DVOR",
45
+ :bus_number=>"3N",
46
+ :arrivals=>[{:time=>"21:37", :easy=>false}]}}},
47
+ "600011"=>
48
+ {:name=>"BAVARSKI DVOR",
49
+ :buses=>
50
+ {"1N VIMARJE - BAVARSKI DVOR"=>
51
+ {:route=>"VIMARJE - BAVARSKI DVOR",
52
+ :bus_number=>"1N",
53
+ :arrivals=>[{:time=>"22:55", :easy=>false}]},
54
+ "2 NOVE JARE - ZELENA JAMA"=>
55
+ {:route=>"NOVE JARE - ZELENA JAMA",
56
+ :bus_number=>"2",
57
+ :arrivals=>
58
+ [{:time=>"21:30", :easy=>true},
59
+ {:time=>"21:47", :easy=>false},
60
+ {:time=>"21:58", :easy=>false}]}}}}
61
+
62
+ You can also get arrivals only for a specific bus number:
63
+ Lpp.arrivals_for_bus('bavarski', 6)
64
+
65
+ And you'll get only the arrivals that match bus number 6 (6, 6B, etc.)
66
+ {"600012"=>
67
+ {:name=>"BAVARSKI DVOR",
68
+ :buses=>
69
+ {"6 ČRNUČE - DOLGI MOST"=>
70
+ {:route=>"ČRNUČE - DOLGI MOST",
71
+ :bus_number=>"6",
72
+ :arrivals=>
73
+ [{:time=>"21:25", :easy=>true},
74
+ {:time=>"21:48", :easy=>false},
75
+ {:time=>"22:00", :easy=>false}]},
76
+ "6 ČRNUČE - GARAŽA"=>
77
+ {:route=>"ČRNUČE - GARAŽA",
78
+ :bus_number=>"6",
79
+ :arrivals=>[{:time=>"00:53", :easy=>false}]},
80
+ "6B ČRNUČE - NOTRANJE GORICE"=>
81
+ {:route=>"ČRNUČE - NOTRANJE GORICE",
82
+ :bus_number=>"6B",
83
+ :arrivals=>
84
+ [{:time=>"21:41", :easy=>false},
85
+ {:time=>"22:28", :easy=>true},
86
+ {:time=>"04:47", :easy=>false}]}}},
87
+ "600011"=>
88
+ {:name=>"BAVARSKI DVOR",
89
+ :buses=>
90
+ {"6B NOTRANJE GORICE - GARAŽA"=>
91
+ {:route=>"NOTRANJE GORICE - GARAŽA",
92
+ :bus_number=>"6B",
93
+ :arrivals=>[{:time=>"23:30", :easy=>true}]},
94
+ "6 DOLGI MOST - ČRNUČE"=>
95
+ {:route=>"DOLGI MOST - ČRNUČE",
96
+ :bus_number=>"6",
97
+ :arrivals=>
98
+ [{:time=>"21:45", :easy=>true},
99
+ {:time=>"22:16", :easy=>false},
100
+ {:time=>"23:40", :easy=>false}]},
101
+ "6 DOLGI MOST - GARAŽA"=>
102
+ {:route=>"DOLGI MOST - GARAŽA",
103
+ :bus_number=>"6",
104
+ :arrivals=>
105
+ [{:time=>"22:44", :easy=>false},
106
+ {:time=>"00:52", :easy=>false},
107
+ {:time=>"09:24", :easy=>false}]},
108
+ "6B NOTRANJE GORICE - ČRNUČE"=>
109
+ {:route=>"NOTRANJE GORICE - ČRNUČE",
110
+ :bus_number=>"6B",
111
+ :arrivals=>
112
+ [{:time=>"21:28", :easy=>false},
113
+ {:time=>"21:58", :easy=>true},
114
+ {:time=>"22:31", :easy=>true}]}}}}
115
+
116
+ That's it.
117
+
118
+ ## Contributing
119
+
120
+ 1. Fork it
121
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
122
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
123
+ 4. Push to the branch (`git push origin my-new-feature`)
124
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'test'
7
+ end
8
+
9
+ desc "Run tests"
10
+ task :default => :test
data/lib/lpp.rb ADDED
@@ -0,0 +1,70 @@
1
+ # encoding: UTF-8
2
+
3
+ require "lpp/version"
4
+ require 'net/http'
5
+ require 'nokogiri'
6
+ require 'open-uri'
7
+ require 'pry'
8
+
9
+ module Lpp
10
+ REGEX = /NAPOVED PRIHODOV ZA (.+?) \((.+?)\)(.+?)(?:NAPOVED PRIHODOV ZA (.+?) \((.+?)\)(.+?))?Napovedi/m
11
+
12
+ def self.arrivals(station)
13
+ uri = URI('http://wbus.talktrack.com/wap.aspx')
14
+ res = Net::HTTP.post_form(uri,
15
+ '__EVENTTARGET' => '',
16
+ '__EVENTARGUMENT' => '',
17
+ 'tb_postaja' => station,
18
+ 'b_send' => 'Prika%C5%BEi')
19
+
20
+ text = Nokogiri::HTML(res.body).text
21
+
22
+ raise 'Station not found' if /Postaje s tem imenom nismo našli/.match(text)
23
+
24
+ matches = REGEX.match(text)
25
+ result = Hash.new
26
+
27
+ result[matches[2]] = {name: matches[1], buses: parse(matches[3])}
28
+
29
+ # Twice if there are two statons
30
+ if matches[4]
31
+ result[matches[5]] = {name: matches[4], buses: parse(matches[6])}
32
+ end
33
+
34
+ result
35
+ end
36
+
37
+ def self.arrivals_for_bus(station, bus)
38
+ arrivals = arrivals(station)
39
+ result = Hash.new
40
+ arrivals.each do |station_key, station_value|
41
+ buses = station_value[:buses].select do |bus_entry|
42
+ bus_entry =~ /^#{bus}/
43
+ end
44
+ if !buses.empty?
45
+ result[station_key] = {name: station_value[:name], buses: buses}
46
+ end
47
+ end
48
+ result
49
+ end
50
+
51
+ def self.parse(buses)
52
+ result = Hash.new
53
+ buses.strip.split("\r\n").each do |bus|
54
+ matches = /(\d+)(?:\s+(.))? (.*?)\:(?:\s(n))? (\d+\:\d+)(?:,(?:\s(n))? (\d+\:\d+))?(?:,(?:\s(n))? (\d+\:\d+))?/.match(bus)
55
+ if matches
56
+ times = ([matches[5]] + [matches[7]] + [matches[9]]).compact
57
+ easy = ([matches[4]] + [matches[6]] + [matches[8]])
58
+ bus_number = matches[1]+matches[2].to_s
59
+ result[bus_number + " " + matches[3]] = {
60
+ route: matches[3],
61
+ bus_number: bus_number,
62
+ arrivals: times.each_with_index.map do |time, index|
63
+ {time: time, easy: easy[index] == 'n'}
64
+ end
65
+ }
66
+ end
67
+ end
68
+ result
69
+ end
70
+ end
@@ -0,0 +1,3 @@
1
+ module Lpp
2
+ VERSION = "0.0.1"
3
+ end
data/lpp.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'lpp/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "lpp"
8
+ spec.version = Lpp::VERSION
9
+ spec.authors = ["Jure Triglav"]
10
+ spec.email = ["juretriglav@gmail.com"]
11
+ spec.description = %q{LPP is a simple gem for getting bus arrivals in Ljubljana. It uses the wbus.talktrack.com website.}
12
+ spec.summary = %q{Ljubljana bus arrivals gem}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "pry"
23
+ # Tests
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "webmock"
26
+
27
+ spec.add_dependency "nokogiri", "~> 1.5"
28
+ end
@@ -0,0 +1,99 @@
1
+ <html><body>
2
+ <form id="Form1" name="Form1" method="post" action="wap.aspx?__ufps=369864">
3
+ <input type="hidden" name="__EVENTTARGET" value="">
4
+ <input type="hidden" name="__EVENTARGUMENT" value="">
5
+ <script language=javascript><!--
6
+ function __doPostBack(target, argument){
7
+ var theform = document.Form1
8
+ theform.__EVENTTARGET.value = target
9
+ theform.__EVENTARGUMENT.value = argument
10
+ theform.submit()
11
+ }
12
+ // -->
13
+ </script>
14
+ NAPOVED PRIHODOV ZA BAVARSKI DVOR (600012)<br>
15
+ 1 N BROD - BAVARSKI DVOR: 02:59, 03:24, 04:05<br>
16
+ 1 N BAVARSKI DVOR - BROD: 23:40, 00:20, 02:50<br>
17
+ 1 N BAVARSKI DVOR - VIŽMARJE: 04:50<br>
18
+ 1 N MESTNI LOG - BAVARSKI DVOR - GAMELJNE: 22:28, 22:58<br>
19
+ 1 N GAMELJNE - BAVARSKI DVOR: 23:34, 00:14<br>
20
+ 2 ZELENA JAMA - GARAŽA: n 00:42<br>
21
+ 2 ZELENA JAMA - NOVE JARŠE: n 21:28, n 21:44, 21:59<br>
22
+ 3 L TOVARNA LEK - BAVARSKI DVOR: 22:16<br>
23
+ 3 N BAVARSKI DVOR - RUDNIK: 21:40, n 22:00, 22:20<br>
24
+ 3 N BAVARSKI DVOR - ŠKOFLJICA: 04:50, 21:20<br>
25
+ 3 LITOSTROJ - RUDNIK: 21:01<br>
26
+ 3 L BAVARSKI DVOR - TOVARNA LEK: 21:25<br>
27
+ 3 N ŠKOFLJICA - BAVARSKI DVOR: 21:37<br>
28
+ 3 G BEŽIGRAD - GROSUPLJE: 21:35, 22:35, 23:44<br>
29
+ 5 N ŠTEPANJSKO NAS. - PODUTIK: 21:30, 22:00, n 22:29<br>
30
+ 6 ČRNUČE - DOLGI MOST: n 21:25, 21:48, 22:00<br>
31
+ 6 ČRNUČE - GARAŽA: 00:53<br>
32
+ 6 B ČRNUČE - NOTRANJE GORICE: 21:41, n 22:28, 04:47<br>
33
+ 7 NOVE JARŠE - PRŽAN: n 21:23, 21:43, 05:13<br>
34
+ 7 NOVE JARŠE - GARAŽA: n 22:38, 23:00, 08:22<br>
35
+ 7 L LETALIŠKA - PRŽAN: 22:04, n 22:28, 05:55<br>
36
+ 8 BRNČIČEVA - GAMELJNE: 21:40, n 22:00, 05:18<br>
37
+ 8 BRNČIČEVA - GARAŽA: 22:22, n 22:42<br>
38
+ 9 ŠTEPANJSKO NAS. - GARAŽA: 22:44, 23:02, 11:16<br>
39
+ 9 ŠTEPANJSKO NAS. - TRNOVO: 21:30, 21:47, n 22:09<br>
40
+ 11 BEŽIGRAD - ZALOG: 21:44, n 22:19, 22:59<br>
41
+ 11 JEŽICA - ZALOG: 05:06, 05:08, 05:24<br>
42
+ 14 SAVLJE - VRHOVCI: n 21:43, 22:04, 22:29<br>
43
+ 14 B SAVLJE - BOKALCE: 05:28, 05:55, 06:07<br>
44
+ 14 SAVLJE - GARAŽA: n 22:34, n 22:58, 09:23<br>
45
+ 19 I TOMAČEVO - IG: 10:48<br>
46
+ 19 I TOMAČEVO - GARAŽA: 08:03, 08:28, 08:53<br>
47
+ 19 B TOMAČEVO - JEZERO: n 21:58, n 22:44, 04:34<br>
48
+ 19 I TOMAČEVO - IŠKA VAS: 21:38, 22:18, 22:57<br>
49
+ 20 NOVE STOŽICE - GARAŽA: 22:52<br>
50
+ 20 NOVE STOŽICE - FUŽINE: 21:34, n 21:54, n 22:13<br>
51
+ 23 KOLODVOR - ZOO: 09:02, 10:02, 12:02<br>
52
+ 25 ZADOBROVA - MEDVODE: n 21:36, 22:36, 05:04<br>
53
+ 25 ZADOBROVA - GARAŽA: n 23:34<br>
54
+ 27 LETALIŠKA - GARAŽA: n 22:28, 22:48, 00:15<br>
55
+ 27 LETALIŠKA - BTC - NS RUDNIK: n 21:28, 21:48, 22:08<br>
56
+ 27 B LETALIŠKA - BTC - BLEIWEISOVA: 23:23<br>
57
+ 51 LJUBLJANA-POLHOV GRADEC: 22:46, 05:36, 06:27<br>
58
+ 56 LJUBLJANA-ŠENTJOŠT: 22:36, 05:21, 06:41<br>
59
+ NAPOVED PRIHODOV ZA BAVARSKI DVOR (600011)<br>
60
+ 1 N VIŽMARJE - BAVARSKI DVOR: 22:55<br>
61
+ 2 NOVE JARŠE - ZELENA JAMA: n 21:30, 21:47, 21:58<br>
62
+ 2 NOVE JARŠE - GARAŽA: 00:31, n 01:06<br>
63
+ 3 G GROSUPLJE - BEŽIGRAD : 22:24, 23:25, 05:04<br>
64
+ 5 N PODUTIK - ŠTEPANJSKO NAS.: n 21:32, 21:59, 22:29<br>
65
+ 6 B NOTRANJE GORICE - GARAŽA: n 23:30<br>
66
+ 6 DOLGI MOST - ČRNUČE: n 21:45, 22:16, 23:40<br>
67
+ 6 DOLGI MOST - GARAŽA: 22:44, 00:52, 09:24<br>
68
+ 6 B NOTRANJE GORICE - ČRNUČE: 21:28, n 21:58, n 22:31<br>
69
+ 7 L PRŽAN - LETALIŠKA: 21:24, n 21:45, 05:14<br>
70
+ 7 PRŽAN - NOVE JARŠE: n 22:04, 22:28, 07:41<br>
71
+ 8 GAMELJNE - BRNČIČEVA: 21:38, n 22:01, 05:27<br>
72
+ 9 TRNOVO - GARAŽA: n 22:33, n 22:53<br>
73
+ 9 TRNOVO - ŠTEPANJSKO NAS.: n 21:27, n 21:49, 22:09<br>
74
+ 11 ZALOG - GARAŽA: n 00:40, 01:20<br>
75
+ 11 ZALOG - JEŽICA: 05:29, 05:44, 05:57<br>
76
+ 11 ZALOG - BEŽIGRAD: n 21:47, n 22:00, 22:20<br>
77
+ 13 SOSTRO - GARAŽA: 21:31, n 22:29, n 23:19<br>
78
+ 13 SOSTRO - CENTER STOŽICE: n 21:26, n 22:01, 05:16<br>
79
+ 14 VRHOVCI - SAVLJE: n 22:29, 05:15, 05:29<br>
80
+ 14 VRHOVCI - GARAŽA: 21:43, 22:36, 23:01<br>
81
+ 14 B BOKALCE - SAVLJE: 21:44, n 22:04, 05:44<br>
82
+ 19 IG AP - GARAŽA: 08:21<br>
83
+ 19 B JEZERO - GARAŽA: n 22:59, 23:34, n 23:39<br>
84
+ 19 B JEZERO - TOMAČEVO: 21:42, 22:26, 05:21<br>
85
+ 19 I IŠKA VAS - TOMAČEVO: n 22:08, 05:12, 05:44<br>
86
+ 19 I IŠKA VAS - GARAŽA: 22:41, 23:21, 23:56<br>
87
+ 20 FUŽINE - NOVE STOŽICE: n 21:34, n 21:56, n 22:16<br>
88
+ 20 FUŽINE - GARAŽA: n 22:58, n 23:16<br>
89
+ 23 ZOO - KOLODVOR: 10:30, 12:30, 16:31<br>
90
+ 25 MEDVODE - ZADOBROVA: 21:35, n 22:49, 05:28<br>
91
+ 27 NS RUDNIK - BTC - LETALIŠKA: 21:24, n 21:45, 22:05<br>
92
+ 27 NS RUDNIK - GARAŽA: 22:43, 17:54<br>
93
+ 27 B BLEIWEISOVA - BTC - LETALIŠKA: 23:40<br>
94
+ 51 POLHOV GRADEC-LJUBLJANA: 21:33, 05:31, 06:19<br>
95
+ 56 ŠENTJOŠT-LJUBLJANA: 22:06, 05:15, 06:26<br>
96
+ Napovedi so bile izračunane ob 21:23.<br>
97
+ Časi, označeni s črko n , pomenijo prihode nizkopodnih avtobusov, na katere je lažje vstopiti.<br>
98
+ <a href="wap.aspx?culture=sl-SI">Nazaj</a><br>
99
+ </form></body></html>
@@ -0,0 +1,16 @@
1
+ <html><body>
2
+ <form id="Form1" name="Form1" method="post" action="wap.aspx?__ufps=712679">
3
+ <input type="hidden" name="__EVENTTARGET" value="">
4
+ <input type="hidden" name="__EVENTARGUMENT" value="">
5
+ <script language=javascript><!--
6
+ function __doPostBack(target, argument){
7
+ var theform = document.Form1
8
+ theform.__EVENTTARGET.value = target
9
+ theform.__EVENTARGUMENT.value = argument
10
+ theform.submit()
11
+ }
12
+ // -->
13
+ </script>
14
+ Postaje s tem imenom nismo našli, poizkusite znova!<br>
15
+ <a href="wap.aspx?culture=sl-SI">Nazaj</a><br>
16
+ </form></body></html>
@@ -0,0 +1 @@
1
+ require 'webmock/test_unit'
data/test/test_lpp.rb ADDED
@@ -0,0 +1,592 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test/unit'
4
+ require 'lpp'
5
+ require 'test_helper'
6
+
7
+ class LppTest < Test::Unit::TestCase
8
+ def test_parsing
9
+ response = File.read(File.join(File.dirname(__FILE__), 'response.html'))
10
+ stub_request(:any, /wbus.talktrack.com\/.*/).
11
+ to_return(:body => response, :status => 200, :headers => { 'Content-Length' => response.length } )
12
+
13
+ arrivals = Lpp.arrivals('bavarski')
14
+
15
+ result_hash = {"600012"=>
16
+ {:name=>"BAVARSKI DVOR",
17
+ :buses=>
18
+ {"1N BROD - BAVARSKI DVOR"=>
19
+ {:route=>"BROD - BAVARSKI DVOR",
20
+ :bus_number=>"1N",
21
+ :arrivals=>
22
+ [{:time=>"02:59", :easy=>false},
23
+ {:time=>"03:24", :easy=>false},
24
+ {:time=>"04:05", :easy=>false}]},
25
+ "1N BAVARSKI DVOR - BROD"=>
26
+ {:route=>"BAVARSKI DVOR - BROD",
27
+ :bus_number=>"1N",
28
+ :arrivals=>
29
+ [{:time=>"23:40", :easy=>false},
30
+ {:time=>"00:20", :easy=>false},
31
+ {:time=>"02:50", :easy=>false}]},
32
+ "1N BAVARSKI DVOR - VIŽMARJE"=>
33
+ {:route=>"BAVARSKI DVOR - VIŽMARJE",
34
+ :bus_number=>"1N",
35
+ :arrivals=>[{:time=>"04:50", :easy=>false}]},
36
+ "1N MESTNI LOG - BAVARSKI DVOR - GAMELJNE"=>
37
+ {:route=>"MESTNI LOG - BAVARSKI DVOR - GAMELJNE",
38
+ :bus_number=>"1N",
39
+ :arrivals=>
40
+ [{:time=>"22:28", :easy=>false}, {:time=>"22:58", :easy=>false}]},
41
+ "1N GAMELJNE - BAVARSKI DVOR"=>
42
+ {:route=>"GAMELJNE - BAVARSKI DVOR",
43
+ :bus_number=>"1N",
44
+ :arrivals=>
45
+ [{:time=>"23:34", :easy=>false}, {:time=>"00:14", :easy=>false}]},
46
+ "2 ZELENA JAMA - GARAŽA"=>
47
+ {:route=>"ZELENA JAMA - GARAŽA",
48
+ :bus_number=>"2",
49
+ :arrivals=>[{:time=>"00:42", :easy=>true}]},
50
+ "2 ZELENA JAMA - NOVE JARŠE"=>
51
+ {:route=>"ZELENA JAMA - NOVE JARŠE",
52
+ :bus_number=>"2",
53
+ :arrivals=>
54
+ [{:time=>"21:28", :easy=>true},
55
+ {:time=>"21:44", :easy=>true},
56
+ {:time=>"21:59", :easy=>false}]},
57
+ "3L TOVARNA LEK - BAVARSKI DVOR"=>
58
+ {:route=>"TOVARNA LEK - BAVARSKI DVOR",
59
+ :bus_number=>"3L",
60
+ :arrivals=>[{:time=>"22:16", :easy=>false}]},
61
+ "3N BAVARSKI DVOR - RUDNIK"=>
62
+ {:route=>"BAVARSKI DVOR - RUDNIK",
63
+ :bus_number=>"3N",
64
+ :arrivals=>
65
+ [{:time=>"21:40", :easy=>false},
66
+ {:time=>"22:00", :easy=>true},
67
+ {:time=>"22:20", :easy=>false}]},
68
+ "3N BAVARSKI DVOR - ŠKOFLJICA"=>
69
+ {:route=>"BAVARSKI DVOR - ŠKOFLJICA",
70
+ :bus_number=>"3N",
71
+ :arrivals=>
72
+ [{:time=>"04:50", :easy=>false}, {:time=>"21:20", :easy=>false}]},
73
+ "3 LITOSTROJ - RUDNIK"=>
74
+ {:route=>"LITOSTROJ - RUDNIK",
75
+ :bus_number=>"3",
76
+ :arrivals=>[{:time=>"21:01", :easy=>false}]},
77
+ "3L BAVARSKI DVOR - TOVARNA LEK"=>
78
+ {:route=>"BAVARSKI DVOR - TOVARNA LEK",
79
+ :bus_number=>"3L",
80
+ :arrivals=>[{:time=>"21:25", :easy=>false}]},
81
+ "3N ŠKOFLJICA - BAVARSKI DVOR"=>
82
+ {:route=>"ŠKOFLJICA - BAVARSKI DVOR",
83
+ :bus_number=>"3N",
84
+ :arrivals=>[{:time=>"21:37", :easy=>false}]},
85
+ "3G BEŽIGRAD - GROSUPLJE"=>
86
+ {:route=>"BEŽIGRAD - GROSUPLJE",
87
+ :bus_number=>"3G",
88
+ :arrivals=>
89
+ [{:time=>"21:35", :easy=>false},
90
+ {:time=>"22:35", :easy=>false},
91
+ {:time=>"23:44", :easy=>false}]},
92
+ "5N ŠTEPANJSKO NAS. - PODUTIK"=>
93
+ {:route=>"ŠTEPANJSKO NAS. - PODUTIK",
94
+ :bus_number=>"5N",
95
+ :arrivals=>
96
+ [{:time=>"21:30", :easy=>false},
97
+ {:time=>"22:00", :easy=>false},
98
+ {:time=>"22:29", :easy=>true}]},
99
+ "6 ČRNUČE - DOLGI MOST"=>
100
+ {:route=>"ČRNUČE - DOLGI MOST",
101
+ :bus_number=>"6",
102
+ :arrivals=>
103
+ [{:time=>"21:25", :easy=>true},
104
+ {:time=>"21:48", :easy=>false},
105
+ {:time=>"22:00", :easy=>false}]},
106
+ "6 ČRNUČE - GARAŽA"=>
107
+ {:route=>"ČRNUČE - GARAŽA",
108
+ :bus_number=>"6",
109
+ :arrivals=>[{:time=>"00:53", :easy=>false}]},
110
+ "6B ČRNUČE - NOTRANJE GORICE"=>
111
+ {:route=>"ČRNUČE - NOTRANJE GORICE",
112
+ :bus_number=>"6B",
113
+ :arrivals=>
114
+ [{:time=>"21:41", :easy=>false},
115
+ {:time=>"22:28", :easy=>true},
116
+ {:time=>"04:47", :easy=>false}]},
117
+ "7 NOVE JARŠE - PRŽAN"=>
118
+ {:route=>"NOVE JARŠE - PRŽAN",
119
+ :bus_number=>"7",
120
+ :arrivals=>
121
+ [{:time=>"21:23", :easy=>true},
122
+ {:time=>"21:43", :easy=>false},
123
+ {:time=>"05:13", :easy=>false}]},
124
+ "7 NOVE JARŠE - GARAŽA"=>
125
+ {:route=>"NOVE JARŠE - GARAŽA",
126
+ :bus_number=>"7",
127
+ :arrivals=>
128
+ [{:time=>"22:38", :easy=>true},
129
+ {:time=>"23:00", :easy=>false},
130
+ {:time=>"08:22", :easy=>false}]},
131
+ "7L LETALIŠKA - PRŽAN"=>
132
+ {:route=>"LETALIŠKA - PRŽAN",
133
+ :bus_number=>"7L",
134
+ :arrivals=>
135
+ [{:time=>"22:04", :easy=>false},
136
+ {:time=>"22:28", :easy=>true},
137
+ {:time=>"05:55", :easy=>false}]},
138
+ "8 BRNČIČEVA - GAMELJNE"=>
139
+ {:route=>"BRNČIČEVA - GAMELJNE",
140
+ :bus_number=>"8",
141
+ :arrivals=>
142
+ [{:time=>"21:40", :easy=>false},
143
+ {:time=>"22:00", :easy=>true},
144
+ {:time=>"05:18", :easy=>false}]},
145
+ "8 BRNČIČEVA - GARAŽA"=>
146
+ {:route=>"BRNČIČEVA - GARAŽA",
147
+ :bus_number=>"8",
148
+ :arrivals=>
149
+ [{:time=>"22:22", :easy=>false}, {:time=>"22:42", :easy=>true}]},
150
+ "9 ŠTEPANJSKO NAS. - GARAŽA"=>
151
+ {:route=>"ŠTEPANJSKO NAS. - GARAŽA",
152
+ :bus_number=>"9",
153
+ :arrivals=>
154
+ [{:time=>"22:44", :easy=>false},
155
+ {:time=>"23:02", :easy=>false},
156
+ {:time=>"11:16", :easy=>false}]},
157
+ "9 ŠTEPANJSKO NAS. - TRNOVO"=>
158
+ {:route=>"ŠTEPANJSKO NAS. - TRNOVO",
159
+ :bus_number=>"9",
160
+ :arrivals=>
161
+ [{:time=>"21:30", :easy=>false},
162
+ {:time=>"21:47", :easy=>false},
163
+ {:time=>"22:09", :easy=>true}]},
164
+ "11 BEŽIGRAD - ZALOG"=>
165
+ {:route=>"BEŽIGRAD - ZALOG",
166
+ :bus_number=>"11",
167
+ :arrivals=>
168
+ [{:time=>"21:44", :easy=>false},
169
+ {:time=>"22:19", :easy=>true},
170
+ {:time=>"22:59", :easy=>false}]},
171
+ "11 JEŽICA - ZALOG"=>
172
+ {:route=>"JEŽICA - ZALOG",
173
+ :bus_number=>"11",
174
+ :arrivals=>
175
+ [{:time=>"05:06", :easy=>false},
176
+ {:time=>"05:08", :easy=>false},
177
+ {:time=>"05:24", :easy=>false}]},
178
+ "14 SAVLJE - VRHOVCI"=>
179
+ {:route=>"SAVLJE - VRHOVCI",
180
+ :bus_number=>"14",
181
+ :arrivals=>
182
+ [{:time=>"21:43", :easy=>true},
183
+ {:time=>"22:04", :easy=>false},
184
+ {:time=>"22:29", :easy=>false}]},
185
+ "14B SAVLJE - BOKALCE"=>
186
+ {:route=>"SAVLJE - BOKALCE",
187
+ :bus_number=>"14B",
188
+ :arrivals=>
189
+ [{:time=>"05:28", :easy=>false},
190
+ {:time=>"05:55", :easy=>false},
191
+ {:time=>"06:07", :easy=>false}]},
192
+ "14 SAVLJE - GARAŽA"=>
193
+ {:route=>"SAVLJE - GARAŽA",
194
+ :bus_number=>"14",
195
+ :arrivals=>
196
+ [{:time=>"22:34", :easy=>true},
197
+ {:time=>"22:58", :easy=>true},
198
+ {:time=>"09:23", :easy=>false}]},
199
+ "19I TOMAČEVO - IG"=>
200
+ {:route=>"TOMAČEVO - IG",
201
+ :bus_number=>"19I",
202
+ :arrivals=>[{:time=>"10:48", :easy=>false}]},
203
+ "19I TOMAČEVO - GARAŽA"=>
204
+ {:route=>"TOMAČEVO - GARAŽA",
205
+ :bus_number=>"19I",
206
+ :arrivals=>
207
+ [{:time=>"08:03", :easy=>false},
208
+ {:time=>"08:28", :easy=>false},
209
+ {:time=>"08:53", :easy=>false}]},
210
+ "19B TOMAČEVO - JEZERO"=>
211
+ {:route=>"TOMAČEVO - JEZERO",
212
+ :bus_number=>"19B",
213
+ :arrivals=>
214
+ [{:time=>"21:58", :easy=>true},
215
+ {:time=>"22:44", :easy=>true},
216
+ {:time=>"04:34", :easy=>false}]},
217
+ "19I TOMAČEVO - IŠKA VAS"=>
218
+ {:route=>"TOMAČEVO - IŠKA VAS",
219
+ :bus_number=>"19I",
220
+ :arrivals=>
221
+ [{:time=>"21:38", :easy=>false},
222
+ {:time=>"22:18", :easy=>false},
223
+ {:time=>"22:57", :easy=>false}]},
224
+ "20 NOVE STOŽICE - GARAŽA"=>
225
+ {:route=>"NOVE STOŽICE - GARAŽA",
226
+ :bus_number=>"20",
227
+ :arrivals=>[{:time=>"22:52", :easy=>false}]},
228
+ "20 NOVE STOŽICE - FUŽINE"=>
229
+ {:route=>"NOVE STOŽICE - FUŽINE",
230
+ :bus_number=>"20",
231
+ :arrivals=>
232
+ [{:time=>"21:34", :easy=>false},
233
+ {:time=>"21:54", :easy=>true},
234
+ {:time=>"22:13", :easy=>true}]},
235
+ "23 KOLODVOR - ZOO"=>
236
+ {:route=>"KOLODVOR - ZOO",
237
+ :bus_number=>"23",
238
+ :arrivals=>
239
+ [{:time=>"09:02", :easy=>false},
240
+ {:time=>"10:02", :easy=>false},
241
+ {:time=>"12:02", :easy=>false}]},
242
+ "25 ZADOBROVA - MEDVODE"=>
243
+ {:route=>"ZADOBROVA - MEDVODE",
244
+ :bus_number=>"25",
245
+ :arrivals=>
246
+ [{:time=>"21:36", :easy=>true},
247
+ {:time=>"22:36", :easy=>false},
248
+ {:time=>"05:04", :easy=>false}]},
249
+ "25 ZADOBROVA - GARAŽA"=>
250
+ {:route=>"ZADOBROVA - GARAŽA",
251
+ :bus_number=>"25",
252
+ :arrivals=>[{:time=>"23:34", :easy=>true}]},
253
+ "27 LETALIŠKA - GARAŽA"=>
254
+ {:route=>"LETALIŠKA - GARAŽA",
255
+ :bus_number=>"27",
256
+ :arrivals=>
257
+ [{:time=>"22:28", :easy=>true},
258
+ {:time=>"22:48", :easy=>false},
259
+ {:time=>"00:15", :easy=>false}]},
260
+ "27 LETALIŠKA - BTC - NS RUDNIK"=>
261
+ {:route=>"LETALIŠKA - BTC - NS RUDNIK",
262
+ :bus_number=>"27",
263
+ :arrivals=>
264
+ [{:time=>"21:28", :easy=>true},
265
+ {:time=>"21:48", :easy=>false},
266
+ {:time=>"22:08", :easy=>false}]},
267
+ "27B LETALIŠKA - BTC - BLEIWEISOVA"=>
268
+ {:route=>"LETALIŠKA - BTC - BLEIWEISOVA",
269
+ :bus_number=>"27B",
270
+ :arrivals=>[{:time=>"23:23", :easy=>false}]},
271
+ "51 LJUBLJANA-POLHOV GRADEC"=>
272
+ {:route=>"LJUBLJANA-POLHOV GRADEC",
273
+ :bus_number=>"51",
274
+ :arrivals=>
275
+ [{:time=>"22:46", :easy=>false},
276
+ {:time=>"05:36", :easy=>false},
277
+ {:time=>"06:27", :easy=>false}]},
278
+ "56 LJUBLJANA-ŠENTJOŠT"=>
279
+ {:route=>"LJUBLJANA-ŠENTJOŠT",
280
+ :bus_number=>"56",
281
+ :arrivals=>
282
+ [{:time=>"22:36", :easy=>false},
283
+ {:time=>"05:21", :easy=>false},
284
+ {:time=>"06:41", :easy=>false}]}}},
285
+ "600011"=>
286
+ {:name=>"BAVARSKI DVOR",
287
+ :buses=>
288
+ {"1N VIŽMARJE - BAVARSKI DVOR"=>
289
+ {:route=>"VIŽMARJE - BAVARSKI DVOR",
290
+ :bus_number=>"1N",
291
+ :arrivals=>[{:time=>"22:55", :easy=>false}]},
292
+ "2 NOVE JARŠE - ZELENA JAMA"=>
293
+ {:route=>"NOVE JARŠE - ZELENA JAMA",
294
+ :bus_number=>"2",
295
+ :arrivals=>
296
+ [{:time=>"21:30", :easy=>true},
297
+ {:time=>"21:47", :easy=>false},
298
+ {:time=>"21:58", :easy=>false}]},
299
+ "2 NOVE JARŠE - GARAŽA"=>
300
+ {:route=>"NOVE JARŠE - GARAŽA",
301
+ :bus_number=>"2",
302
+ :arrivals=>
303
+ [{:time=>"00:31", :easy=>false}, {:time=>"01:06", :easy=>true}]},
304
+ "3G GROSUPLJE - BEŽIGRAD "=>
305
+ {:route=>"GROSUPLJE - BEŽIGRAD ",
306
+ :bus_number=>"3G",
307
+ :arrivals=>
308
+ [{:time=>"22:24", :easy=>false},
309
+ {:time=>"23:25", :easy=>false},
310
+ {:time=>"05:04", :easy=>false}]},
311
+ "5N PODUTIK - ŠTEPANJSKO NAS."=>
312
+ {:route=>"PODUTIK - ŠTEPANJSKO NAS.",
313
+ :bus_number=>"5N",
314
+ :arrivals=>
315
+ [{:time=>"21:32", :easy=>true},
316
+ {:time=>"21:59", :easy=>false},
317
+ {:time=>"22:29", :easy=>false}]},
318
+ "6B NOTRANJE GORICE - GARAŽA"=>
319
+ {:route=>"NOTRANJE GORICE - GARAŽA",
320
+ :bus_number=>"6B",
321
+ :arrivals=>[{:time=>"23:30", :easy=>true}]},
322
+ "6 DOLGI MOST - ČRNUČE"=>
323
+ {:route=>"DOLGI MOST - ČRNUČE",
324
+ :bus_number=>"6",
325
+ :arrivals=>
326
+ [{:time=>"21:45", :easy=>true},
327
+ {:time=>"22:16", :easy=>false},
328
+ {:time=>"23:40", :easy=>false}]},
329
+ "6 DOLGI MOST - GARAŽA"=>
330
+ {:route=>"DOLGI MOST - GARAŽA",
331
+ :bus_number=>"6",
332
+ :arrivals=>
333
+ [{:time=>"22:44", :easy=>false},
334
+ {:time=>"00:52", :easy=>false},
335
+ {:time=>"09:24", :easy=>false}]},
336
+ "6B NOTRANJE GORICE - ČRNUČE"=>
337
+ {:route=>"NOTRANJE GORICE - ČRNUČE",
338
+ :bus_number=>"6B",
339
+ :arrivals=>
340
+ [{:time=>"21:28", :easy=>false},
341
+ {:time=>"21:58", :easy=>true},
342
+ {:time=>"22:31", :easy=>true}]},
343
+ "7L PRŽAN - LETALIŠKA"=>
344
+ {:route=>"PRŽAN - LETALIŠKA",
345
+ :bus_number=>"7L",
346
+ :arrivals=>
347
+ [{:time=>"21:24", :easy=>false},
348
+ {:time=>"21:45", :easy=>true},
349
+ {:time=>"05:14", :easy=>false}]},
350
+ "7 PRŽAN - NOVE JARŠE"=>
351
+ {:route=>"PRŽAN - NOVE JARŠE",
352
+ :bus_number=>"7",
353
+ :arrivals=>
354
+ [{:time=>"22:04", :easy=>true},
355
+ {:time=>"22:28", :easy=>false},
356
+ {:time=>"07:41", :easy=>false}]},
357
+ "8 GAMELJNE - BRNČIČEVA"=>
358
+ {:route=>"GAMELJNE - BRNČIČEVA",
359
+ :bus_number=>"8",
360
+ :arrivals=>
361
+ [{:time=>"21:38", :easy=>false},
362
+ {:time=>"22:01", :easy=>true},
363
+ {:time=>"05:27", :easy=>false}]},
364
+ "9 TRNOVO - GARAŽA"=>
365
+ {:route=>"TRNOVO - GARAŽA",
366
+ :bus_number=>"9",
367
+ :arrivals=>
368
+ [{:time=>"22:33", :easy=>true}, {:time=>"22:53", :easy=>true}]},
369
+ "9 TRNOVO - ŠTEPANJSKO NAS."=>
370
+ {:route=>"TRNOVO - ŠTEPANJSKO NAS.",
371
+ :bus_number=>"9",
372
+ :arrivals=>
373
+ [{:time=>"21:27", :easy=>true},
374
+ {:time=>"21:49", :easy=>true},
375
+ {:time=>"22:09", :easy=>false}]},
376
+ "11 ZALOG - GARAŽA"=>
377
+ {:route=>"ZALOG - GARAŽA",
378
+ :bus_number=>"11",
379
+ :arrivals=>
380
+ [{:time=>"00:40", :easy=>true}, {:time=>"01:20", :easy=>false}]},
381
+ "11 ZALOG - JEŽICA"=>
382
+ {:route=>"ZALOG - JEŽICA",
383
+ :bus_number=>"11",
384
+ :arrivals=>
385
+ [{:time=>"05:29", :easy=>false},
386
+ {:time=>"05:44", :easy=>false},
387
+ {:time=>"05:57", :easy=>false}]},
388
+ "11 ZALOG - BEŽIGRAD"=>
389
+ {:route=>"ZALOG - BEŽIGRAD",
390
+ :bus_number=>"11",
391
+ :arrivals=>
392
+ [{:time=>"21:47", :easy=>true},
393
+ {:time=>"22:00", :easy=>true},
394
+ {:time=>"22:20", :easy=>false}]},
395
+ "13 SOSTRO - GARAŽA"=>
396
+ {:route=>"SOSTRO - GARAŽA",
397
+ :bus_number=>"13",
398
+ :arrivals=>
399
+ [{:time=>"21:31", :easy=>false},
400
+ {:time=>"22:29", :easy=>true},
401
+ {:time=>"23:19", :easy=>true}]},
402
+ "13 SOSTRO - CENTER STOŽICE"=>
403
+ {:route=>"SOSTRO - CENTER STOŽICE",
404
+ :bus_number=>"13",
405
+ :arrivals=>
406
+ [{:time=>"21:26", :easy=>true},
407
+ {:time=>"22:01", :easy=>true},
408
+ {:time=>"05:16", :easy=>false}]},
409
+ "14 VRHOVCI - SAVLJE"=>
410
+ {:route=>"VRHOVCI - SAVLJE",
411
+ :bus_number=>"14",
412
+ :arrivals=>
413
+ [{:time=>"22:29", :easy=>true},
414
+ {:time=>"05:15", :easy=>false},
415
+ {:time=>"05:29", :easy=>false}]},
416
+ "14 VRHOVCI - GARAŽA"=>
417
+ {:route=>"VRHOVCI - GARAŽA",
418
+ :bus_number=>"14",
419
+ :arrivals=>
420
+ [{:time=>"21:43", :easy=>false},
421
+ {:time=>"22:36", :easy=>false},
422
+ {:time=>"23:01", :easy=>false}]},
423
+ "14B BOKALCE - SAVLJE"=>
424
+ {:route=>"BOKALCE - SAVLJE",
425
+ :bus_number=>"14B",
426
+ :arrivals=>
427
+ [{:time=>"21:44", :easy=>false},
428
+ {:time=>"22:04", :easy=>true},
429
+ {:time=>"05:44", :easy=>false}]},
430
+ "19 IG AP - GARAŽA"=>
431
+ {:route=>"IG AP - GARAŽA",
432
+ :bus_number=>"19",
433
+ :arrivals=>[{:time=>"08:21", :easy=>false}]},
434
+ "19B JEZERO - GARAŽA"=>
435
+ {:route=>"JEZERO - GARAŽA",
436
+ :bus_number=>"19B",
437
+ :arrivals=>
438
+ [{:time=>"22:59", :easy=>true},
439
+ {:time=>"23:34", :easy=>false},
440
+ {:time=>"23:39", :easy=>true}]},
441
+ "19B JEZERO - TOMAČEVO"=>
442
+ {:route=>"JEZERO - TOMAČEVO",
443
+ :bus_number=>"19B",
444
+ :arrivals=>
445
+ [{:time=>"21:42", :easy=>false},
446
+ {:time=>"22:26", :easy=>false},
447
+ {:time=>"05:21", :easy=>false}]},
448
+ "19I IŠKA VAS - TOMAČEVO"=>
449
+ {:route=>"IŠKA VAS - TOMAČEVO",
450
+ :bus_number=>"19I",
451
+ :arrivals=>
452
+ [{:time=>"22:08", :easy=>true},
453
+ {:time=>"05:12", :easy=>false},
454
+ {:time=>"05:44", :easy=>false}]},
455
+ "19I IŠKA VAS - GARAŽA"=>
456
+ {:route=>"IŠKA VAS - GARAŽA",
457
+ :bus_number=>"19I",
458
+ :arrivals=>
459
+ [{:time=>"22:41", :easy=>false},
460
+ {:time=>"23:21", :easy=>false},
461
+ {:time=>"23:56", :easy=>false}]},
462
+ "20 FUŽINE - NOVE STOŽICE"=>
463
+ {:route=>"FUŽINE - NOVE STOŽICE",
464
+ :bus_number=>"20",
465
+ :arrivals=>
466
+ [{:time=>"21:34", :easy=>true},
467
+ {:time=>"21:56", :easy=>true},
468
+ {:time=>"22:16", :easy=>true}]},
469
+ "20 FUŽINE - GARAŽA"=>
470
+ {:route=>"FUŽINE - GARAŽA",
471
+ :bus_number=>"20",
472
+ :arrivals=>
473
+ [{:time=>"22:58", :easy=>true}, {:time=>"23:16", :easy=>true}]},
474
+ "23 ZOO - KOLODVOR"=>
475
+ {:route=>"ZOO - KOLODVOR",
476
+ :bus_number=>"23",
477
+ :arrivals=>
478
+ [{:time=>"10:30", :easy=>false},
479
+ {:time=>"12:30", :easy=>false},
480
+ {:time=>"16:31", :easy=>false}]},
481
+ "25 MEDVODE - ZADOBROVA"=>
482
+ {:route=>"MEDVODE - ZADOBROVA",
483
+ :bus_number=>"25",
484
+ :arrivals=>
485
+ [{:time=>"21:35", :easy=>false},
486
+ {:time=>"22:49", :easy=>true},
487
+ {:time=>"05:28", :easy=>false}]},
488
+ "27 NS RUDNIK - BTC - LETALIŠKA"=>
489
+ {:route=>"NS RUDNIK - BTC - LETALIŠKA",
490
+ :bus_number=>"27",
491
+ :arrivals=>
492
+ [{:time=>"21:24", :easy=>false},
493
+ {:time=>"21:45", :easy=>true},
494
+ {:time=>"22:05", :easy=>false}]},
495
+ "27 NS RUDNIK - GARAŽA"=>
496
+ {:route=>"NS RUDNIK - GARAŽA",
497
+ :bus_number=>"27",
498
+ :arrivals=>
499
+ [{:time=>"22:43", :easy=>false}, {:time=>"17:54", :easy=>false}]},
500
+ "27B BLEIWEISOVA - BTC - LETALIŠKA"=>
501
+ {:route=>"BLEIWEISOVA - BTC - LETALIŠKA",
502
+ :bus_number=>"27B",
503
+ :arrivals=>[{:time=>"23:40", :easy=>false}]},
504
+ "51 POLHOV GRADEC-LJUBLJANA"=>
505
+ {:route=>"POLHOV GRADEC-LJUBLJANA",
506
+ :bus_number=>"51",
507
+ :arrivals=>
508
+ [{:time=>"21:33", :easy=>false},
509
+ {:time=>"05:31", :easy=>false},
510
+ {:time=>"06:19", :easy=>false}]},
511
+ "56 ŠENTJOŠT-LJUBLJANA"=>
512
+ {:route=>"ŠENTJOŠT-LJUBLJANA",
513
+ :bus_number=>"56",
514
+ :arrivals=>
515
+ [{:time=>"22:06", :easy=>false},
516
+ {:time=>"05:15", :easy=>false},
517
+ {:time=>"06:26", :easy=>false}]}}}}
518
+
519
+ assert_equal result_hash,
520
+ arrivals
521
+ end
522
+
523
+ def test_parsing_single_bus
524
+ response = File.read(File.join(File.dirname(__FILE__), 'response.html'))
525
+ stub_request(:any, /wbus.talktrack.com\/.*/).
526
+ to_return(:body => response, :status => 200, :headers => { 'Content-Length' => response.length } )
527
+
528
+ arrivals = Lpp.arrivals_for_bus('bavarski', 6)
529
+ result_hash = {"600012"=>
530
+ {:name=>"BAVARSKI DVOR",
531
+ :buses=>
532
+ {"6 ČRNUČE - DOLGI MOST"=>
533
+ {:route=>"ČRNUČE - DOLGI MOST",
534
+ :bus_number=>"6",
535
+ :arrivals=>
536
+ [{:time=>"21:25", :easy=>true},
537
+ {:time=>"21:48", :easy=>false},
538
+ {:time=>"22:00", :easy=>false}]},
539
+ "6 ČRNUČE - GARAŽA"=>
540
+ {:route=>"ČRNUČE - GARAŽA",
541
+ :bus_number=>"6",
542
+ :arrivals=>[{:time=>"00:53", :easy=>false}]},
543
+ "6B ČRNUČE - NOTRANJE GORICE"=>
544
+ {:route=>"ČRNUČE - NOTRANJE GORICE",
545
+ :bus_number=>"6B",
546
+ :arrivals=>
547
+ [{:time=>"21:41", :easy=>false},
548
+ {:time=>"22:28", :easy=>true},
549
+ {:time=>"04:47", :easy=>false}]}}},
550
+ "600011"=>
551
+ {:name=>"BAVARSKI DVOR",
552
+ :buses=>
553
+ {"6B NOTRANJE GORICE - GARAŽA"=>
554
+ {:route=>"NOTRANJE GORICE - GARAŽA",
555
+ :bus_number=>"6B",
556
+ :arrivals=>[{:time=>"23:30", :easy=>true}]},
557
+ "6 DOLGI MOST - ČRNUČE"=>
558
+ {:route=>"DOLGI MOST - ČRNUČE",
559
+ :bus_number=>"6",
560
+ :arrivals=>
561
+ [{:time=>"21:45", :easy=>true},
562
+ {:time=>"22:16", :easy=>false},
563
+ {:time=>"23:40", :easy=>false}]},
564
+ "6 DOLGI MOST - GARAŽA"=>
565
+ {:route=>"DOLGI MOST - GARAŽA",
566
+ :bus_number=>"6",
567
+ :arrivals=>
568
+ [{:time=>"22:44", :easy=>false},
569
+ {:time=>"00:52", :easy=>false},
570
+ {:time=>"09:24", :easy=>false}]},
571
+ "6B NOTRANJE GORICE - ČRNUČE"=>
572
+ {:route=>"NOTRANJE GORICE - ČRNUČE",
573
+ :bus_number=>"6B",
574
+ :arrivals=>
575
+ [{:time=>"21:28", :easy=>false},
576
+ {:time=>"21:58", :easy=>true},
577
+ {:time=>"22:31", :easy=>true}]}}}}
578
+
579
+ assert_equal result_hash,
580
+ arrivals
581
+ end
582
+
583
+ def test_no_station_found
584
+ response = File.read(File.join(File.dirname(__FILE__), 'response_not_found.html'))
585
+ stub_request(:any, /wbus.talktrack.com\/.*/).
586
+ to_return(:body => response, :status => 200, :headers => { 'Content-Length' => response.length } )
587
+
588
+ assert_raise RuntimeError do
589
+ Lpp.arrivals('non-existing-station')
590
+ end
591
+ end
592
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lpp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jure Triglav
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: nokogiri
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.5'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.5'
83
+ description: LPP is a simple gem for getting bus arrivals in Ljubljana. It uses the
84
+ wbus.talktrack.com website.
85
+ email:
86
+ - juretriglav@gmail.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - .gitignore
92
+ - Gemfile
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - lib/lpp.rb
97
+ - lib/lpp/version.rb
98
+ - lpp.gemspec
99
+ - test/response.html
100
+ - test/response_not_found.html
101
+ - test/test_helper.rb
102
+ - test/test_lpp.rb
103
+ homepage: ''
104
+ licenses:
105
+ - MIT
106
+ metadata: {}
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 2.0.0
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: Ljubljana bus arrivals gem
127
+ test_files:
128
+ - test/response.html
129
+ - test/response_not_found.html
130
+ - test/test_helper.rb
131
+ - test/test_lpp.rb