class TokyoMetro::Factory::Decorate::Api::TrainOperation::Info

Public Class Methods

new( request , obj , railway_line , max_delay , controller , no_train ) click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 3
def initialize( request , obj , railway_line , max_delay , controller , no_train )
  super( request , obj , railway_line , controller )
  set_max_delay( max_delay )
  @no_train = no_train

  @status_type = status_type_on_initialize
end
render_status_icon_and_text( request , status_type , icon_size = 3 ) click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 139
  def self.render_status_icon_and_text( request , status_type , icon_size = 3 )
    h_locals_i = {
      request: request ,
      status_type: status_type ,
      icon_size: icon_size
    }
    h.render inline: <<-HAML , type: :haml , locals: { this: self }
%div{ class: :icon }<
  = ::TokyoMetro::App::Renderer::Icon.send( this.status_type , request , 3 ).render
%div{ class: :text }
  %p{ class: :text_ja }<
    = this.status_text_ja
  %p{ class: :text_en }<
    = this.status_text_en
    HAML
  end

Public Instance Methods

additional_info_abstruct_en() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 19
def additional_info_abstruct_en
  if actually_delayed?
    nil
  else
    object.train_operation_status.try( :name_en_for_display )
  end
end
additional_info_abstruct_ja() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 11
def additional_info_abstruct_ja
  if actually_delayed?
    nil
  else
    object.train_operation_status.try( :name_ja_for_display )
  end
end
additional_info_precise_en() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 48
def additional_info_precise_en
  case @status_type
  when :after_last_train_finished
    "Today's operation was finished."
  when :before_first_train_begin
    "Please wait for the first train."
  when :no_train
    "No train is operated now."
  else
    if actually_delayed?
      nil
    else
      object.text_en
    end
  end
end
additional_info_precise_ja() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 27
def additional_info_precise_ja
  case @status_type
  when :after_last_train_finished
    "本日の運行は終了しました。"
  when :before_first_train_begin
    "運行開始までお待ち下さい。"
  when :no_train
    "運行中の列車はありません。"
  else
    if actually_delayed?
      nil
    else
      object.text_in_api
    end
  end
end
additional_info_precise_ja_to_a() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 44
def additional_info_precise_ja_to_a
  additional_info_precise_ja.try( :split , /\n/ )
end
render_status_additional_infos() click to toggle source

@note 親クラスで定義済 def render end def render_status_icon_and_text end

# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 105
  def render_status_additional_infos
    h_locals_i = {
      this: self ,
      max_delay_decorator: max_delay_decorator ,
      to_render_status_additional_infos_ja: to_render_status_additional_infos_ja? ,
      to_render_status_additional_infos_en: to_render_status_additional_infos_en?
    }
    h.render inline: <<-HAML , type: :haml , locals: h_locals_i
%div{ class: :additional_infos }<
  - if to_render_status_additional_infos_ja
    %div{ class: :text_ja }
      - if this.additional_info_abstruct_ja.present?
        %p{ class: :abstruct }<
          = this.additional_info_abstruct_ja
      - if max_delay_decorator.try( :displayed_in_train_operation_info? )
        = max_delay_decorator.render_ja_in_train_operation_info
      - if this.additional_info_precise_ja_to_a.present?
        - this.additional_info_precise_ja_to_a.each do | row |
          %p{ class: :precise }<
            = row

  - if to_render_status_additional_infos_en
    %div{ class: :text_en }
      - if this.additional_info_abstruct_en.present?
        %p{ class: :abstruct }<
          = this.additional_info_abstruct_en
      - if max_delay_decorator.displayed_in_train_operation_info?
        = max_delay_decorator.render_en_in_train_operation_info
      - if this.additional_info_precise_en.present?
        %p{ class: :precise }<
          = this.additional_info_precise_en
    HAML
  end
status_text_en() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 82
def status_text_en
  case status_type
  when :no_train , :after_last_train_finished , :before_first_train_begin
    "No train is operated now."
  when :on_schedule
    "Now on schedule"
  when :nearly_on_schedule
    "Now on schedule"
  when :delayed
    "Delayed"
  when :suspended
    "Operation suspended"
  when :other_status
    "Information"
  end
end
status_text_ja() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 65
def status_text_ja
  case status_type
  when :no_train , :after_last_train_finished , :before_first_train_begin
    "運行中の列車 なし"
  when :on_schedule
    "平常運転"
  when :nearly_on_schedule
    "ほぼ平常運転"
  when :delayed
    "遅れあり"
  when :suspended
    "運転見合わせ"
  when :other_status
    "お知らせ"
  end
end

Private Instance Methods

actually_delayed?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 187
def actually_delayed?
  @status_type == :delayed and object.on_schedule?
end
after_last_train_finishes?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 162
def after_last_train_finishes?
  no_train? and hour_after_last_train_finishes.include?( object.dc_date.hour )
end
before_first_train_begins?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 166
def before_first_train_begins?
  no_train? and hour_before_first_train_begins.include?( object.dc_date.hour )
end
delayed?() click to toggle source

@note {#status_type_on_initialize} での判定が正常に行われるようにするために,object.delayed? を追加している.

# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 179
def delayed?
  @status_type == :delayed or object.delayed? or @max_delay.delayed?
end
hour_after_last_train_finishes() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 218
def hour_after_last_train_finishes
  ( ( 20..23 ).to_a + ( 0...( ::TokyoMetro::DATE_CHANGING_HOUR ) ).to_a ).flatten
end
hour_before_first_train_begins() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 222
def hour_before_first_train_begins
  ( ( ::TokyoMetro::DATE_CHANGING_HOUR )..6 ).to_a
end
max_delay_decorator() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 226
def max_delay_decorator
  @max_delay.decorate( request )
end
nearly_on_schedule?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 174
def nearly_on_schedule?
  @status_type == :nearly_on_schedule or @max_delay.nearly_on_schedule?
end
no_train?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 158
def no_train?
  @no_train
end
on_schedule?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 170
def on_schedule?
  @status_type == :on_schedule or ( object.on_schedule? and @max_delay.on_schedule? )
end
set_max_delay( max_delay ) click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 214
def set_max_delay( max_delay )
  @max_delay = ::TokyoMetro::Api::TrainLocation::Info::Delay.new( max_delay )
end
status_type_on_initialize() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 191
def status_type_on_initialize
  if after_last_train_finishes?
    :after_last_train_finished
  elsif before_first_train_begins?
    :before_first_train_begin

  elsif on_schedule?
    :on_schedule
  elsif nearly_on_schedule?
    :nearly_on_schedule
  elsif delayed?
    :delayed
  elsif suspended?
    :suspended

  # elsif no_train?
    # :no_train

  else
    :other_status
  end
end
suspended?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 183
def suspended?
  @status_type == :suspended or object.suspended?
end
to_render_status_additional_infos_en?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 234
def to_render_status_additional_infos_en?
  [ additional_info_abstruct_en , additional_info_precise_en ].any?( &:present? ) or max_delay_decorator.displayed_in_train_operation_info?
end
to_render_status_additional_infos_ja?() click to toggle source
# File lib/tokyo_metro/factory/decorate/api/train_operation/info.rb, line 230
def to_render_status_additional_infos_ja?
  [ additional_info_abstruct_ja , additional_info_precise_ja ].any?( &:present? ) or max_delay_decorator.displayed_in_train_operation_info?
end