twofishes 1.0.1 → 2.0.0.pre.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/thrift/geocoder.rb +344 -0
- data/lib/thrift/geocoder_types.rb +757 -0
- data/lib/twofishes.rb +9 -5
- data/lib/twofishes/client.rb +26 -26
- data/lib/twofishes/configuration.rb +7 -5
- data/lib/twofishes/errors.rb +0 -2
- data/lib/twofishes/result.rb +24 -48
- data/lib/twofishes/underscored.rb +17 -0
- data/lib/twofishes/version.rb +1 -1
- metadata +24 -19
data/lib/twofishes.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require 'twofishes/version'
|
2
|
+
require 'twofishes/configuration'
|
3
|
+
require 'thrift_client'
|
4
|
+
require 'thrift/geocoder_types'
|
5
|
+
require 'thrift/geocoder'
|
6
|
+
require 'twofishes/errors'
|
7
|
+
require 'twofishes/result'
|
8
|
+
require 'twofishes/underscored'
|
9
|
+
require 'twofishes/client'
|
data/lib/twofishes/client.rb
CHANGED
@@ -1,53 +1,53 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
|
3
1
|
module Twofishes
|
4
2
|
class Client
|
5
3
|
# @see https://github.com/foursquare/twofishes/blob/master/docs/twofishes_requests.md
|
6
4
|
|
7
|
-
include HTTParty
|
8
|
-
# debug_output $stderr # httparty debugging
|
9
|
-
|
10
5
|
# Geocodes a given string.
|
11
6
|
#
|
12
|
-
# @param [String]
|
7
|
+
# @param [String] location
|
8
|
+
# @param [Array] list of additional ResponseIncludes constants
|
13
9
|
# @return [Twofishes::Result]
|
14
10
|
#
|
15
11
|
# @example
|
16
|
-
#
|
12
|
+
# Twofishes::Client.geocode('Zurich, Switzerland')
|
17
13
|
#
|
18
|
-
def self.geocode(location)
|
19
|
-
|
14
|
+
def self.geocode(location, includes: [])
|
15
|
+
handle_response do
|
16
|
+
request = GeocodeRequest.new(query: location, responseIncludes: includes)
|
17
|
+
thrift_client.geocode(request)
|
18
|
+
end
|
20
19
|
end
|
21
20
|
|
22
21
|
# Reverse geocodes lat/lng.
|
23
22
|
#
|
24
|
-
# @param [
|
25
|
-
# @param [Float] lng
|
23
|
+
# @param [Array] latitude, longitude pair
|
26
24
|
# @return [Twofishes::Result]
|
27
|
-
#
|
28
25
|
# @example
|
29
|
-
#
|
26
|
+
# Twofishes::Client.reverse_geocode([47.3787733, 8.5273363])
|
30
27
|
#
|
31
|
-
def self.reverse_geocode(coordinates)
|
32
|
-
call_api(ll: coordinates.join(','))
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.call_api(params)
|
28
|
+
def self.reverse_geocode(coordinates, includes: [])
|
36
29
|
handle_response do
|
37
|
-
|
30
|
+
point = GeocodePoint.new(lat: coordinates[0], lng: coordinates[1])
|
31
|
+
request = GeocodeRequest.new(ll: point, responseIncludes: includes)
|
32
|
+
thrift_client.reverseGeocode(request)
|
38
33
|
end
|
39
34
|
end
|
40
35
|
|
36
|
+
def self.thrift_client
|
37
|
+
@thrift_client ||= ThriftClient.new(
|
38
|
+
Geocoder::Client,
|
39
|
+
Twofishes.configuration.address,
|
40
|
+
retries: Twofishes.configuration.retries,
|
41
|
+
timeout: Twofishes.configuration.timeout
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
41
45
|
private
|
42
46
|
|
43
47
|
def self.handle_response
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
else
|
48
|
-
raise Twofishes::InvalidResponseError, response.to_s.lines.first
|
49
|
-
end
|
48
|
+
Result.from_response(yield)
|
49
|
+
rescue => e
|
50
|
+
raise Twofishes::InvalidResponseError, e.message
|
50
51
|
end
|
51
|
-
|
52
52
|
end
|
53
53
|
end
|
@@ -1,16 +1,19 @@
|
|
1
1
|
module Twofishes
|
2
|
-
|
3
2
|
class Configuration
|
4
|
-
|
5
3
|
# @see https://github.com/thoughtbot/clearance/blob/master/lib/clearance/configuration.rb
|
6
4
|
|
7
|
-
attr_accessor :
|
5
|
+
attr_accessor :host, :port, :timeout, :retries
|
8
6
|
|
9
7
|
def initialize
|
10
|
-
@
|
8
|
+
@host = '127.0.0.1'
|
9
|
+
@port = 8080
|
11
10
|
@timeout = 3
|
11
|
+
@retries = 2
|
12
12
|
end
|
13
13
|
|
14
|
+
def address
|
15
|
+
"#{host}:#{port}"
|
16
|
+
end
|
14
17
|
end
|
15
18
|
|
16
19
|
def self.configuration
|
@@ -24,5 +27,4 @@ module Twofishes
|
|
24
27
|
def self.reset_configuration
|
25
28
|
@configuration = nil
|
26
29
|
end
|
27
|
-
|
28
30
|
end
|
data/lib/twofishes/errors.rb
CHANGED
data/lib/twofishes/result.rb
CHANGED
@@ -1,56 +1,32 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'delegate'
|
3
2
|
module Twofishes
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.from_response(hash)
|
12
|
-
if hash['interpretations']
|
13
|
-
hash['interpretations'].map { |interpretation| self.new(interpretation) }
|
14
|
-
else
|
15
|
-
[]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def name
|
20
|
-
feature.name
|
21
|
-
end
|
22
|
-
|
23
|
-
def display_name
|
24
|
-
feature.display_name
|
25
|
-
end
|
26
|
-
|
27
|
-
def country_code
|
28
|
-
feature.cc
|
29
|
-
end
|
30
|
-
|
31
|
-
def lat
|
32
|
-
feature.geometry.center.lat
|
33
|
-
end
|
34
|
-
|
35
|
-
def lng
|
36
|
-
feature.geometry.center.lng
|
3
|
+
class Result < SimpleDelegator
|
4
|
+
def self.from_response(response)
|
5
|
+
response.interpretations.map { |interpretation|
|
6
|
+
new(interpretation)
|
7
|
+
}
|
37
8
|
end
|
9
|
+
end
|
10
|
+
end
|
38
11
|
|
39
|
-
|
40
|
-
|
41
|
-
|
12
|
+
require 'forwardable'
|
13
|
+
class GeocodeInterpretation
|
14
|
+
extend Forwardable
|
15
|
+
def_delegators :feature, *GeocodeFeature::FIELDS.map { |_, v| v[:name] }
|
42
16
|
|
43
|
-
|
44
|
-
|
45
|
-
|
17
|
+
def country_code
|
18
|
+
cc
|
19
|
+
end
|
46
20
|
|
47
|
-
|
48
|
-
|
49
|
-
|
21
|
+
def lat
|
22
|
+
geometry.center.lat
|
23
|
+
end
|
50
24
|
|
51
|
-
|
52
|
-
|
53
|
-
|
25
|
+
def lng
|
26
|
+
geometry.center.lng
|
27
|
+
end
|
54
28
|
|
29
|
+
def coordinates
|
30
|
+
[lat, lng]
|
55
31
|
end
|
56
|
-
end
|
32
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
2
|
+
|
3
|
+
module Underscored
|
4
|
+
def self.included(base)
|
5
|
+
base::FIELDS.map { |_, v|
|
6
|
+
define_method(v[:name].underscore) { send(v[:name]) }
|
7
|
+
}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class GeocodeInterpretation
|
12
|
+
include Underscored
|
13
|
+
end
|
14
|
+
|
15
|
+
class GeocodeFeature
|
16
|
+
include Underscored
|
17
|
+
end
|
data/lib/twofishes/version.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twofishes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre.rc.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Felder
|
8
|
+
- Miha Rekar
|
9
|
+
- Bartek Bułat
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date:
|
13
|
+
date: 2015-02-19 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
16
|
+
name: activesupport
|
15
17
|
requirement: !ruby/object:Gem::Requirement
|
16
18
|
requirements:
|
17
19
|
- - '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0
|
21
|
+
version: '0'
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
23
25
|
requirements:
|
24
26
|
- - '>='
|
25
27
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0
|
28
|
+
version: '0'
|
27
29
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
30
|
+
name: thrift_client
|
29
31
|
requirement: !ruby/object:Gem::Requirement
|
30
32
|
requirements:
|
31
33
|
- - '>='
|
32
34
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0
|
35
|
+
version: '0'
|
34
36
|
type: :runtime
|
35
37
|
prerelease: false
|
36
38
|
version_requirements: !ruby/object:Gem::Requirement
|
37
39
|
requirements:
|
38
40
|
- - '>='
|
39
41
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0
|
42
|
+
version: '0'
|
41
43
|
- !ruby/object:Gem::Dependency
|
42
44
|
name: bundler
|
43
45
|
requirement: !ruby/object:Gem::Requirement
|
44
46
|
requirements:
|
45
|
-
- -
|
47
|
+
- - '>='
|
46
48
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
49
|
+
version: '0'
|
48
50
|
type: :development
|
49
51
|
prerelease: false
|
50
52
|
version_requirements: !ruby/object:Gem::Requirement
|
51
53
|
requirements:
|
52
|
-
- -
|
54
|
+
- - '>='
|
53
55
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
56
|
+
version: '0'
|
55
57
|
- !ruby/object:Gem::Dependency
|
56
58
|
name: rake
|
57
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +83,7 @@ dependencies:
|
|
81
83
|
- !ruby/object:Gem::Version
|
82
84
|
version: '0'
|
83
85
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
86
|
+
name: mocha
|
85
87
|
requirement: !ruby/object:Gem::Requirement
|
86
88
|
requirements:
|
87
89
|
- - '>='
|
@@ -95,7 +97,7 @@ dependencies:
|
|
95
97
|
- !ruby/object:Gem::Version
|
96
98
|
version: '0'
|
97
99
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
100
|
+
name: yard
|
99
101
|
requirement: !ruby/object:Gem::Requirement
|
100
102
|
requirements:
|
101
103
|
- - '>='
|
@@ -109,7 +111,7 @@ dependencies:
|
|
109
111
|
- !ruby/object:Gem::Version
|
110
112
|
version: '0'
|
111
113
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
114
|
+
name: codeclimate-test-reporter
|
113
115
|
requirement: !ruby/object:Gem::Requirement
|
114
116
|
requirements:
|
115
117
|
- - '>='
|
@@ -123,7 +125,7 @@ dependencies:
|
|
123
125
|
- !ruby/object:Gem::Version
|
124
126
|
version: '0'
|
125
127
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
128
|
+
name: pry
|
127
129
|
requirement: !ruby/object:Gem::Requirement
|
128
130
|
requirements:
|
129
131
|
- - '>='
|
@@ -143,11 +145,14 @@ executables: []
|
|
143
145
|
extensions: []
|
144
146
|
extra_rdoc_files: []
|
145
147
|
files:
|
148
|
+
- lib/thrift/geocoder.rb
|
149
|
+
- lib/thrift/geocoder_types.rb
|
146
150
|
- lib/twofishes.rb
|
147
151
|
- lib/twofishes/client.rb
|
148
152
|
- lib/twofishes/configuration.rb
|
149
153
|
- lib/twofishes/errors.rb
|
150
154
|
- lib/twofishes/result.rb
|
155
|
+
- lib/twofishes/underscored.rb
|
151
156
|
- lib/twofishes/version.rb
|
152
157
|
homepage: https://github.com/masone/twofishes-ruby
|
153
158
|
licenses:
|
@@ -164,12 +169,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
169
|
version: '2.0'
|
165
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
171
|
requirements:
|
167
|
-
- - '
|
172
|
+
- - '>'
|
168
173
|
- !ruby/object:Gem::Version
|
169
|
-
version:
|
174
|
+
version: 1.3.1
|
170
175
|
requirements: []
|
171
176
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.4.
|
177
|
+
rubygems_version: 2.4.5
|
173
178
|
signing_key:
|
174
179
|
specification_version: 4
|
175
180
|
summary: Client for foursquare's Twofishes API, a sparse reverse geocoder.
|