Sha256: 24d61de05f603f4a18f04454230632427393e0dd9ba7c5d0ab81e74c61b106be

Contents?: true

Size: 1.93 KB

Versions: 4

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 = 'https://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

4 entries across 4 versions & 1 rubygems

Version Path
japan_etc-0.6.0 lib/japan_etc/database_provider/nagoya_expressway.rb
japan_etc-0.5.2 lib/japan_etc/database_provider/nagoya_expressway.rb
japan_etc-0.5.1 lib/japan_etc/database_provider/nagoya_expressway.rb
japan_etc-0.5.0 lib/japan_etc/database_provider/nagoya_expressway.rb