class TokyoMetro::App::Renderer::RealTimeInfos

Attributes

infos_of_each_railway_line[R]

Public Class Methods

new( request , railway_lines , http_client = ::HTTPClient.new , visibility: :visible , test_mode: nil ) click to toggle source
Calls superclass method
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 3
def initialize( request , railway_lines , http_client = ::HTTPClient.new , visibility: :visible , test_mode: nil )
  super( request )
  @http_client = http_client
  @visibility = visibility
  @test_mode = test_mode

  set_railway_lines( railway_lines )
  set_infos_of_each_railway_line

  raise unless has_any_railway_line?

  set_meta_datum
end
process_in_loop() click to toggle source

定期実行する処理

# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 147
def self.process_in_loop
  if on_rails_application?
    puts "process_in_loop"
    self.new( nil , ::RailwayLine.tokyo_metro , visibility: :hidden ).update_train_operation_text_in_db
  end
  return nil
end

Public Instance Methods

has_any_railway_line?() click to toggle source

@!group 判定 - 路線

# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 21
def has_any_railway_line?
  @railway_lines.present?
end
has_multiple_railway_lines?() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 29
def has_multiple_railway_lines?
  @railway_lines.length > 1
end
has_one_railway_line?() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 25
def has_one_railway_line?
  @railway_lines.length == 1
end
has_train_location_infos?() click to toggle source

@!group 判定 - 列車位置情報

# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 35
def has_train_location_infos?
  @infos_of_each_railway_line.map( &:train_location_infos ).flatten.present?
end
has_valid_train_location_infos?() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 39
def has_valid_train_location_infos?
  valid_train_location_infos.present?
end
render( include_train_location_infos: false , controller: :train_operation , options: nil ) click to toggle source

@!group render - (1) Main

# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 51
  def render( include_train_location_infos: false , controller: :train_operation , options: nil )
    if options.present?
      options = [ options ].flatten
    end

    h_locals = {
      this: self ,
      request: @request ,
      include_train_location_infos: include_train_location_infos ,
      controller: controller ,
      add_index_of_train_location: options.try( :include? , :add_index_of_train_location )
    }

    h.render inline: <<-HAML , type: :haml , locals: h_locals
%div{ id: :train_operation_infos }
  = this.render_title_of_train_operation_infos( add_index_of_train_location: add_index_of_train_location )
  = this.render_train_operation_infos( controller )
  - if include_train_location_infos
    - if this.has_valid_train_location_infos?
      = this.render_title_of_train_location_infos
      = this.render_train_location_infos
    HAML
  end
render_meta_datum( include_train_location_infos: nil ) click to toggle source

@!group render - 3. Meta Data

# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 140
def render_meta_datum( include_train_location_infos: nil )
  @meta_datum.try( :render , include_train_location_infos: include_train_location_infos )
end
render_title_of_train_location_infos() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 128
def render_title_of_train_location_infos
  ::TokyoMetro::App::Renderer::Concerns::Header::Content.new(
    @request ,
    :title_of_train_location_infos ,
    :train_location ,
    ::TrainLocationDecorator.common_title_ja ,
    ::TrainLocationDecorator.common_title_en
  ).render
end
render_title_of_train_operation_infos( add_index_of_train_location: false ) click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 103
  def render_title_of_train_operation_infos( add_index_of_train_location: false )
    proc_for_additional_content = ::Proc.new {
      h.render inline: <<-HAML , type: :haml , locals: { this: self , add_index_of_train_location: add_index_of_train_location }
- if add_index_of_train_location and this.has_train_location_infos?
  %div{ class: :link_info_to_train_location_of_each_railway_line }
    %div{ class: :icon }<
      = ::TokyoMetro::App::Renderer::Icon.train_location( request , 2 ).render
    %div{ class: :text }<
      %p{ class: :text_ja }<
        = "路線名をクリックすると、各路線で現在運行している列車が表示されます。"
      %p{ class: :text_en }<
        = "To display train locations of each railway line, please click the railway line name."
      HAML
    }

    ::TokyoMetro::App::Renderer::Concerns::Header::Content.new(
      @request ,
      :title_of_train_operation_infos ,
      :train_operation ,
      ::TrainOperation::InfoDecorator.common_title_ja ,
      ::TrainOperation::InfoDecorator.common_title_en ,
      additional_content: proc_for_additional_content
    ).render
  end
render_train_location_infos() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 89
  def render_train_location_infos
    h.render inline: <<-HAML , type: :haml , locals: { this: self }
%div{ id: :train_location_infos }
  - if this.has_one_railway_line?
    - this.infos_of_each_railway_line.each do | info_of_a_railway_line |
      = info_of_a_railway_line.render_train_location_infos
  - else
    - this.infos_of_each_railway_line.each do | info_of_a_railway_line |
      - if info_of_a_railway_line.train_location_infos.present?
        = info_of_a_railway_line.railway_line.decorate.render_title_in_train_location
        = info_of_a_railway_line.render_train_location_infos
    HAML
  end
render_train_operation_infos( controller ) click to toggle source

@!group render - 2. Sub

# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 77
  def render_train_operation_infos( controller )
    h_locals = {
      this: self ,
      controller: controller
    }

    h.render inline: <<-HAML , type: :haml , locals: h_locals
- this.infos_of_each_railway_line.each do | info_of_a_railway_line |
  = info_of_a_railway_line.render_train_operation_info( controller )
    HAML
  end
update_train_operation_text_in_db() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 43
def update_train_operation_text_in_db
  @infos_of_each_railway_line.each do | info_of_railway_line |
    info_of_railway_line.update_train_operation_text_in_db
  end
end

Private Instance Methods

set_infos_of_each_railway_line() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 165
def set_infos_of_each_railway_line
  @infos_of_each_railway_line = ::Array.new( @railway_lines.map { | railway_line |
    ::TokyoMetro::App::Renderer::RealTimeInfos::EachRailwayLine.new( request , railway_line , @http_client , @test_mode)
  })
end
set_meta_datum() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 191
def set_meta_datum
  if valid_train_operation_infos.present?
    @meta_datum = ::TokyoMetro::App::Renderer::RealTimeInfos::MetaDatum::Whole.new( request , valid_train_operation_infos , valid_train_location_infos , @visibility )
  else
    @meta_datum = nil
  end
end
set_railway_lines( railway_lines ) click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 157
def set_railway_lines( railway_lines )
  if railway_lines.instance_of?( ::RailwayLine )
    @railway_lines = [ railway_lines ]
  else
    @railway_lines = railway_lines.except_for_branch_lines
  end
end
train_location_infos() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 175
def train_location_infos
  if has_train_location_infos?
    @infos_of_each_railway_line.map( &:train_location_infos ).flatten
  else
    nil
  end
end
train_operation_infos() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 171
def train_operation_infos
  @infos_of_each_railway_line.map( &:train_operation_info ).flatten
end
valid_train_location_infos() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 187
def valid_train_location_infos
  train_location_infos.try( :select , &:present? )
end
valid_train_operation_infos() click to toggle source
# File lib/tokyo_metro/app/renderer/real_time_infos.rb, line 183
def valid_train_operation_infos
  train_operation_infos.keep_if { | item | item.instance_of?( ::TokyoMetro::Api::TrainOperation::Info ) }
end