hopsoft/ellington

View on GitHub
lib/ellington/line_info.rb

Summary

Maintainability
A
20 mins
Test Coverage
require "delegate"

module Ellington
  class LineInfo < SimpleDelegator
    attr_reader :line, :station_info

    def initialize(line, station_info)
      @line = line
      @station_info = station_info
      super station_info
    end

    def station_full_name
      @station_full_name ||= "#{line.route.name} #{line.class.name} #{station.class.name}"
    end

    def station_completed_message
      message = []
      message << "[STATION COMPLETED]"
      message << "[#{station.state(passenger)}]"
      message << "[#{station_full_name}]"
      message.concat passenger_message
      message.join " "
    end

    def line_completed_message
      message = []
      message << "[LINE COMPLETED]"
      message << "[#{line.state(passenger)}]"
      message << "[#{line.name}]"
      message.concat passenger_message
      message.join " "
    end

    def passenger_message
      line.route.passenger_attrs_to_log.reduce([]) do |memo, attr|
        value = passenger.send(attr) rescue nil
        memo << "[#{attr}:#{value}]" unless value.nil?
        memo
      end
    end

  end
end