Class: Unicafe::Restaurant

Inherits:
Object
  • Object
show all
Defined in:
lib/unicafe/restaurant.rb

Defined Under Namespace

Classes: NotFound

Constant Summary collapse

LIST_OF_RESTAURANTS =
{
  1 => {name: "Metsätalo", latitude: 60.172577, longitude: 24.948878},
  2 => {name: "Olivia", latitude: 60.175077, longitude: 24.952979},
  3 => {name: "Porthania", latitude: 60.169878, longitude: 24.948669},
  4 => {name: "Päärakennus", latitude: 60.169178, longitude: 24.949297},
  5 => {name: "Rotunda", latitude: 60.170332, longitude: 24.950791},
  6 => {name: "Topelias", latitude: 60.171806, longitude: 24.95067},
  7 => {name: "Valtiotiede", latitude: 60.173897, longitude: 24.953095},
  8 => {name: "Ylioppilasaukio", latitude: 60.169092, longitude: 24.93992},
  10 => {name: "Chemicum", latitude: 60.205108, longitude: 24.963357},
  11 => {name: "Exactum", latitude: 60.20509, longitude: 24.961209},
  12 => {name: "Physicum", latitude: 60.204755, longitude: 24.963200},
  13 => {name: "Meilahti", latitude: 60.190212, longitude: 24.908911},
  14 => {name: "Ruskeasuo", latitude: 60.206341, longitude: 24.895871},
  15 => {name: "Soc & kom", latitude: 60.173054, longitude: 24.95049},
  16 => {name: "Kookos", latitude: 60.181034, longitude: 24.958652},
  18 => {name: "Biokeskus", latitude: 60.226922, longitude: 25.013707},
  19 => {name: "Korona", latitude: 60.226922, longitude: 25.013707},
  21 => {name: "Viikuna", latitude: 60.23049, longitude: 25.020544}
}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id) ⇒ Restaurant

Returns a new instance of Restaurant.



27
28
29
# File 'lib/unicafe/restaurant.rb', line 27

def initialize id
  @id = id
end

Class Method Details

.distances(latitude, longitude) ⇒ Object



70
71
72
73
74
75
76
77
# File 'lib/unicafe/restaurant.rb', line 70

def self.distances(latitude, longitude)
  distances = {}
  LIST_OF_RESTAURANTS.each do |key, hash|
    restaurant = self.find_by_id(key)
    distances[restaurant.distance(latitude, longitude)] = restaurant
  end
  distances
end

.find_by_id(id) ⇒ Object



53
54
55
# File 'lib/unicafe/restaurant.rb', line 53

def self.find_by_id id
  self.new id
end

.find_by_name(name) ⇒ Object



57
58
59
# File 'lib/unicafe/restaurant.rb', line 57

def self.find_by_name name
  self.find_by_id self.name_to_id(name)
end

.name_to_id(name) ⇒ Object



61
62
63
# File 'lib/unicafe/restaurant.rb', line 61

def self.name_to_id name
  LIST_OF_RESTAURANTS.select{|key, hash| hash[:name] == name}.map{|key, hash| key}.first || raise(NotFound)
end

.nearest(latitude, longitude) ⇒ Object



65
66
67
68
# File 'lib/unicafe/restaurant.rb', line 65

def self.nearest(latitude, longitude)
  distances_with_restaurants = self.distances(latitude, longitude)
  distances_with_restaurants[distances_with_restaurants.keys.min]
end

Instance Method Details

#distance(latitude, longitude) ⇒ Object



47
48
49
50
51
# File 'lib/unicafe/restaurant.rb', line 47

def distance(latitude, longitude)
  Geocoder::Calculations.distance_between([self.latitude, self.longitude],
                                          [latitude, longitude],
                                          :units => :km)
end

#latitudeObject



35
36
37
# File 'lib/unicafe/restaurant.rb', line 35

def latitude
  @latitude ||= LIST_OF_RESTAURANTS[@id][:latitude]
end

#longitudeObject



39
40
41
# File 'lib/unicafe/restaurant.rb', line 39

def longitude
  @longitude ||= LIST_OF_RESTAURANTS[@id][:longitude]
end

#lunchesObject



43
44
45
# File 'lib/unicafe/restaurant.rb', line 43

def lunches
  ::Unicafe::Lunch.lunches_for_restaurant(@id)
end

#nameObject



31
32
33
# File 'lib/unicafe/restaurant.rb', line 31

def name
  @name ||= LIST_OF_RESTAURANTS[@id][:name]
end