Class: CitiBikeDirections

Inherits:
Object
  • Object
show all
Includes:
DistanceMatrixHelper, GmapsBikingDirections, GmapsWalkingDirections, HelperMethods
Defined in:
lib/citi_bike_directions.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from GmapsWalkingDirections

#get_walking_directions_with_waypoints

Methods included from GmapsBikingDirections

#get_biking_directions

Methods included from DistanceMatrixHelper

#build_dmatrix_params, #build_dmatrix_url

Methods included from HelperMethods

#address_to_lat_lng

Constructor Details

#initialize(user_agent, availability_tolerance = 5) ⇒ CitiBikeDirections

Returns a new instance of CitiBikeDirections.



19
20
21
22
23
# File 'lib/citi_bike_directions.rb', line 19

def initialize(user_agent, availability_tolerance = 5)
  @client = Citibikenyc.client(user_agent: user_agent, debug: true)
  @stations = @client.stations.results
  @avail_tol = availability_tolerance
end

Instance Attribute Details

#avail_bike_stationsObject (readonly)

Returns the value of attribute avail_bike_stations.



17
18
19
# File 'lib/citi_bike_directions.rb', line 17

def avail_bike_stations
  @avail_bike_stations
end

#avail_dock_stationsObject (readonly)

Returns the value of attribute avail_dock_stations.



17
18
19
# File 'lib/citi_bike_directions.rb', line 17

def avail_dock_stations
  @avail_dock_stations
end

#clientObject (readonly)

Returns the value of attribute client.



17
18
19
# File 'lib/citi_bike_directions.rb', line 17

def client
  @client
end

#stationsObject (readonly)

Returns the value of attribute stations.



17
18
19
# File 'lib/citi_bike_directions.rb', line 17

def stations
  @stations
end

Instance Method Details

#find_avail_bike_stations(n = @avail_tol) ⇒ Object



29
30
31
# File 'lib/citi_bike_directions.rb', line 29

def find_avail_bike_stations(n = @avail_tol)
  stations.select { |station| station.availableBikes > n }
end

#find_avail_dock_stations(n = @avail_tol) ⇒ Object



33
34
35
# File 'lib/citi_bike_directions.rb', line 33

def find_avail_dock_stations(n = @avail_tol)
  stations.select{ |station| station.availableDocks > n }
end

#find_by_id(id) ⇒ Object



25
26
27
# File 'lib/citi_bike_directions.rb', line 25

def find_by_id(id)
  @stations.find { |station| station.id == id }
end

#find_nearest_avail_bike(address) ⇒ Object



37
38
39
40
# File 'lib/citi_bike_directions.rb', line 37

def find_nearest_avail_bike(address)
  coords = address_to_lat_lng(address)
  find_nearest_avail(coords, :bike)
end

#find_nearest_avail_dock(address) ⇒ Object



42
43
44
45
# File 'lib/citi_bike_directions.rb', line 42

def find_nearest_avail_dock(address)
  coords = address_to_lat_lng(address)
  find_nearest_avail(coords, :dock)
end

#find_total_directions(start_address, finish_address) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/citi_bike_directions.rb', line 47

def find_total_directions(start_address, finish_address)
  nearest_bike = find_nearest_avail_bike(start_address)
  nearest_dock = find_nearest_avail_dock(finish_address)

  walking_directions = get_walking_directions_with_waypoints(start_address, "#{nearest_bike['latitude']},#{nearest_bike['longitude']}", 
    "#{nearest_dock['latitude']},#{nearest_dock['longitude']}", finish_address)
  biking_directions = get_biking_directions("#{nearest_bike['latitude']},#{nearest_bike['longitude']}", 
    "#{nearest_dock['latitude']},#{nearest_dock['longitude']}")

  directions = [walking_directions[0]].concat(biking_directions) << (walking_directions[2])
  directions.to_json
end