class Velov::StationList

A Velo'v station list

Public Class Methods

fetch(params = {}) click to toggle source

Fetch data of all stations

# File lib/velov/station_list.rb, line 9
def self.fetch(params = {})
  response = API.get(params)

  build_list(response.body)
end
from_json(json) click to toggle source
# File lib/velov/station_list.rb, line 15
def self.from_json(json)
  build_list(JSON.parse(json))
end

Private Class Methods

build_list(data) click to toggle source
# File lib/velov/station_list.rb, line 19
def self.build_list(data)
  station_list = StationList.new

  data['values'].each do |station_params|
    station_list.add_station(station_params)
  end

  station_list
end

Public Instance Methods

add_station(params) click to toggle source
# File lib/velov/station_list.rb, line 30
def add_station(params)
  @list << Station.new(params)
end
available_bike_stands() click to toggle source
# File lib/velov/station_list.rb, line 52
def available_bike_stands
  @list.map(&:available_bike_stands).inject(:+)
end
available_bikes() click to toggle source
# File lib/velov/station_list.rb, line 56
def available_bikes
  @list.map(&:available_bikes).inject(:+)
end
bike_stands() click to toggle source
# File lib/velov/station_list.rb, line 48
def bike_stands
  @list.map(&:bike_stands).inject(:+)
end
nearest(lat, lng) click to toggle source
# File lib/velov/station_list.rb, line 42
def nearest(lat, lng)
  @list.sort_by do |station|
    station.distance_to(lat, lng)
  end
end
size() click to toggle source
# File lib/velov/station_list.rb, line 34
def size
  @list.size
end
to_a() click to toggle source
# File lib/velov/station_list.rb, line 38
def to_a
  @list
end
walking_distance(start, arrival) click to toggle source
# File lib/velov/station_list.rb, line 60
def walking_distance(start, arrival)
  start_station = nearest(start.first, start.last).find do |station|
    station.status == 'OPEN' && station.available_bikes > 0
  end
  arrival_station = nearest(arrival.first, arrival.last).find do |station|
    station.status == 'OPEN' && station.available_bike_stands > 0
  end
  start_station.distance_to(start.first, start.last) +
    arrival_station.distance_to(arrival.first, arrival.last)
end