Class: Ratis::NextBus

Inherits:
Object
  • Object
show all
Defined in:
lib/ratis/next_bus.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(response) ⇒ NextBus

Returns a new instance of NextBus.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/ratis/next_bus.rb', line 7

def initialize(response)
  @success = response.success?

  if @success
    @stop     = response.body[:nextbus_response][:atstop]

    _services = @stop.delete(:service)

    unless _services.is_a?(Array)
      _services = [_services]
    end

    @services = _services.map do |service|
      OpenStruct.new(:status      => service[:status],
                     :sign        => service[:sign],
                     :routetype   => service[:routetype],
                     :times       => service[:times],
                     :direction   => service[:direction],
                     :servicetype => service[:servicetype],
                     :route       => service[:route],
                     :operator    => service[:operator],
                     :trips       => parse_trip_info(service[:tripinfo])
                     )
    end

  else
    @stop = {}
    @services = []
  end

end

Instance Attribute Details

#servicesObject

Returns the value of attribute services.



5
6
7
# File 'lib/ratis/next_bus.rb', line 5

def services
  @services
end

#stopObject

Returns the value of attribute stop.



5
6
7
# File 'lib/ratis/next_bus.rb', line 5

def stop
  @stop
end

#successObject

Returns the value of attribute success.



5
6
7
# File 'lib/ratis/next_bus.rb', line 5

def success
  @success
end

Class Method Details

.where(conditions) ⇒ Object

Raises:

  • (ArgumentError)


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/ratis/next_bus.rb', line 70

def self.where(conditions)
  stop_id = conditions.delete(:stop_id)
  app_id  = conditions.delete(:app_id) || 'ratis-gem'
  type    = conditions.delete(:type) || 'N' # N for Next Bus

  if datetime = conditions.delete(:datetime)
    raise ArgumentError.new('If datetime supplied it should be a Time or DateTime instance, otherwise it defaults to Time.now') unless datetime.is_a?(DateTime) || datetime.is_a?(Time)
  else
    datetime = Time.now
  end

  raise ArgumentError.new('You must provide a stop ID') unless stop_id

  Ratis.all_conditions_used?(conditions)

  response = Request.get 'Nextbus', {'Stopid' => stop_id,
                                     'Appid' => app_id,
                                     'Date' => datetime.strftime("%m/%d/%Y"),
                                     'Time' => datetime.strftime("%H%M"),
                                     'Type' => type }

  NextBus.new(response)
end

Instance Method Details

#create_trip(trip) ⇒ Object

TODO: turn into real classes



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/ratis/next_bus.rb', line 51

def create_trip(trip)
  OpenStruct.new(:triptime   => trip[:triptime],
                 :block      => trip[:block],
                 :tripid     => trip[:tripid],
                 :exception  => trip[:exception],
                 :skedtripid => trip[:skedtripid],
                 :realtime   => OpenStruct.new(:valid            => trip[:realtime][:valid],
                                               :adherence        => trip[:realtime][:adherence],
                                               :estimatedtime    => trip[:realtime][:estimatedtime],
                                               :estimatedminutes => trip[:realtime][:estimatedminutes],
                                               :polltime         => trip[:realtime][:polltime],
                                               :trend            => trip[:realtime][:trend],
                                               :speed            => trip[:realtime][:speed],
                                               :reliable         => trip[:realtime][:reliable],
                                               :stopped          => trip[:realtime][:stopped],
                                               :lat              => trip[:realtime][:lat],
                                               :long             => trip[:realtime][:long] ))
end

#parse_trip_info(trips) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/ratis/next_bus.rb', line 39

def parse_trip_info(trips)
  # can come back as an Array or single Hash...
  if trips.is_a?(Array)
    trips.map do |ti|
      create_trip(ti)
    end
  else # Hash
    [create_trip(trips)]
  end
end

#success?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/ratis/next_bus.rb', line 94

def success?
  @success
end

#to_hash_for_xmlObject

Used to create an XML response for the NextBus SMS services which hits /nextride.xml?stop_id=<STOPID>



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/ratis/next_bus.rb', line 101

def to_hash_for_xml
  { :stopname => @stop[:description],
    :runs     => @services.map do |service|
                   service.trips.map do |trip|

                     { :time      => trip.realtime.estimatedtime,
                       :sign      => service.sign,
                       :adherence => trip.realtime.adherence,
                       :route     => service.route
                     }
                   end
                 end.flatten

  }
end