Class: Enygma::GeoDistanceProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/enygma/geodistance_proxy.rb

Defined Under Namespace

Classes: InvalidUnits

Constant Summary collapse

UNIT_CONVERSION =
Hash.new(failproc).merge({
  :meters     => Proc.new { |d| d },
  :kilometers => Proc.new { |d| d / 1000.0 },
  :feet       => Proc.new { |d| d * 0.3048 },
  :miles      => Proc.new { |d| d / 1609.344 },
  :yards      => Proc.new { |d| d * 0.9144 }
})

Instance Method Summary collapse

Constructor Details

#initialize(delegate, distance) ⇒ GeoDistanceProxy

Returns a new instance of GeoDistanceProxy.



16
17
18
19
20
# File 'lib/enygma/geodistance_proxy.rb', line 16

def initialize(delegate, distance)
  @delegate = delegate
  @distance = distance
  @units = :meters
end

Instance Method Details

#feetObject



32
33
34
35
# File 'lib/enygma/geodistance_proxy.rb', line 32

def feet
  @units = :feet
  self
end

#kilometersObject



27
28
29
30
# File 'lib/enygma/geodistance_proxy.rb', line 27

def kilometers
  @units = :kilometers
  self
end

#metersObject



22
23
24
25
# File 'lib/enygma/geodistance_proxy.rb', line 22

def meters
  @units = :meters
  self
end

#milesObject



37
38
39
40
# File 'lib/enygma/geodistance_proxy.rb', line 37

def miles
  @units = :miles
  self
end

#of(point_or_lat, lng = nil) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/enygma/geodistance_proxy.rb', line 47

def of(point_or_lat, lng = nil)
  if lng.nil?
    if point_or_lat.respond_to?(:lat) && point_or_lat.respond_to?(:lng)
      lat, lng = point_or_lat.lat, point_or_lat.lng
    elsif point_or_lat.respond_to?(:coordinates) && point_or_lat.coordinates.respond_to?(:lat) && point_or_lat.coordinates.respond_to?(:lng)
      lat, lng = point_or_lat.coordinates.lat, point_or_lat.coordinates.lng
    elsif point_or_lat.respond_to?(:point) && point_or_lat.point.respond_to?(:lat) && point_or_lat.point.respond_to?(:lng)
      lat, lng = point_or_lat.point.lat, point_or_lat.point.lng
    else
      raise ArgumentError, "#{point_or_lat.inspect} doesn't seem to be a geometry-enabled object!"
    end
  else
    lat, lng = point_or_lat, lng
  end
  @delegate.__send__(:geo_anchor, lat, lng)
  @delegate.filter('@geodist', UNIT_CONVERSION[@units][@distance])
  @delegate
end

#yardsObject



42
43
44
45
# File 'lib/enygma/geodistance_proxy.rb', line 42

def yards
  @units = :yards
  self
end