diff options
Diffstat (limited to 'lib/stif')
| -rw-r--r-- | lib/stif/codifligne_line_id.rb | 19 | ||||
| -rw-r--r-- | lib/stif/my_workbench_scopes.rb | 3 | ||||
| -rw-r--r-- | lib/stif/netex_file.rb | 93 | 
3 files changed, 75 insertions, 40 deletions
| diff --git a/lib/stif/codifligne_line_id.rb b/lib/stif/codifligne_line_id.rb new file mode 100644 index 000000000..8c1bcc54b --- /dev/null +++ b/lib/stif/codifligne_line_id.rb @@ -0,0 +1,19 @@ +module STIF +  module CodifligneLineId extend self + +    LINE_OBJECT_ID_SEPERATOR = ':' + +    def lines_set_from_functional_scope(functional_scope) +      Set.new( +        functional_scope +          .map{ |line| extract_codif_line_id line }) +    end + + +    private + +    def extract_codif_line_id line_name +      line_name.split(LINE_OBJECT_ID_SEPERATOR).last +    end +  end +end diff --git a/lib/stif/my_workbench_scopes.rb b/lib/stif/my_workbench_scopes.rb index 89c4e659c..04bc93089 100644 --- a/lib/stif/my_workbench_scopes.rb +++ b/lib/stif/my_workbench_scopes.rb @@ -2,12 +2,13 @@ module Stif    class MyWorkbenchScopes      attr_accessor :workbench +          def initialize(workbench)        @workbench = workbench      end      def line_scope(initial_scope) -      ids = self.parse_functional_scope +      ids = parse_functional_scope        ids ? initial_scope.where(objectid: ids) : initial_scope      end diff --git a/lib/stif/netex_file.rb b/lib/stif/netex_file.rb index a977c1ad3..db64ed05e 100644 --- a/lib/stif/netex_file.rb +++ b/lib/stif/netex_file.rb @@ -2,8 +2,9 @@ module STIF    class NetexFile      CALENDAR_FILE_NAME = 'calendriers.xml' -    LINE_FILE_FORMAT = /^offre_.*\.xml$/ -    XML_NAME_SPACE = "http://www.netex.org.uk/netex" +    LINE_FILE_FORMAT   = %r{\A offre_ (?<line_object_id> .*?) _ .* \. xml \z}x +    XML_NAME_SPACE     = "http://www.netex.org.uk/netex" +      def initialize(file_name)        @file_name = file_name @@ -13,58 +14,72 @@ module STIF        frames = Hash.new { |h,k| h[k] = NetexFile::Frame.new(k) }        Zip::File.open(@file_name) do |zipfile|          zipfile.each do |entry| -          next unless entry.ftype == :file - -          entry_dir_name, entry_file_name = File.split(entry.name) -          case entry_file_name -          when CALENDAR_FILE_NAME -            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) -          end +          add_frame(to_frames: frames, from_entry: entry) if entry.ftype == :file          end        end        frames.values      end -  end -  class NetexFile::Frame +    private -    attr_accessor :name +    def add_frame(to_frames:, from_entry:) +      entry_dir_name, entry_file_name = File.split(from_entry.name) -    def initialize(name) -      @name = name -    end +      if CALENDAR_FILE_NAME === entry_file_name +        from_entry.get_input_stream do |stream| +          to_frames[entry_dir_name].parse_calendars(stream.read) +        end +        return +      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)) +      line_file_match =  LINE_FILE_FORMAT.match( entry_file_name ) +      if line_file_match +        to_frames[entry_dir_name].add_offer_file( line_file_match['line_object_id'])        end      end -    def add_offer_file(file_name) -      if file_name =~ /^offre_([^_]*)_/ -        line_refs << $1 + +    class Frame + +      class << self +        def get_line_object_id file_name +          base_name = File.basename(file_name) +          STIF::NetexFile::LINE_FILE_FORMAT.match(base_name).try(:[], 'line_object_id') +        end        end -    end -    def periods -      @periods ||= [] -    end +      attr_accessor :name -    def line_refs -      @line_refs ||= [] -    end +      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 | 
