Class: Ratis::Point2Point

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

Defined Under Namespace

Classes: Group, RoutesOnlyResponse, Service, StandardResponse, Stop, Trip

Class Method Summary collapse

Class Method Details

.where(conditions) ⇒ Object

Raises:

  • (ArgumentError)


5
6
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
38
39
40
41
42
43
44
45
46
47
# File 'lib/ratis/point_2_point.rb', line 5

def self.where(conditions)
  routes_only      = conditions.delete(:routes_only) || 'N'
  routes           = conditions.delete(:routes) || []

  origin_lat       = conditions.delete(:origin_lat).to_f
  origin_long      = conditions.delete(:origin_long).to_f
  destination_lat  = conditions.delete(:destination_lat).to_f
  destination_long = conditions.delete(:destination_long).to_f

  date             = conditions.delete :date
  start_time       = conditions.delete(:start_time)
  end_time         = conditions.delete :end_time

  raise ArgumentError.new("You must specify routes only with true, false, 'y' or 'n'") unless routes_only.y_or_n rescue false

  raise ArgumentError.new('You must provide an origin latitude') unless Ratis.valid_latitude? origin_lat
  raise ArgumentError.new('You must provide an origin longitude') unless Ratis.valid_longitude? origin_long
  raise ArgumentError.new('You must provide an destination latitude') unless Ratis.valid_latitude? destination_lat
  raise ArgumentError.new('You must provide an destination longitude') unless Ratis.valid_longitude? destination_long

  raise ArgumentError.new('You must provide a date DD/MM/YYYY') unless DateTime.strptime(date, '%d/%m/%Y') rescue false
  raise ArgumentError.new('You must provide a start time as 24-hour HHMM') unless DateTime.strptime(start_time, '%H%M') rescue false
  raise ArgumentError.new('You must provide an end time as 24-hour HHMM') unless DateTime.strptime(end_time, '%H%M') rescue false

  Ratis.all_conditions_used? conditions

  response = Request.get 'Point2point', 'Routesonly'      => routes_only.y_or_n.upcase,
                                        'Originlat'       => origin_lat,
                                        'Originlong'      => origin_long,
                                        'Destinationlat'  => destination_lat,
                                        'Destinationlong' => destination_long,
                                        'Date'            => date,
                                        'Starttime'       => start_time,
                                        'Endtime'         => end_time,
                                        'Routes'          => routes.join(',')

  return nil unless response.success?

  return parse_routes_only_yes(response) if routes_only.y_or_n.downcase == 'y'
  return parse_routes_only_no(response)  if routes_only.y_or_n.downcase == 'n'

  nil
end