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