Class: Velov::StationList

Inherits:
Object
  • Object
show all
Defined in:
lib/velov/station_list.rb

Overview

A Velo’v station list

Class Method Summary collapse

Instance Method Summary collapse

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_standsObject



52
53
54
# File 'lib/velov/station_list.rb', line 52

def available_bike_stands
  @list.map(&:available_bike_stands).inject(:+)
end

#available_bikesObject



56
57
58
# File 'lib/velov/station_list.rb', line 56

def available_bikes
  @list.map(&:available_bikes).inject(:+)
end

#bike_standsObject



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

#sizeObject



34
35
36
# File 'lib/velov/station_list.rb', line 34

def size
  @list.size
end

#to_aObject



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