class MassInvite::Location
Location
class
Constants
- EARTH_RADIUS_IN_KM
- LAT_LONG_REGEX
- RAD_PER_DEG
Attributes
lat[R]
long[R]
Public Class Methods
new(lat, long)
click to toggle source
# File lib/mass_invite/location.rb, line 27 def initialize(lat, long) self.lat = lat self.long = long end
Public Instance Methods
distance_from(location)
click to toggle source
# File lib/mass_invite/location.rb, line 32 def distance_from(location) distance(location) end
lat=(value)
click to toggle source
# File lib/mass_invite/location.rb, line 44 def lat=(value) @lat = validate_lat(value) end
lat_in_rad()
click to toggle source
# File lib/mass_invite/location.rb, line 36 def lat_in_rad @lat * RAD_PER_DEG end
long=(value)
click to toggle source
# File lib/mass_invite/location.rb, line 48 def long=(value) @long = validate_long(value) end
long_in_rad()
click to toggle source
# File lib/mass_invite/location.rb, line 40 def long_in_rad @long * RAD_PER_DEG end
Private Instance Methods
distance(loc)
click to toggle source
# File lib/mass_invite/location.rb, line 54 def distance(loc) # Delta, converted to rad dlat_rad = (loc.lat - @lat).abs * RAD_PER_DEG dlon_rad = (loc.long - @long).abs * RAD_PER_DEG a = Math.sin(dlat_rad / 2)**2 + Math.cos(lat_in_rad) * Math.cos(loc.lat_in_rad) * Math.sin(dlon_rad / 2)**2 d = 2 * Math.asin(Math.sqrt(a)) # Delta in km EARTH_RADIUS_IN_KM * d end
validate_lat(value)
click to toggle source
# File lib/mass_invite/location.rb, line 68 def validate_lat(value) lat = case value when String unless value =~ LAT_LONG_REGEX raise ArgumentError, 'Latitude is not valid.' end value.to_f when Float value else raise ArgumentError, 'Latitude should be a float/string value.' end raise ArgumentError, 'Latitude is not valid.' if lat > 90.0 || lat < -90.0 lat end
validate_long(value)
click to toggle source
# File lib/mass_invite/location.rb, line 87 def validate_long(value) long = case value when String unless value =~ LAT_LONG_REGEX raise ArgumentError, 'Longitude is not valid.' end value.to_f when Float value else raise ArgumentError, 'Longitude should be a float/string value.' end if long > 180.0 || long < -180.0 raise ArgumentError, 'Longitude is not valid.' end long end