class RailFeeds::NetworkRail::Schedule::Parser
A parent class for parsing schedule data read from schedule file(s). Children need to implement a parse_line
method.
Public Class Methods
new( logger: nil, on_header: nil, on_trailer: nil, on_comment: nil, on_tiploc_create: nil, on_tiploc_update: nil, on_tiploc_delete: nil, on_association_create: nil, on_association_update: nil, on_association_delete: nil, on_train_schedule_create: nil, on_train_schedule_update: nil, on_train_schedule_delete: nil )
click to toggle source
rubocop:disable Metrics/ParameterLists Initialize a new data. @param [Logger, nil] logger
The logger for outputting events, if nil the global logger will be used.
@param [Proc, call] on_header
The proc to call when the header is received. Passes self and a RailFeeds::NetworkRail::Schedule::Header.
@param [Proc, call] on_tiploc_create
The proc to call when a tiploc insertion is received. Passes self and a RailFeeds::NetworkRail::Schedule::Tiploc::Insert.
@param [Proc, call] on_tiploc_update
The proc to call when an amendment to an existing tiploc is received. Passes self, tiploc_id and a RailFeeds::NetworkRail::Schedule::Tiploc::Ammend.
@param [Proc, call] on_tiploc_delete
The proc to call when an existing tiploc should be deleted. Passes self and a tiploc_id.
@param [Proc, call] on_association_create
The proc to call when a new association is received. Passes self and a RailFeeds::NetworkRail::Schedule::Association.
@param [Proc, call] on_association_update
The proc to call when a revision to an existing association is received. Passes self and a RailFeeds::NetworkRail::Schedule::Association.
@param [Proc, call] on_association_delete
The proc to call when an existing association should be deleted. Passes self and a RailFeeds::NetworkRail::Schedule::Association.
@param [Proc, call] on_train_schedule_create
The proc to call when a new train schedule is received. Passes self and a RailFeeds::NetworkRail::Schedule::TrainSchedule::New.
@param [Proc, call] on_train_schedule_update
The proc to call when a revision to an existing train schedule is received. Passes self and a RailFeeds::NetworkRail::Schedule::TrainSchedule::Revise.
@param [Proc, call] on_train_schedule_delete
The proc to call when an existing train schedule should be deleted. Passes self and a RailFeeds::NetworkRail::Schedule::TrainSchedule::Delete.
@param [Proc, call] on_trailer
The proc to call when the trailer (end of file record) is received. Passes self.
@param [Proc, call] on_comment
The proc to call when a comment is received. Passes self and a String.
# File lib/rail_feeds/network_rail/schedule/parser.rb, line 51 def initialize( logger: nil, on_header: nil, on_trailer: nil, on_comment: nil, on_tiploc_create: nil, on_tiploc_update: nil, on_tiploc_delete: nil, on_association_create: nil, on_association_update: nil, on_association_delete: nil, on_train_schedule_create: nil, on_train_schedule_update: nil, on_train_schedule_delete: nil ) self.logger = logger unless logger.nil? @on_header = on_header @on_trailer = on_trailer @on_tiploc_create = on_tiploc_create @on_tiploc_update = on_tiploc_update @on_tiploc_delete = on_tiploc_delete @on_association_create = on_association_create @on_association_update = on_association_update @on_association_delete = on_association_delete @on_train_schedule_create = on_train_schedule_create @on_train_schedule_update = on_train_schedule_update @on_train_schedule_delete = on_train_schedule_delete @on_comment = on_comment end
Public Instance Methods
parse_file(file)
click to toggle source
Parse the data in file. @param [IO] file
The file to load data from.
# File lib/rail_feeds/network_rail/schedule/parser.rb, line 78 def parse_file(file) @file_ended = false @stop_parsing = false file.each_line do |line| parse_line line if @stop_parsing logger.debug "Parsing of file #{file} was stopped." break end end fail "File is incomplete. #{file}" unless @stop_parsing || @file_ended end
parse_line(_line)
click to toggle source
# File lib/rail_feeds/network_rail/schedule/parser.rb, line 94 def parse_line(_line) fail 'parse_file MUST be implemented in the child class.' end
stop_parsing()
click to toggle source
Stop parsing the current file.
# File lib/rail_feeds/network_rail/schedule/parser.rb, line 99 def stop_parsing @stop_parsing = true end