diff options
| author | Robert | 2017-11-21 20:25:24 +0100 |
|---|---|---|
| committer | Robert | 2017-11-21 20:25:24 +0100 |
| commit | 38a7b559853079926dcd8de5fdfef56ec978f91d (patch) | |
| tree | b77868b09b83d5fbd3ddfc8bd5ddd418b27b4048 | |
| parent | acb37189bea8e0bd2c36d9b02042a8e3ee5bb238 (diff) | |
| download | chouette-core-0000-refactor_netex_file.tar.bz2 | |
Jenkins test0000-refactor_netex_file
| -rw-r--r-- | lib/stif/netex_file.rb | 48 | ||||
| -rw-r--r-- | lib/stif/netex_file/frame.rb | 44 | ||||
| -rw-r--r-- | spec/lib/stif/netex_file/frame_spec.rb | 13 | ||||
| -rw-r--r-- | spec/lib/stif/netex_file_spec.rb | 4 |
4 files changed, 68 insertions, 41 deletions
diff --git a/lib/stif/netex_file.rb b/lib/stif/netex_file.rb index a977c1ad3..e3f451bc8 100644 --- a/lib/stif/netex_file.rb +++ b/lib/stif/netex_file.rb @@ -1,10 +1,15 @@ +require_relative 'netex_file/frame' + module STIF class NetexFile CALENDAR_FILE_NAME = 'calendriers.xml' - LINE_FILE_FORMAT = /^offre_.*\.xml$/ XML_NAME_SPACE = "http://www.netex.org.uk/netex" + class << self + def line_file_format; %r{\A offre_ (.*?) _ .* \. xml \z}x end + end + def initialize(file_name) @file_name = file_name end @@ -21,8 +26,8 @@ module STIF entry.get_input_stream do |stream| frames[entry_dir_name].parse_calendars(stream.read) end - when LINE_FILE_FORMAT - frames[entry_dir_name].add_offer_file(entry_file_name) + when self.class.line_file_format + frames[entry_dir_name].add_offer_file($1) end end end @@ -30,41 +35,4 @@ module STIF end end - - class NetexFile::Frame - - attr_accessor :name - - def initialize(name) - @name = name - end - - def parse_calendars(calendars) - # <netex:ValidBetween> - # <netex:FromDate>2017-03-01</netex:FromDate> - # <netex:ToDate>2017-03-31</netex:ToDate> - # </netex:ValidBetween> - xml = Nokogiri::XML(calendars) - xml.xpath("//netex:ValidBetween", "netex" => NetexFile::XML_NAME_SPACE).each do |valid_between| - from_date = valid_between.xpath("netex:FromDate").try :text - to_date = valid_between.xpath("netex:ToDate").try :text - periods << Range.new(Date.parse(from_date), Date.parse(to_date)) - end - end - - def add_offer_file(file_name) - if file_name =~ /^offre_([^_]*)_/ - line_refs << $1 - end - end - - def periods - @periods ||= [] - end - - def line_refs - @line_refs ||= [] - end - - end end diff --git a/lib/stif/netex_file/frame.rb b/lib/stif/netex_file/frame.rb new file mode 100644 index 000000000..5299f3216 --- /dev/null +++ b/lib/stif/netex_file/frame.rb @@ -0,0 +1,44 @@ +module STIF + class NetexFile + class Frame + + class << self + def get_line_object_id file_name + STIF::NetexFile.line_file_format.match(file_name).try(:[], 1) + end + end + + attr_accessor :name + + def initialize(name) + @name = name + end + + def parse_calendars(calendars) + # <netex:ValidBetween> + # <netex:FromDate>2017-03-01</netex:FromDate> + # <netex:ToDate>2017-03-31</netex:ToDate> + # </netex:ValidBetween> + xml = Nokogiri::XML(calendars) + xml.xpath("//netex:ValidBetween", "netex" => NetexFile::XML_NAME_SPACE).each do |valid_between| + from_date = valid_between.xpath("netex:FromDate").try :text + to_date = valid_between.xpath("netex:ToDate").try :text + periods << Range.new(Date.parse(from_date), Date.parse(to_date)) + end + end + + def add_offer_file(line_object_id) + line_refs << line_object_id + end + + def periods + @periods ||= [] + end + + def line_refs + @line_refs ||= [] + end + + end + end +end diff --git a/spec/lib/stif/netex_file/frame_spec.rb b/spec/lib/stif/netex_file/frame_spec.rb new file mode 100644 index 000000000..eb80e7b14 --- /dev/null +++ b/spec/lib/stif/netex_file/frame_spec.rb @@ -0,0 +1,13 @@ +require 'stif/netex_file' +RSpec.describe STIF::NetexFile::Frame do + + context "line object id extraction" do + it "gets the line object id if frame describes a line" do + expect( described_class.get_line_object_id('offre_C00109_10.xml') ).to eq('C00109') + end + + it "gets nil if the frame does not describe a line" do + expect( described_class.get_line_object_id('commun.xml') ).to be_nil + end + end +end diff --git a/spec/lib/stif/netex_file_spec.rb b/spec/lib/stif/netex_file_spec.rb index ef69b994c..850d0d3de 100644 --- a/spec/lib/stif/netex_file_spec.rb +++ b/spec/lib/stif/netex_file_spec.rb @@ -1,8 +1,9 @@ +require 'stif/netex_file' RSpec.describe STIF::NetexFile do let( :zip_file ){ fixtures_path 'OFFRE_TRANSDEV_2017030112251.zip' } - let(:frames) { STIF::NetexFile.new(zip_file).frames } + let(:frames) { described_class.new(zip_file).frames } it "should return a frame for each sub directory" do expect(frames.size).to eq(2) @@ -22,4 +23,5 @@ RSpec.describe STIF::NetexFile do end end + end |
