Sha256: 79a5935f25c5fcb71f489e35d4025da8d06ce10c4dffb9809fbb0ec1bc67e55f

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

# frozen_string_literal: true

require 'japan_etc/database_provider/base'
require 'japan_etc/tollbooth'
require 'faraday'
require 'nokogiri'

module JapanETC
  module DatabaseProvider
    # http://www.nagoya-expressway.or.jp/etc/etc-lane.html
    class NagoyaExpressway < Base
      URL = 'http://www.nagoya-expressway.or.jp/etc/etc-lane.html'

      def fetch_tollbooths
        rows.map do |row|
          begin
            road_number = Integer(row[4])
            tollbooth_number = Integer(row[5])
          rescue ArgumentError, TypeError
            next
          end

          Tollbooth.create(
            road_number: road_number,
            tollbooth_number: tollbooth_number,
            road_name: '名古屋高速道路',
            route_name: row[0],
            name: row[2]
          )
        end.compact
      end

      def rows
        raw_rows.each_with_object([]).map do |tr, pending_subsequent_rows|
          current_row = pending_subsequent_rows.shift || Row.new

          tr.css('td,th').each_with_index do |td, column_index|
            text = td.text.tr(' ', '')
            current_row[column_index] = text

            next unless td.attr('rowspan')

            subsequent_row_count = Integer(td.attr('rowspan')) - 1

            (0...subsequent_row_count).each do |row_index|
              subsequent_row = (pending_subsequent_rows[row_index] ||= Row.new)
              subsequent_row[column_index] = text
            end
          end

          current_row.to_a
        end
      end

      def raw_rows
        doc.css('tr')
      end

      def doc
        response = Faraday.get(URL)
        Nokogiri(response.body)
      end

      class Row
        def [](index)
          array[index]
        end

        def []=(index, element)
          index += 1 until array[index].nil?
          array[index] = element
        end

        def array
          @array ||= []
        end

        alias to_a array
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
japan_etc-0.4.0 lib/japan_etc/database_provider/nagoya_expressway.rb