class TokyoMetro::App::Renderer::RealTimeInfos::EachRailwayLine

Constants

TRAIN_OPERATION_STATUS_FOR_TEST

Attributes

railway_line[R]
train_location_infos[R]
train_operation_info[R]

Public Class Methods

new( request , railway_line , http_client , test_mode ) click to toggle source
Calls superclass method
# File lib/tokyo_metro/app/renderer/real_time_infos/each_railway_line.rb, line 5
def initialize( request , railway_line , http_client , test_mode )
  super( request )
  @railway_line = railway_line
  get_train_operation_info( http_client , test_mode )
  get_train_location_infos( http_client , test_mode )
  set_max_delay
end

Public Instance Methods

render_train_location_infos() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos/each_railway_line.rb, line 21
def render_train_location_infos
  if @train_location_infos.present?
    @train_location_infos.decorate( request , @railway_line ).render
  end
end
render_train_operation_info( controller ) click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos/each_railway_line.rb, line 17
def render_train_operation_info( controller )
  @train_operation_info.decorate( request , @railway_line , @max_delay , controller , no_train? ).render
end
update_train_operation_text_in_db() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos/each_railway_line.rb, line 27
def update_train_operation_text_in_db
  if @train_operation_info.instance_of?( ::TokyoMetro::Api::TrainOperation::Info )
    @train_operation_info.update_train_operation_text_in_db
  end
end

Private Instance Methods

get_train_location_infos( http_client , test_mode ) click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos/each_railway_line.rb, line 60
def get_train_location_infos( http_client , test_mode )
  case test_mode
  when nil
    begin
      @train_location_infos = ::TokyoMetro::Api::TrainLocation.get( http_client , @railway_line.same_as , parse_json: true , generate_instance: true )
    rescue ::SocketError
      @train_operation_info = ::TokyoMetro::Api::TrainOperation::Info::NetworkError.instance
      @train_location_infos = nil
    rescue ::JSON::ParserError
      @train_operation_info = ::TokyoMetro::Api::TrainOperation::Info::JsonParserError.instance
      @train_location_infos = nil
    ensure
      sleep( 0.2 )
    end
  when :network_error , :json_parser_error
    @train_location_infos = nil
  else
    raise
  end
end
get_train_operation_info( http_client , test_mode ) click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos/each_railway_line.rb, line 35
def get_train_operation_info( http_client , test_mode )
  case test_mode
  when nil
    begin
      train_operation_infos = ::TokyoMetro::Api::TrainOperation.get( http_client , railway_line: @railway_line.same_as , parse_json: true , generate_instance: true )
      if train_operation_infos.length > 1
        raise "Error"
      end
      @train_operation_info = train_operation_infos.first
    rescue ::SocketError
      @train_operation_info = ::TokyoMetro::Api::TrainOperation::Info::NetworkError.instance
    rescue ::JSON::ParserError
      @train_operation_info = ::TokyoMetro::Api::TrainOperation::Info::JsonParserError.instance
    ensure
      sleep( 0.2 )
    end
  when :network_error
    @train_operation_info = ::TokyoMetro::Api::TrainOperation::Info::NetworkError.instance
  when :json_parser_error
    @train_operation_info = ::TokyoMetro::Api::TrainOperation::Info::JsonParserError.instance
  else
    raise
  end
end
no_train?() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos/each_railway_line.rb, line 85
def no_train?
  @train_location_infos.blank?
end
set_max_delay() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos/each_railway_line.rb, line 81
def set_max_delay
  @max_delay = @train_location_infos.try( :max_delay )
end