Add between stops to feed YAML
[bus.git] / maxious-canberra-transit-feed / 05-addbetweenpointstotimetables.rb
blob:a/maxious-canberra-transit-feed/05-addbetweenpointstotimetables.rb -> blob:b/maxious-canberra-transit-feed/05-addbetweenpointstotimetables.rb
--- a/maxious-canberra-transit-feed/05-addbetweenpointstotimetables.rb
+++ b/maxious-canberra-transit-feed/05-addbetweenpointstotimetables.rb
@@ -1,1 +1,50 @@
+require 'rubygems'
+require 'postgres'
+require 'pp'
+require 'yaml'
+class String
+  def escape_single_quotes
+    self.gsub(/'/, "''")
+  end
+end
+class Array
+  def to_yaml_style
+    :inline
+  end
+end
+Dir.chdir("output")
 
+connbus = PGconn.connect("localhost", 5432, '', '', "bus", "postgres", "snmc")
+
+Dir.glob("*.yml") { |file|
+  timetable = YAML::load_file(file)
+  if timetable
+    route_name = timetable["short_name"]
+    timetable["between_stops"] = {}
+    for i in 0..timetable["time_points"].length-2
+	begin
+	  searchFrom = timetable["time_points"][i].escape_single_quotes.split("-")[0].strip
+	  searchTo = timetable["time_points"][i+1].escape_single_quotes.split("-")[0].strip
+	  
+	  between_points = connbus.exec("SELECT * from between_stops
+		  WHERE fromlocation = '#{searchFrom}'
+	  AND tolocation = '#{searchTo}' AND routes LIKE '%#{route_name};%'")
+	rescue PGError => e
+		puts "Error selecting matching between points from DB #{e}"
+		#conn.close() if conn
+	end
+	between_points.each do |between_point_row|
+	  timetable["between_stops"][timetable["time_points"][i] + '-' +timetable["time_points"][i+1]] \
+	      = between_point_row['points'].split(";");
+	end
+    end
+    #pp timetable["between_stops"]
+    File.open(file, "w") do |f|
+      f.write timetable.to_yaml
+    end
+  
+  else
+    print "error, #{file} empty\n"
+  end
+}
+