location-one 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +5 -3
- data/lib/location-one/core.rb +73 -19
- data/lib/location-one/version.rb +1 -1
- data/location-one.gemspec +1 -0
- metadata +18 -2
data/Gemfile.lock
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
location-one (0.0.
|
4
|
+
location-one (0.0.6)
|
5
5
|
geocoder (~> 1.1)
|
6
|
+
httpclient
|
6
7
|
json
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: http://rubygems.org/
|
10
11
|
specs:
|
11
|
-
geocoder (1.1.
|
12
|
-
|
12
|
+
geocoder (1.1.3)
|
13
|
+
httpclient (2.2.7)
|
14
|
+
json (1.7.5)
|
13
15
|
|
14
16
|
PLATFORMS
|
15
17
|
ruby
|
data/lib/location-one/core.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'geocoder'
|
2
2
|
require 'json'
|
3
|
-
require '
|
3
|
+
require 'httpclient'
|
4
4
|
|
5
5
|
module LocationOne
|
6
6
|
#SUPPORTED_BACKENDS =
|
@@ -14,47 +14,45 @@ module LocationOne
|
|
14
14
|
class Client
|
15
15
|
attr_accessor :http, :backend
|
16
16
|
|
17
|
-
def initialize(backend,opt_client=nil)
|
17
|
+
def initialize(backend, opt_client=nil)
|
18
18
|
@backend = backend
|
19
|
-
@http = opt_client
|
19
|
+
@http = opt_client
|
20
20
|
end
|
21
21
|
|
22
22
|
def change_location(options, opt_data={})
|
23
|
-
|
24
23
|
if (options[:latitude] and not options[:longitude]) or
|
25
24
|
(options[:longitude] and not options[:latitude])
|
26
25
|
raise "Both latitude and longitude must be specified if either is."
|
27
26
|
end
|
28
27
|
if (options[:latitude])
|
29
|
-
change_location_by_coords(options[:latitude], options[:longitude],opt_data)
|
28
|
+
change_location_by_coords(options[:latitude], options[:longitude], opt_data)
|
30
29
|
else
|
31
30
|
if not options[:place]
|
32
31
|
raise "Either :place or :latitude and :longitude must be specified."
|
33
32
|
end
|
34
|
-
change_location_by_place(options[:place],opt_data)
|
33
|
+
change_location_by_place(options[:place], opt_data)
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
|
-
def change_location_by_coords(lat, lon,opt_data={})
|
39
|
-
req = Net::HTTP::Post.new(backend[:path])
|
37
|
+
def change_location_by_coords(lat, lon, opt_data={})
|
40
38
|
|
41
39
|
body_data = {:action => :change_location,
|
42
40
|
:latitude => lat,
|
43
41
|
:longitude => lon}.merge(opt_data)
|
44
42
|
|
45
|
-
req.body = body_data.to_json
|
46
43
|
|
47
|
-
res = @http.request(req)
|
48
44
|
|
49
|
-
|
50
|
-
|
51
|
-
|
45
|
+
body = make_http_request(
|
46
|
+
:uri => URI.parse("http://#{@backend[:host]}:#{@backend[:port]}#{@backend[:path]}"),
|
47
|
+
:method => :post,
|
48
|
+
:body => body_data.to_json
|
49
|
+
)
|
52
50
|
|
51
|
+
|
52
|
+
unless body
|
53
|
+
raise "Set location change failed, for #{lat}, #{lon} (#{body})."
|
53
54
|
end
|
54
|
-
|
55
|
-
raise "Response error code #{res.code}, for #{lat}, #{lon} (#{res.body})."
|
56
|
-
end
|
57
|
-
res.body
|
55
|
+
body
|
58
56
|
end
|
59
57
|
|
60
58
|
def self.location_by_place(place)
|
@@ -63,9 +61,65 @@ module LocationOne
|
|
63
61
|
results.first
|
64
62
|
end
|
65
63
|
|
66
|
-
def change_location_by_place(place,opt_data={})
|
64
|
+
def change_location_by_place(place, opt_data={})
|
67
65
|
best_result = Client.location_by_place(place)
|
68
|
-
change_location_by_coords(best_result.latitude, best_result.longitude,opt_data)
|
66
|
+
change_location_by_coords(best_result.latitude, best_result.longitude, opt_data)
|
67
|
+
end
|
68
|
+
|
69
|
+
def make_http_request(options)
|
70
|
+
body = nil
|
71
|
+
3.times do |count|
|
72
|
+
begin
|
73
|
+
if not @http
|
74
|
+
@http = init_request(options)
|
75
|
+
end
|
76
|
+
if options[:method] == :post
|
77
|
+
body = @http.post(options[:uri], options[:body]).body
|
78
|
+
else
|
79
|
+
body = @http.get(options[:uri], options[:body]).body
|
80
|
+
end
|
81
|
+
break
|
82
|
+
rescue HTTPClient::TimeoutError => e
|
83
|
+
if count < 2
|
84
|
+
sleep(0.5)
|
85
|
+
@http.reset_all
|
86
|
+
@http=nil
|
87
|
+
STDOUT.write "Retrying.. #{e.class}: (#{e})\n"
|
88
|
+
STDOUT.flush
|
89
|
+
|
90
|
+
else
|
91
|
+
puts "Failing... #{e.class}"
|
92
|
+
raise e
|
93
|
+
end
|
94
|
+
rescue Exception => e
|
95
|
+
case e
|
96
|
+
when Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ETIMEDOUT
|
97
|
+
if count < 2
|
98
|
+
sleep(0.5)
|
99
|
+
@http.reset_all
|
100
|
+
@http=nil
|
101
|
+
STDOUT.write "Retrying.. #{e.class}: (#{e})\n"
|
102
|
+
STDOUT.flush
|
103
|
+
|
104
|
+
else
|
105
|
+
puts "Failing... #{e.class}"
|
106
|
+
raise e
|
107
|
+
end
|
108
|
+
else
|
109
|
+
raise e
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
body
|
115
|
+
end
|
116
|
+
|
117
|
+
def init_request(url)
|
118
|
+
http = HTTPClient.new
|
119
|
+
http.connect_timeout = 15
|
120
|
+
http.send_timeout = 15
|
121
|
+
http.receive_timeout = 15
|
122
|
+
http
|
69
123
|
end
|
70
124
|
|
71
125
|
end
|
data/lib/location-one/version.rb
CHANGED
data/location-one.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: location-one
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: geocoder
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: httpclient
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
46
62
|
description: Location Simulation Client for Calabash and Frank backends.
|
47
63
|
email:
|
48
64
|
- karl@lesspainful.com
|