-
Notifications
You must be signed in to change notification settings - Fork 53
/
precision.rb
49 lines (42 loc) · 1.11 KB
/
precision.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# encoding: UTF-8
module Graticule
# Used to compare the precision of different geocoded locations
class Precision
include Comparable
attr_reader :name
NAMES = [
:point,
:unknown,
:country,
:region,
:locality,
:postal_code,
:street,
:address,
:premise
]
def initialize(name)
@name = name.to_sym
raise ArgumentError, "#{name} is not a valid precision. Use one of #{NAMES.inspect}" unless NAMES.include?(@name)
end
Unknown = Precision.new(:unknown)
Point = Precision.new(:point)
Country = Precision.new(:country)
Region = Precision.new(:region)
Locality = Precision.new(:locality)
PostalCode = Precision.new(:postal_code)
Street = Precision.new(:street)
Address = Precision.new(:address)
Premise = Precision.new(:premise)
def to_s
@name.to_s
end
def <=>(other)
other = Precision.new(other) unless other.is_a?(Precision)
NAMES.index(self.name) <=> NAMES.index(other.name)
end
def ==(other)
(self <=> other) == 0
end
end
end