class GtfsReader::BulkFeedHandler
Public Class Methods
new(bulk_size, args = [], &block)
click to toggle source
# File lib/gtfs_reader/bulk_feed_handler.rb, line 3 def initialize(bulk_size, args = [], &block) @bulk_size = bulk_size @callbacks = {} BulkFeedHandlerDsl.new(self).instance_exec(*args, &block) end
Public Instance Methods
callback?(kind, filename)
click to toggle source
# File lib/gtfs_reader/bulk_feed_handler.rb, line 52 def callback?(kind, filename) @callbacks.key?(filename) && @callbacks[filename].key?(kind) end
create_callback(kind, filename, block)
click to toggle source
# File lib/gtfs_reader/bulk_feed_handler.rb, line 44 def create_callback(kind, filename, block) Log.debug do kind_str = kind.to_s.center(:before.to_s.length).magenta "create callback (#{kind_str}) #{filename.to_s.red}" end callbacks(filename)[kind] = block end
handle_file(filename, reader)
click to toggle source
# File lib/gtfs_reader/bulk_feed_handler.rb, line 13 def handle_file(filename, reader) unless @callbacks.key?(filename) Log.warn { "No handler registered for #{filename.to_s.red}.txt" } return end calls = callbacks(filename) calls[:before].call if calls.key?(:before) read_row = calls[:read] values = [] total = bulk_count = 0 cols = reader.col_names reader.each do |row| values << (read_row ? read_row.call(row) : row) bulk_count += 1 next unless bulk_count == @bulk_size total += bulk_count calls[:bulk].call values, bulk_count, total, cols bulk_count = 0 values = [] end unless bulk_count.zero? calls[:bulk].call(values, bulk_count, (total + bulk_count), cols) end nil end
handler?(filename)
click to toggle source
# File lib/gtfs_reader/bulk_feed_handler.rb, line 9 def handler?(filename) @callbacks.key?(filename) end
Private Instance Methods
callbacks(filename)
click to toggle source
# File lib/gtfs_reader/bulk_feed_handler.rb, line 58 def callbacks(filename) @callbacks[filename] ||= {} end