class TokyoMetro::ApiProcessor::RealTimeInfos

リアルタイム情報を処理するためのクラス

Attributes

http_client[R]
infos_of_each_railway_line[R]
provision_status[R]

列車運行情報、列車ロケーション情報の配信状況 @return [::TokyoMetro::ApiProcessor::RealTimeInfos::ProvisionStatus]

railway_lines[R]

Public Class Methods

new( railway_lines: ::Railway.tokyo_metro , http_client: ::HTTPClient.new ) click to toggle source

Constructor @param railway_lines [::Railway] 路線(複数)の情報(ActiveRecord により取得) @param http_client [::HTTPClient.new] リアルタイム情報を取得するための HTTP クライアントのインスタンス

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 7
def initialize( railway_lines: ::Railway.tokyo_metro , http_client: ::HTTPClient.new )
  @railway_lines = railway_lines
  raise "Error" unless has_any_railway_line?

  @http_client = http_client

  initialize_list_of_real_time_infos
  set_train_operation_infos_of_railway_lines( all: true )

  @provision_status = ::TokyoMetro::ApiProcessor::RealTimeInfos::ProvisionStatus.new
end

Public Instance Methods

has_any_railway_line?() click to toggle source

インスタンス変数 railway_lines に路線の情報が含まれているか否かを判定するメソッド @return [Boolean]

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 38
def has_any_railway_line?
  @railway_lines.present?
end
has_any_railway_line_except_for_branch_lines?() click to toggle source

インスタンス変数 railway_lines に「支線ではない路線」の情報が含まれているか否か @return [Boolean]

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 56
def has_any_railway_line_except_for_branch_lines?
  railway_lines_except_for_branch_lines.present?
end
has_multiple_railway_lines?() click to toggle source

インスタンス変数 railway_lines に含まれている路線の情報が複数か否かを判定するメソッド @return [Boolean]

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 50
def has_multiple_railway_lines?
  @railway_lines.length > 1
end
has_multiple_railway_lines_except_for_branch_lines?() click to toggle source

インスタンス変数 railway_lines に含まれている「支線ではない路線」の情報が1つか否かを判定するメソッド @return [Boolean]

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 68
def has_multiple_railway_lines_except_for_branch_lines?
  railway_lines_except_for_branch_lines.length > 1
end
has_one_railway_line?() click to toggle source

インスタンス変数 railway_lines に含まれている路線の情報が1つか否かを判定するメソッド @return [Boolean]

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 44
def has_one_railway_line?
  @railway_lines.length == 1
end
has_one_railway_line_except_for_branch_lines?() click to toggle source

インスタンス変数 railway_lines に含まれている「支線ではない路線」の情報が1つか否かを判定するメソッド @return [Boolean]

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 62
def has_one_railway_line_except_for_branch_lines?
  railway_lines_except_for_branch_lines.length == 1
end
railway_lines_except_for_branch_lines() click to toggle source

支線を除く路線(複数)のインスタンス

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 32
def railway_lines_except_for_branch_lines
  @railway_lines.except_for_branch_lines
end

Private Instance Methods

got_no_train_operation_info?( train_operation_infos ) click to toggle source
# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 152
def got_no_train_operation_info?( train_operation_infos )
  train_operation_infos.empty?
end
initialize_list_of_real_time_infos() click to toggle source

@!group Constructor で使用する private メソッド - private methods in the constructor

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 107
def initialize_list_of_real_time_infos
  @infos_of_each_railway_line = ::TokyoMetro::ApiProcessor::RealTimeInfos::RailwayLine::List.new(
    railway_lines_except_for_branch_lines.map { | railway_line |
    ::TokyoMetro::ApiProcessor::RealTimeInfos::RailwayLine::Info.new( railway_line , @http_client )
    }
  )
end
new_train_operation_infos_in_api( railway_lines_same_as , all ) click to toggle source

新しい運行情報を API から取得するメソッド @param [String] railway_lines_same_as 運行情報をセットしたい路線の名称 (same_as) @note railway_lines_same_as が指定されておらず、all が true の場合、すべての路線について取得する。 @return [::TokyoMetro::Api::TrainOperation::List]

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 127
def new_train_operation_infos_in_api( railway_lines_same_as , all )
  _railway_lines_for_getting_train_operation_infos = railway_lines_for_getting_train_operation_infos( railway_lines_same_as , all )
  selected_railway_lines_same_as = railway_lines_for_getting_train_operation_infos( railway_lines_same_as , all ).pluck( :same_as )
  train_operation_infos = ::TokyoMetro::Api::TrainOperation.get(
    @http_client ,
    parse_json: true ,
    generate_instance: true
  )
  sleep( 0.2 )
  # 列車運行情報の取得に失敗した場合
  unless succeed_to_get_new_train_operation_infos?( _railway_lines_for_getting_train_operation_infos , train_operation_infos )
    # 取得できた列車運行情報がない場合
    if got_no_train_operation_info?
      # 列車運行情報の配信ステータスを false とする
      train_operation_infos_are_not_provided!
    end
  end
  train_operation_infos
end
railway_lines_for_getting_train_operation_infos( railway_lines_same_as , all ) click to toggle source
# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 164
def railway_lines_for_getting_train_operation_infos( railway_lines_same_as , all )
  # 路線名が指定されていない場合
  if railway_lines_same_as.blank? or railway_lines_same_as == [ nil ]
    unless all
      raise "Error"
    end
    railway_lines_except_for_branch_lines

  # 路線名が指定されている場合
  else
    unless all.nil? or !( all )
      raise "Error"
    end
    r = railway_lines_same_as_included_in_infos_of_each_railway_line
    unless railway_lines_same_as.all? { | railway_line_same_as | r.include?( railway_line_same_as ) }
      raise "Error"
    end
    railway_lines_except_for_branch_lines.where( same_as: railway_lines_same_as )
  end
end
railway_lines_included_in_infos_of_each_railway_line() click to toggle source
# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 156
def railway_lines_included_in_infos_of_each_railway_line
  @infos_of_each_railway_lines.railway_lines
end
railway_lines_same_as_included_in_infos_of_each_railway_line() click to toggle source
# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 160
def railway_lines_same_as_included_in_infos_of_each_railway_line
  @infos_of_each_railway_lines.railway_lines_same_as
end
set_train_operation_infos_of_railway_lines( *railway_lines_same_as , all: nil ) click to toggle source

インスタンス変数 infos_of_each_railway_line の各要素に運行情報をセットするメソッド @note Constructor でも使用する

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 119
def set_train_operation_infos_of_railway_lines( *railway_lines_same_as , all: nil )
  _new_train_operation_infos = new_train_operation_infos_in_api( railway_lines_same_as , all )
end
succeed_to_get_new_train_operation_infos?( _railway_lines_for_getting_train_operation_infos , train_operation_infos ) click to toggle source

列車運行情報の取得に成功したか否かを判定するメソッド

# File lib/tokyo_metro/api_processor/real_time_infos.rb, line 148
def succeed_to_get_new_train_operation_infos?( _railway_lines_for_getting_train_operation_infos , train_operation_infos )
  _railway_lines_for_getting_train_operation_infos.sort == train_operation_infos.railway_lines_same_as.sort
end