class TokyoMetro::Api::StationTrainTime

Attributes

station_timetables[R]

@return [TokyoMetro::Api::StationTimetable::List <TokyoMetro::Api::StationTimetable::Info>] 流し込みの対象となる列車時刻に関連する駅時刻表

train_timetables[R]

@return [TokyoMetro::Api::TrainTimetable::List <TokyoMetro::Api::TrainTimetable::Info>] 流し込みの対象となる列車時刻に関連する列車時刻表

Public Class Methods

new( station_timetables , train_timetables ) click to toggle source

Constructor @param station_timetables [TokyoMetro::Api::StationTimetable::List <TokyoMetro::Api::StationTimetable::Info>] 流し込みの対象となる列車時刻に関連する駅時刻表 @param train_timetables [TokyoMetro::Api::TrainTimetable::List <TokyoMetro::Api::TrainTimetable::Info>] 流し込みの対象となる列車時刻に関連する列車時刻表

# File lib/tokyo_metro/api/station_train_time.rb, line 9
def initialize( station_timetables , train_timetables )
  @station_timetables = station_timetables
  @train_timetables = train_timetables
end
seed( *method_names_for_selecting_railway_line ) click to toggle source

駅時刻表、列車時刻表を限定し DB への流し込みを行うクラスメソッド @param method_names_for_selecting_railway_line [::Array <Symbol>] 駅時刻表、列車時刻表を限定するためのメソッドの名称(可変長引数) @note method_names_for_selecting_railway_line を指定しない場合は、すべての駅時刻表・列車時刻表に対し処理を行う。

# File lib/tokyo_metro/api/station_train_time.rb, line 33
def self.seed( *method_names_for_selecting_railway_line )
  station_train_time_infos = self.new( ::TokyoMetro::Api.station_timetables , ::TokyoMetro::Api.train_timetables )
  station_train_time_infos.select_timetables!( *method_names_for_selecting_railway_line )
  station_train_time_infos.seed
end

Private Class Methods

proc_for_select_timetables() click to toggle source
# File lib/tokyo_metro/api/station_train_time.rb, line 43
def proc_for_select_timetables
  # method_list は、method_names_for_selecting_railway_line に相当
  Proc.new { | method_list , timetables |
    timetables.class.new( method_list.flatten.map { | method | timetables.send( method ) }.flatten )
  }
end

Public Instance Methods

select_timetables!( *method_names_for_selecting_railway_line ) click to toggle source
# File lib/tokyo_metro/api/station_train_time.rb, line 20
def select_timetables!( *method_names_for_selecting_railway_line )
  unless method_names_for_selecting_railway_line.empty?
    @station_timetables = self.class.send( :proc_for_select_timetables ).call( method_names_for_selecting_railway_line , @station_timetables )
    @train_timetables = self.class.send( :proc_for_select_timetables ).call( method_names_for_selecting_railway_line , @train_timetables )
  end

  process_station_timetable_of_marunouchi_line( method_names_for_selecting_railway_line )
  process_station_timetable_of_namboku_line( method_names_for_selecting_railway_line )
end

Private Instance Methods

process_station_timetable_of_marunouchi_line( method_names_for_selecting_railway_line ) click to toggle source
# File lib/tokyo_metro/api/station_train_time.rb, line 72
def process_station_timetable_of_marunouchi_line( method_names_for_selecting_railway_line )
  proc_for_checking_method_name = ::Proc.new { | method_name | /\marunouchi/ === method_name.to_s }

  procs_for_selecting_station_timetables_1 = ::TokyoMetro::Modules::Common::Dictionary::Station::StringList.between_honancho_and_nakano_sakaue_in_system.map { | sta |
    ::Proc.new { | item | item.same_as == "odpt.StationTimetable:TokyoMetro.MarunouchiBranch.#{sta}.Honancho" }
  }
  procs_for_selecting_station_timetables_2 = ::TokyoMetro::Modules::Common::Dictionary::Station::StringList.between_honancho_and_nakano_shimbashi_in_system.map { | sta |
    ::Proc.new { | item | item.same_as == "odpt.StationTimetable:TokyoMetro.MarunouchiBranch.#{sta}.NakanoSakaue" }
  }

  process_station_timetable_of_specific_line(
    method_names_for_selecting_railway_line ,
    proc_for_checking_method_name ,
    procs_for_selecting_station_timetables_1 + procs_for_selecting_station_timetables_2
  )
end
process_station_timetable_of_namboku_line( method_names_for_selecting_railway_line ) click to toggle source
# File lib/tokyo_metro/api/station_train_time.rb, line 89
def process_station_timetable_of_namboku_line( method_names_for_selecting_railway_line )
  proc_for_checking_method_name = ::Proc.new { | method_name | /\Anamboku_(?:or|and)_toei_mita(?:_line)?\Z/ === method_name.to_s }

  procs_for_selecting_station_timetables_1 = [ "ShirokaneTakanawa" , "Shirokanedai" ].map { | sta |
    ::Proc.new { | item | item.same_as == "odpt.StationTimetable:TokyoMetro.Namboku.#{sta}.Meguro.Toei.Mita.#{sta}.Meguro" }
  }
  procs_for_selecting_station_timetables_2 = [ "Meguro" , "Shirokanedai" ].map { | sta |
    ::Proc.new { | item | item.same_as == "odpt.StationTimetable:TokyoMetro.Namboku.#{sta}.AkabaneIwabuchi.Toei.Mita.#{sta}.NishiTakashimadaira" }
  }

  process_station_timetable_of_specific_line(
    method_names_for_selecting_railway_line ,
    proc_for_checking_method_name ,
    procs_for_selecting_station_timetables_1 + procs_for_selecting_station_timetables_2
  )
end
process_station_timetable_of_specific_line( method_names_for_selecting_railway_line , proc_for_checking_method_name , procs_for_selecting_station_timetables ) click to toggle source
# File lib/tokyo_metro/api/station_train_time.rb, line 54
def process_station_timetable_of_specific_line( method_names_for_selecting_railway_line , proc_for_checking_method_name , procs_for_selecting_station_timetables )
  if method_names_for_selecting_railway_line.any?( &proc_for_checking_method_name )
    station_timetable_list_class = @station_timetables.class
    procs_for_selecting_station_timetables = [ procs_for_selecting_station_timetables ].flatten

    station_timetables_new = ::Array.new

    procs_for_selecting_station_timetables.each do | procedure_for_selecting_station_timetable |
      station_timetables_new += @station_timetables.select( &procedure_for_selecting_station_timetable )
      @station_timetables.delete_if( &procedure_for_selecting_station_timetable )
    end

    station_timetables_new += @station_timetables

    @station_timetables = station_timetable_list_class.new( station_timetables_new )
  end
end