aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert2017-11-21 20:25:24 +0100
committerRobert2017-11-21 20:25:24 +0100
commit38a7b559853079926dcd8de5fdfef56ec978f91d (patch)
treeb77868b09b83d5fbd3ddfc8bd5ddd418b27b4048
parentacb37189bea8e0bd2c36d9b02042a8e3ee5bb238 (diff)
downloadchouette-core-0000-refactor_netex_file.tar.bz2
-rw-r--r--lib/stif/netex_file.rb48
-rw-r--r--lib/stif/netex_file/frame.rb44
-rw-r--r--spec/lib/stif/netex_file/frame_spec.rb13
-rw-r--r--spec/lib/stif/netex_file_spec.rb4
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