class NycSubwayStatus::Train

Constants

TRAINS

Attributes

name[RW]
status[RW]
url[RW]

Public Class Methods

all() click to toggle source
# File lib/nyc_subway_status/train.rb, line 26
def self.all
        @@all
end
scrape_trains() click to toggle source
# File lib/nyc_subway_status/train.rb, line 8
def self.scrape_trains
        browser = Watir::Browser.new :chrome, headless: true
        browser.goto "http://alert.mta.info/"
        sleep(3)

        doc = Nokogiri::HTML.parse(browser.html)

        TRAINS.each_with_index { |line, index|
                train = self.new
                train.name = doc.css("#subwayDiv div img")[index].attribute("alt").text
                train.status = doc.css("##{line}").text
                train.url = doc.css("##{line} a").attribute("href").value if doc.css("##{line} a").empty? != true
                @@all << train
        }

        browser.close
end

Public Instance Methods

message_formatter(text) click to toggle source
# File lib/nyc_subway_status/train.rb, line 83
def message_formatter(text)
        m1 = text.gsub(/^\s/, "")
        m2 = m1.gsub(/[^,.\&\a-zA-Z0-9]/, " ")
        m2.gsub(/\s{2,}/, " ")
end
mta_parser(collection) click to toggle source
# File lib/nyc_subway_status/train.rb, line 57
def mta_parser(collection)
        message = ""

        collection.children.each { |child|
                if child.is_a? Nokogiri::XML::Text
                        message += child.text
                elsif child.name == "img"
                        message += " #{train_name_trimmer(child.attribute("alt").text)} "
                elsif child.name == "strong" || child.name == "b"
                        message += " #{child.text} "
                elsif child.name == "i"
                        message += "\n\n#{child.text}"
                elsif child.name == "br"
                        message += "\n"
                elsif child.name == "p"
                        puts mta_parser(child).strip
                end
        }

        message_formatter(message)
end
scrape_details() click to toggle source
# File lib/nyc_subway_status/train.rb, line 30
def scrape_details
        browser = Watir::Browser.new :chrome, headless: true
        browser.goto "http://alert.mta.info/#{self.url}"
        sleep(3)

        doc = Nokogiri::HTML.parse(browser.html)
        planned_work = doc.css("#status_display .plannedWorkDetailLink")
        delay = doc.css("#status_display .TitleDelay")
        change = doc.css("#status_display .TitleServiceChange")

        if change.empty? != true
                puts "SERVICE CHANGE"
                puts "#{mta_parser(doc.css("#status_display"))}\n"
        end

        if planned_work.empty? != true
                puts mta_parser(doc.css("#status_display .plannedWorkDetailLink b"))
        end

        if delay.empty? != true
                puts "DELAYS"
                puts mta_parser(doc.css("#status_display"))
        end

        browser.close
end
train_name_trimmer(text) click to toggle source
# File lib/nyc_subway_status/train.rb, line 79
def train_name_trimmer(text)
        text[0]
end