map-tube 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,127 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- https://de.wikipedia.org/wiki/U-Bahn_Wien -->
3
+ <tube name="U-Bahn Wien">
4
+ <lines>
5
+ <line id="U1" name="U-Bahn-Linie U1" color="red"/>
6
+ <line id="U2" name="U-Bahn-Linie U2" color="magenta"/>
7
+ <line id="U3" name="U-Bahn-Linie U3" color="orange"/>
8
+ <line id="U4" name="U-Bahn-Linie U4" color="green"/>
9
+ <line id="U6" name="U-Bahn-Linie U6" color="brown"/>
10
+ </lines>
11
+ <stations>
12
+
13
+ <!-- https://de.wikipedia.org/wiki/U-Bahnlinie_1_(Wien) -->
14
+ <station id="1-01" name="Reumannplatz" line="U1:1" link="1-02"/>
15
+ <station id="1-02" name="Keplerplatz" line="U1:2" link="1-01,1-03"/>
16
+ <station id="1-03" name="Südtiroler Platz-Hauptbahnhof" line="U1:3" link="1-02,1-04"/>
17
+ <station id="1-04" name="Taubstummengasse" line="U1:4" link="1-03,1-05"/>
18
+ <station id="1-05" name="Karlsplatz" line="U1:5" link="1-04,1-06" other_link="Tunnel:2-20,Tunnel:4-12"/>
19
+ <station id="1-06" name="Stephansplatz" line="U1:6" link="1-05,1-07" other_link="Tunnel:3-11"/>
20
+ <station id="1-07" name="Schwedenplatz" line="U1:7" link="1-06,1-08" other_link="Tunnel:4-15"/>
21
+ <station id="1-08" name="Nestroyplatz" line="U1:8" link="1-07,1-09"/>
22
+ <station id="1-09" name="Praterstern" line="U1:9" link="1-08,1-10" other_link="Tunnel:2-13"/>
23
+ <station id="1-10" name="Vorgartenstraße" line="U1:10" link="1-09,1-11"/>
24
+ <station id="1-11" name="Donauinsel" line="U1:11" link="1-10,1-12"/>
25
+ <station id="1-12" name="Kaisermühlen" line="U1:12" link="1-11,1-13"/>
26
+ <station id="1-13" name="Alte Donau" line="U1:13" link="1-12,1-14"/>
27
+ <station id="1-14" name="Kagran" line="U1:14" link="1-13,1-15"/>
28
+ <station id="1-15" name="Kagraner Platz" line="U1:15" link="1-14,1-16"/>
29
+ <station id="1-16" name="Rennbahnweg" line="U1:16" link="1-15,1-17"/>
30
+ <station id="1-17" name="Aderklaaer Straße" line="U1:17" link="1-16,1-18"/>
31
+ <station id="1-18" name="Großfeldsiedlung" line="U1:18" link="1-17,1-19"/>
32
+ <station id="1-19" name="Leopoldau" line="U1:19" link="1-18"/>
33
+
34
+ <!-- https://de.wikipedia.org/wiki/U-Bahnlinie_2_(Wien) -->
35
+ <station id="2-01" name="Seestadt" line="U2:1" link="2-02"/>
36
+ <station id="2-02" name="Aspern Nord" line="U2:2" link="2-01,2-03"/>
37
+ <station id="2-03" name="Hausfeldstraße" line="U2:3" link="2-02,2-04"/>
38
+ <station id="2-04" name="Aspernstraße" line="U2:4" link="2-03,2-05"/>
39
+ <station id="2-05" name="Donauspital" line="U2:5" link="2-04,2-06"/>
40
+ <station id="2-06" name="Hardeggasse" line="U2:6" link="2-05,2-07"/>
41
+ <station id="2-07" name="Stadlau" line="U2:7" link="2-06,2-08"/>
42
+ <station id="2-08" name="Donaustadtbrücke" line="U2:8" link="2-07,2-09"/>
43
+ <station id="2-09" name="Donaumarina" line="U2:9" link="2-08,2-10"/>
44
+ <station id="2-10" name="Stadion" line="U2:10" link="2-09,2-11"/>
45
+ <station id="2-11" name="Krieau" line="U2:11" link="2-10,2-12"/>
46
+ <station id="2-12" name="Messe-Prater" line="U2:12" link="2-11,2-13"/>
47
+ <station id="2-13" name="Praterstern" line="U2:13" link="2-12,2-14" other_link="Tunnel:1-09"/>
48
+ <station id="2-14" name="Taborstraße" line="U2:14" link="2-13,2-15"/>
49
+ <station id="2-15" name="Schottenring" line="U2:15" link="2-14,2-16" other_link="Tunnel:4-16"/>
50
+ <station id="2-16" name="Schottentor" line="U2:16" link="2-15,2-17"/>
51
+ <station id="2-17" name="Rathaus" line="U2:17" link="2-16,2-18"/>
52
+ <station id="2-18" name="Volkstheater" line="U2:18" link="2-17,2-19" other_link="Tunnel:3-09"/>
53
+ <station id="2-19" name="Museumsquartier" line="U2:19" link="2-18,2-20"/>
54
+ <station id="2-20" name="Karlsplatz" line="U2:20" link="2-19" other_link="Tunnel:1-05,Tunnel:4-12"/>
55
+
56
+ <!-- https://de.wikipedia.org/wiki/U-Bahnlinie_3_(Wien) -->
57
+ <station id="3-01" name="Ottakring" line="U3:1" link="3-02"/>
58
+ <station id="3-02" name="Kendlerstraße" line="U3:2" link="3-01,3-03"/>
59
+ <station id="3-03" name="Hütteldorfer Straße" line="U3:3" link="3-02,3-04"/>
60
+ <station id="3-04" name="Johnstraße" line="U3:4" link="3-03,3-05"/>
61
+ <station id="3-05" name="Schweglerstraße" line="U3:5" link="3-04,3-06"/>
62
+ <station id="3-06" name="Westbahnhof" line="U3:6" link="3-05,3-07" other_link="Tunnel:6-11"/>
63
+ <station id="3-07" name="Zieglergasse" line="U3:7" link="3-06,3-08"/>
64
+ <station id="3-08" name="Neubaugasse" line="U3:8" link="3-07,3-09"/>
65
+ <station id="3-09" name="Volkstheater" line="U3:9" link="3-08,3-10" other_link="Tunnel:2-18"/>
66
+ <station id="3-10" name="Herrengasse" line="U3:10" link="3-09,3-11"/>
67
+ <station id="3-11" name="Stephansplatz" line="U3:11" link="3-10,3-12" other_link="Tunnel:1-06"/>
68
+ <station id="3-12" name="Stubentor" line="U3:12" link="3-11,3-13"/>
69
+ <station id="3-13" name="Landstraße" line="U3:13" link="3-12,3-14" other_link="Tunnel:4-14"/>
70
+ <station id="3-14" name="Rochusgasse" line="U3:14" link="3-13,3-15"/>
71
+ <station id="3-15" name="Kardinal-Nagl-Platz" line="U3:15" link="3-14,3-16"/>
72
+ <station id="3-16" name="Schlachthausgasse" line="U3:16" link="3-15,3-17"/>
73
+ <station id="3-17" name="Erdberg" line="U3:17" link="3-16,3-18"/>
74
+ <station id="3-18" name="Gasometer" line="U3:18" link="3-17,3-19"/>
75
+ <station id="3-19" name="Zippererstraße" line="U3:19" link="3-18,3-20"/>
76
+ <station id="3-20" name="Enkplatz" line="U3:20" link="3-19,3-21"/>
77
+ <station id="3-21" name="Simmering" line="U3:21" link="3-20"/>
78
+
79
+ <!-- https://de.wikipedia.org/wiki/U-Bahnlinie_4_(Wien) -->
80
+ <station id="4-01" name="Hütteldorf" line="U4:1" link="4-02"/>
81
+ <station id="4-02" name="Ober St. Veit" line="U4:2" link="4-01,4-03"/>
82
+ <station id="4-03" name="Unter St. Veit" line="U4:3" link="4-02,4-04"/>
83
+ <station id="4-04" name="Braunschweiggasse" line="U4:4" link="4-03,4-05"/>
84
+ <station id="4-05" name="Hietzing" line="U4:5" link="4-04,4-06"/>
85
+ <station id="4-06" name="Schönbrunn" line="U4:6" link="4-05,4-07"/>
86
+ <station id="4-07" name="Meidling Hauptstraße" line="U4:7" link="4-06,4-08"/>
87
+ <station id="4-08" name="Längenfeldgasse" line="U4:8" link="4-07,4-09" other_link="Tunnel:6-09"/>
88
+ <station id="4-09" name="Margaretengürtel" line="U4:9" link="4-08,4-10"/>
89
+ <station id="4-10" name="Pilgramgasse" line="U4:10" link="4-09,4-11"/>
90
+ <station id="4-11" name="Kettenbrückengasse" line="U4:11" link="4-10,4-12"/>
91
+ <station id="4-12" name="Karlsplatz" line="U4:12" link="4-11,4-13" other_link="Tunnel:1-05,Tunnel:2-20"/>
92
+ <station id="4-13" name="Stadtpark" line="U4:13" link="4-12,4-14"/>
93
+ <station id="4-14" name="Landstraße" line="U4:14" link="4-13,4-15" other_link="Tunnel:3-13"/>
94
+ <station id="4-15" name="Schwedenplatz" line="U4:15" link="4-14,4-16" other_link="Tunnel:1-07"/>
95
+ <station id="4-16" name="Schottenring" line="U4:16" link="4-15,4-17" other_link="Tunnel:2-15"/>
96
+ <station id="4-17" name="Roßauer Lände" line="U4:17" link="4-16,4-18"/>
97
+ <station id="4-18" name="Friedensbrücke" line="U4:18" link="4-17,4-19"/>
98
+ <station id="4-19" name="Spittelau" line="U4:19" link="4-18,4-20" other_link="Tunnel:6-19"/>
99
+ <station id="4-20" name="Heiligenstadt" line="U4:20" link="4-19"/>
100
+
101
+ <!-- https://de.wikipedia.org/wiki/U-Bahnlinie_6_(Wien) -->
102
+ <station id="6-01" name="Siebenhirten" line="U6:1" link="6-02"/>
103
+ <station id="6-02" name="Perfektastraße" line="U6:2" link="6-01,6-03"/>
104
+ <station id="6-03" name="Erlaaer Straße" line="U6:3" link="6-02,6-04"/>
105
+ <station id="6-04" name="Alterlaa" line="U6:4" link="6-03,6-05"/>
106
+ <station id="6-05" name="Am Schöpfwerk" line="U6:5" link="6-04,6-06"/>
107
+ <station id="6-06" name="Tscherttegasse" line="U6:6" link="6-05,6-07"/>
108
+ <station id="6-07" name="Bahnhof Meidling" line="U6:7" link="6-06,6-08"/>
109
+ <station id="6-08" name="Niederhofstraße" line="U6:8" link="6-07,6-09"/>
110
+ <station id="6-09" name="Längenfeldgasse" line="U6:9" link="6-08,6-10" other_link="Tunnel:4-08"/>
111
+ <station id="6-10" name="Gumpendorfer Straße" line="U6:10" link="6-09,6-11"/>
112
+ <station id="6-11" name="Westbahnhof" line="U6:11" link="6-10,6-12" other_link="Tunnel:3-06"/>
113
+ <station id="6-12" name="Burggasse-Stadthalle" line="U6:12" link="6-11,6-13"/>
114
+ <station id="6-13" name="Thaliastraße" line="U6:13" link="6-12,6-14"/>
115
+ <station id="6-14" name="Josefstädter Straße" line="U6:14" link="6-13,6-15"/>
116
+ <station id="6-15" name="Alser Straße" line="U6:15" link="6-14,6-16"/>
117
+ <station id="6-16" name="Michelbeuern-AKH" line="U6:16" link="6-15,6-17"/>
118
+ <station id="6-17" name="Währinger Straße-Volksoper" line="U6:17" link="6-16,6-18"/>
119
+ <station id="6-18" name="Nußdorfer Straße" line="U6:18" link="6-17,6-19"/>
120
+ <station id="6-19" name="Spittelau" line="U6:19" link="6-18,6-20" other_link="Tunnel:4-19"/>
121
+ <station id="6-20" name="Jägerstraße" line="U6:20" link="6-19,6-21"/>
122
+ <station id="6-21" name="Dresdner Straße" line="U6:21" link="6-20,6-22"/>
123
+ <station id="6-22" name="Handelskai" line="U6:22" link="6-21,6-23"/>
124
+ <station id="6-23" name="Neue Donau" line="U6:23" link="6-22,6-24"/>
125
+ <station id="6-24" name="Floridsdorf" line="U6:24" link="6-23"/>
126
+ </stations>
127
+ </tube>
@@ -0,0 +1,40 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- https://pl.wikipedia.org/wiki/Metro_w_Warszawie -->
3
+ <tube name="Metro w Warszawie">
4
+ <lines>
5
+ <line id="M1" name="Linia M1" color="blue"/>
6
+ <line id="M2" name="Linia M2" color="red"/>
7
+ </lines>
8
+ <stations>
9
+ <!-- https://pl.wikipedia.org/wiki/Linia_M1_metra_w_Warszawie -->
10
+ <station id="A1" name="Kabaty" line="Linia M1" link="A2"/>
11
+ <station id="A2" name="Natolin" line="Linia M1" link="A1,A3"/>
12
+ <station id="A3" name="Imielin" line="Linia M1" link="A2,A4"/>
13
+ <station id="A4" name="Stokłosy" line="Linia M1" link="A3,A5"/>
14
+ <station id="A5" name="Ursynów" line="Linia M1" link="A4,A6"/>
15
+ <station id="A6" name="Służew" line="Linia M1" link="A5,A7"/>
16
+ <station id="A7" name="Wilanowska" line="Linia M1" link="A6,A8"/>
17
+ <station id="A8" name="Wierzbno" line="Linia M1" link="A7,A9"/>
18
+ <station id="A9" name="Racławicka" line="Linia M1" link="A8,A10"/>
19
+ <station id="A10" name="Pole Mokotowskie" line="Linia M1" link="A9,A11"/>
20
+ <station id="A11" name="Politechnika" line="Linia M1" link="A10,A13"/>
21
+ <station id="A13" name="Centrum" line="Linia M1" link="A11,A14"/>
22
+ <station id="A14" name="Świętokrzyska" line="Linia M1" link="A13,A15" other_link="Tunnel:C11"/>
23
+ <station id="A15" name="Ratusz Arsenał" line="Linia M1" link="A14,A17"/>
24
+ <station id="A17" name="Dworzec Gdański" line="Linia M1" link="A15,A18"/>
25
+ <station id="A18" name="Plac Wilsona" line="Linia M1" link="A17,A19"/>
26
+ <station id="A19" name="Marymont" line="Linia M1" link="A18,A20"/>
27
+ <station id="A20" name="Słodowiec" line="Linia M1" link="A19,A21"/>
28
+ <station id="A21" name="Stare Bielany" line="Linia M1" link="A20,A22"/>
29
+ <station id="A22" name="Wawrzyszew" line="Linia M1" link="A21,A23"/>
30
+ <station id="A23" name="Młociny" line="Linia M1" link="A22"/>
31
+
32
+ <station id="C9" name="Rondo Daszyńskiego" line="Linia M2" link="C10"/>
33
+ <station id="C10" name="Rondo ONZ" line="Linia M2" link="C9,C11"/>
34
+ <station id="C11" name="Świętokrzyska" line="Linia M2" link="C10,C12" other_link="Tunnel:A14"/>
35
+ <station id="C12" name="Nowy Świat-Uniwersytet" line="Linia M2" link="C11,C13"/>
36
+ <station id="C13" name="Centrum Nauki Kopernik" line="Linia M2" link="C12,C14"/>
37
+ <station id="C14" name="Stadion Narodowy" line="Linia M2" link="C13,C15"/>
38
+ <station id="C15" name="Dworzec Wileński" line="Linia M2" link="C14"/>
39
+ </stations>
40
+ </tube>
@@ -0,0 +1,10 @@
1
+ module Map
2
+ module Tube
3
+ module Exceptions
4
+ class StationException < StandardError; end
5
+ class LineException < StandardError; end
6
+ class RouteException < StandardError; end
7
+ class CityException < StandardError; end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,102 @@
1
+ module Map
2
+ module Tube
3
+ class Graph
4
+ attr_accessor :stations, :lines
5
+
6
+ def initialize
7
+ @stations = []
8
+ @lines = []
9
+ end
10
+
11
+ def add_station(station)
12
+ @stations << station
13
+ end
14
+
15
+ def add_line(line)
16
+ @lines << line
17
+ end
18
+
19
+ def get_shortest_route(from_station_name, to_station_name)
20
+ from_station = get_station_by_name(from_station_name)
21
+ to_station = get_station_by_name(to_station_name)
22
+ compute_shortest_path(from_station, to_station)
23
+ end
24
+
25
+ def get_station_by_id(station_id)
26
+ find_by(:station, :id, station_id)
27
+ end
28
+
29
+ def get_station_by_name(station_name)
30
+ find_by(:station, :name, station_name)
31
+ end
32
+
33
+ def get_line_by_id(line_id)
34
+ find_by(:line, :id, line_id)
35
+ end
36
+
37
+ def get_line_by_name(line_name)
38
+ find_by(:line, :name, line_name)
39
+ end
40
+
41
+ private
42
+
43
+ def find_by(model, attribute, value)
44
+ get_instance_for_model(model).each do |obj|
45
+ return obj if obj.send(attribute) == value
46
+ end
47
+
48
+ raise_error_for_model(model, attribute, value)
49
+ end
50
+
51
+ def compute_shortest_path(from_station, to_station)
52
+ raise_error_for_model(:route) if from_station.id == to_station.id
53
+
54
+ route = Route.new(from_station, to_station)
55
+ visited, queue = [], []
56
+ edge = {}
57
+
58
+ queue << from_station
59
+ visited << from_station
60
+
61
+ while queue.any?
62
+ curr_station = queue.shift
63
+ break if curr_station.id == to_station.id
64
+
65
+ curr_station.links.each do |link|
66
+ next_station = get_station_by_id(link)
67
+ next if visited.include?(next_station)
68
+ queue << next_station
69
+ visited << next_station
70
+ edge[link] = curr_station
71
+ end
72
+ end
73
+
74
+ loop do
75
+ to_station = edge[to_station.id]
76
+ break if to_station.id == from_station.id
77
+ route.intermediate_stations.unshift(to_station)
78
+ end
79
+
80
+ route
81
+ end
82
+
83
+ def get_instance_for_model(model)
84
+ {
85
+ :station => @stations,
86
+ :line => @lines
87
+ }[model]
88
+ end
89
+
90
+ def raise_error_for_model(model, attribute=nil, value=nil)
91
+ case model
92
+ when :station
93
+ raise(Map::Tube::Exceptions::StationException, "Station with #{attribute}='#{value}' does not exist")
94
+ when :line
95
+ raise(Map::Tube::Exceptions::LineException, "Line with #{attribute}='#{value}' does not exist")
96
+ when :route
97
+ raise(Map::Tube::Exceptions::RouteException, "Stations must be different")
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,13 @@
1
+ module Map
2
+ module Tube
3
+ class Line
4
+ attr_accessor :id, :name, :color
5
+
6
+ def initialize(id, name, color)
7
+ @id = id
8
+ @name = name
9
+ @color = color
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ module Map
2
+ module Tube
3
+ class MapLoader
4
+ attr_accessor :city, :map_path
5
+
6
+ def initialize(city_name, map_path=nil)
7
+ @city = city_name.split(' ').join("_")
8
+ if map_path # Always trust the path if it comes from the user
9
+ @map_path = map_path
10
+ else
11
+ @map_path = set_path_for_city
12
+ end
13
+ end
14
+
15
+ def read
16
+ if File.exist?(@map_path)
17
+ Parser.new(File.open(@map_path)).parse!
18
+ else
19
+ raise Map::Tube::Exceptions::CityException, "Map for #{@city} does not exist"
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def set_path_for_city
26
+ "data/#{filename(@city)}"
27
+ end
28
+
29
+ def filename(city_name)
30
+ "#{city_name.downcase}-map.xml"
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,54 @@
1
+ module Map
2
+ module Tube
3
+ class Parser
4
+ def initialize(doc)
5
+ @document = Nokogiri::XML(doc)
6
+ @graph = Graph.new
7
+ end
8
+
9
+ def parse!
10
+ parse_lines!
11
+ parse_stations!
12
+ @graph
13
+ end
14
+
15
+ private
16
+
17
+ def parse_stations!
18
+ stations = @document.search("//stations/station")
19
+ stations.each do |station|
20
+ current_station = Station.new(
21
+ station["id"],
22
+ station["name"],
23
+ parse_line(station["line"]))
24
+
25
+ links = station["link"].split(",")
26
+ links += compute_other_links(station["other_link"]) if station["other_link"]
27
+ links.each { |link| current_station.add_link(link) }
28
+
29
+ @graph.add_station(current_station)
30
+ end
31
+ end
32
+
33
+ def parse_lines!
34
+ lines = @document.search("//lines/line")
35
+ lines.each do |line|
36
+ element = Line.new(line["id"], line["name"], line["color"])
37
+ @graph.add_line(element)
38
+ end
39
+ end
40
+
41
+ def parse_line(line)
42
+ if line.include?(":")
43
+ line[/(.*):/, 1]
44
+ else
45
+ line
46
+ end
47
+ end
48
+
49
+ def compute_other_links(links)
50
+ links.split(",").map! { |e| e.split(":")[1] }
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,19 @@
1
+ module Map
2
+ module Tube
3
+ class Route
4
+ attr_accessor :departure_station, :arrival_station, :intermediate_stations
5
+
6
+ def initialize(departure_station, arrival_station)
7
+ @departure_station = departure_station
8
+ @arrival_station = arrival_station
9
+ @intermediate_stations = []
10
+ end
11
+
12
+ def pretty
13
+ [self.departure_station.name,
14
+ self.intermediate_stations.map(&:name),
15
+ self.arrival_station.name].flatten.join(" -> ")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ require "set"
2
+
3
+ module Map
4
+ module Tube
5
+ class Station
6
+ attr_accessor :id, :name, :line, :links
7
+
8
+ def initialize(id, name, line)
9
+ @id = id
10
+ @name = name
11
+ @line = line
12
+ @links = Set.new()
13
+ end
14
+
15
+ def add_link(link)
16
+ @links << link
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module Map
2
+ module Tube
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
data/lib/map/tube.rb ADDED
@@ -0,0 +1,21 @@
1
+ require "nokogiri"
2
+ require "map/tube/version"
3
+ require "map/tube/exceptions"
4
+ require "map/tube/station"
5
+ require "map/tube/line"
6
+ require "map/tube/route"
7
+ require "map/tube/graph"
8
+ require "map/tube/parser"
9
+ require "map/tube/map_loader"
10
+
11
+ module Map
12
+ module Tube
13
+ def self.new(city_name)
14
+ MapLoader.new(city_name)
15
+ end
16
+
17
+ def self.new_from_xml(city_name, xml_file_path)
18
+ MapLoader.new(city_name, xml_file_path)
19
+ end
20
+ end
21
+ end
data/map-tube.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 'map/tube/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "map-tube"
8
+ spec.version = Map::Tube::VERSION
9
+ spec.authors = ["Radu-Bogdan Croitoru"]
10
+ spec.email = ["croitoruradubogdan@gmail.com"]
11
+
12
+ spec.summary = %q{Core library to process the map data}
13
+ spec.description = %q{The core module to process the map data. It provides the the interface to find the shortest route in terms of stoppage between two nodes.}
14
+ spec.homepage = "https://github.com/radubogdan/map-tube"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6'
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.11"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rspec", "~> 3.0"
27
+ spec.add_development_dependency 'pry', '~> 0.10.3'
28
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: map-tube
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Radu-Bogdan Croitoru
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-01-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.11'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.11'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.10.3
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.10.3
83
+ description: The core module to process the map data. It provides the the interface
84
+ to find the shortest route in terms of stoppage between two nodes.
85
+ email:
86
+ - croitoruradubogdan@gmail.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".rspec"
93
+ - ".travis.yml"
94
+ - Gemfile
95
+ - LICENSE.txt
96
+ - README.md
97
+ - Rakefile
98
+ - bin/console
99
+ - bin/setup
100
+ - data/barcelona-map.xml
101
+ - data/berlin-map.xml
102
+ - data/bucharest-map.xml
103
+ - data/budapest-map.xml
104
+ - data/delhi-map.xml
105
+ - data/glasgow-map.xml
106
+ - data/kazan-map.xml
107
+ - data/kiev-map.xml
108
+ - data/koln-map.xml
109
+ - data/kuala_lampur-map.xml
110
+ - data/london-map.xml
111
+ - data/lyon-map.xml
112
+ - data/malaga-map.xml
113
+ - data/minsk-map.xml
114
+ - data/moscow-map.xml
115
+ - data/new_york-map.xml
116
+ - data/prague-map.xml
117
+ - data/saint_petersburg-map.xml
118
+ - data/singapore-map.xml
119
+ - data/sofia-map.xml
120
+ - data/tblisi-map.xml
121
+ - data/tokyo-map.xml
122
+ - data/vienna-map.xml
123
+ - data/warsow-map.xml
124
+ - lib/map/tube.rb
125
+ - lib/map/tube/exceptions.rb
126
+ - lib/map/tube/graph.rb
127
+ - lib/map/tube/line.rb
128
+ - lib/map/tube/map_loader.rb
129
+ - lib/map/tube/parser.rb
130
+ - lib/map/tube/route.rb
131
+ - lib/map/tube/station.rb
132
+ - lib/map/tube/version.rb
133
+ - map-tube.gemspec
134
+ homepage: https://github.com/radubogdan/map-tube
135
+ licenses:
136
+ - MIT
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.5.1
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Core library to process the map data
158
+ test_files: []