Class: Velov::StationList
- Inherits:
-
Object
- Object
- Velov::StationList
- Defined in:
- lib/velov/station_list.rb
Overview
A Velo’v station list
Class Method Summary collapse
-
.fetch(params = {}) ⇒ Object
Fetch data of all stations.
- .from_json(json) ⇒ Object
Instance Method Summary collapse
- #add_station(params) ⇒ Object
- #available_bike_stands ⇒ Object
- #available_bikes ⇒ Object
- #bike_stands ⇒ Object
- #nearest(lat, lng) ⇒ Object
- #size ⇒ Object
- #to_a ⇒ Object
- #walking_distance(start, arrival) ⇒ Object
Class Method Details
.fetch(params = {}) ⇒ Object
Fetch data of all stations
9 10 11 12 13 |
# File 'lib/velov/station_list.rb', line 9 def self.fetch(params = {}) response = API.get(params) build_list(response.body) end |
.from_json(json) ⇒ Object
15 16 17 |
# File 'lib/velov/station_list.rb', line 15 def self.from_json(json) build_list(JSON.parse(json)) end |
Instance Method Details
#add_station(params) ⇒ Object
30 31 32 |
# File 'lib/velov/station_list.rb', line 30 def add_station(params) @list << Station.new(params) end |
#available_bike_stands ⇒ Object
52 53 54 |
# File 'lib/velov/station_list.rb', line 52 def available_bike_stands @list.map(&:available_bike_stands).inject(:+) end |
#available_bikes ⇒ Object
56 57 58 |
# File 'lib/velov/station_list.rb', line 56 def available_bikes @list.map(&:available_bikes).inject(:+) end |
#bike_stands ⇒ Object
48 49 50 |
# File 'lib/velov/station_list.rb', line 48 def bike_stands @list.map(&:bike_stands).inject(:+) end |
#nearest(lat, lng) ⇒ Object
42 43 44 45 46 |
# 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 ⇒ Object
34 35 36 |
# File 'lib/velov/station_list.rb', line 34 def size @list.size end |
#to_a ⇒ Object
38 39 40 |
# File 'lib/velov/station_list.rb', line 38 def to_a @list end |
#walking_distance(start, arrival) ⇒ Object
60 61 62 63 64 65 66 67 68 69 |
# 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 |