google-geocoder 0.0.3 → 0.1.0

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/CHANGES CHANGED
@@ -12,3 +12,7 @@
12
12
  == Version 0.0.3
13
13
 
14
14
  * Small bug fixes.
15
+
16
+ == Version 0.1.0
17
+
18
+ * Added launch location in the browser.
data/Rakefile CHANGED
@@ -9,34 +9,39 @@ require 'rcov/rcovtask'
9
9
 
10
10
  task :default => :gemspec
11
11
 
12
- begin
13
- require 'bundler'
14
-
15
12
  begin
16
- require 'jeweler'
17
-
18
- Jeweler::Tasks.new do |gemspec|
19
- gemspec.name = "google-geocoder"
20
- gemspec.summary = "Simple client for Google Geocode API (Summary)."
21
- gemspec.description = "Simple client for Google Geocode API."
22
- gemspec.email = "alexander.shvets@gmail.com"
23
- gemspec.homepage = "http://github.com/shvets/google-geocoder"
24
- gemspec.authors = ["Alexander Shvets"]
25
- gemspec.files = FileList["CHANGES", "google-geocoder.gemspec", "Rakefile", "README", "VERSION",
26
- "lib/**/*", "bin/**/*"]
27
- gemspec.add_dependency "json_pure", ">= 1.1.4"
28
-
29
- gemspec.executables = ['geo', 'g']
30
- gemspec.requirements = ["none"]
31
- gemspec.bindir = "bin"
32
-
33
- gemspec.add_bundler_dependencies
13
+ require 'bundler'
14
+
15
+ begin
16
+ require 'jeweler'
17
+
18
+ Jeweler::Tasks.new do |gemspec|
19
+ gemspec.name = "google-geocoder"
20
+ gemspec.summary = "Simple client for Google Geocode API (Summary)."
21
+ gemspec.description = "Simple client for Google Geocode API."
22
+ gemspec.email = "alexander.shvets@gmail.com"
23
+ gemspec.homepage = "http://github.com/shvets/google-geocoder"
24
+ gemspec.authors = ["Alexander Shvets"]
25
+ gemspec.files = FileList["CHANGES", "google-geocoder.gemspec", "Rakefile", "README", "VERSION",
26
+ "lib/**/*", "bin/**/*"]
27
+
28
+ gemspec.executables = ['geo', 'g']
29
+ gemspec.requirements = ["none"]
30
+ gemspec.bindir = "bin"
31
+
32
+ gemspec.add_bundler_dependencies
33
+ end
34
+ rescue LoadError
35
+ puts "Jeweler not available. Install it s with: [sudo] gem install jeweler"
34
36
  end
35
37
  rescue LoadError
36
- puts "Jeweler not available. Install it s with: [sudo] gem install jeweler"
38
+ puts "Bundler not available. Install it s with: [sudo] gem install bundler"
37
39
  end
38
- rescue LoadError
39
- puts "Bundler not available. Install it s with: [sudo] gem install bundler"
40
+
41
+ desc "Remove temp files"
42
+ task "clean" do
43
+ `rm pkg`
44
+ `rm google-geocoder.gemspec`
40
45
  end
41
46
 
42
47
  desc "Release the gem"
@@ -50,14 +55,14 @@ task :"release:gem" do
50
55
  puts "Commit message:"
51
56
  message = STDIN.gets
52
57
 
53
- version = "#{File.open(File::dirname(__FILE__) + "/VERSION").readlines().first}"
58
+ version = "#{File.open(File::dirname(__FILE__) + "/VERSION").readlines().first.strip}"
54
59
 
55
60
  %x(
56
61
  git commit -m "#{message}"
57
62
 
58
63
  git push origin master
59
64
 
60
- gem push pkg/google-geocoder-#{version}.gem
65
+ gem push pkg/google-geocoder-#{version}.gem
61
66
  )
62
67
  end
63
68
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.1.0
data/bin/geo CHANGED
@@ -3,7 +3,7 @@
3
3
  $:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
4
4
 
5
5
  require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
6
- require 'google_geocoder'
6
+ require 'google_geocoder/google_geocoder'
7
7
 
8
8
  #$KCODE='u'
9
9
 
@@ -23,15 +23,17 @@ class Geo
23
23
  puts USAGE and return
24
24
  end
25
25
 
26
- query = ARGV.join(' ')
26
+ cmd_line = ARGV.join(' ')
27
27
 
28
- case query
29
-
28
+ case cmd_line
30
29
  when /(-v)|(--version)/ then
31
30
  puts "Version: #{File.open(File::dirname(__FILE__) + "/../VERSION").readlines().first}"
31
+ when /(-open)/ then
32
+ query = cmd_line[5..-1].strip
33
+ @geocoder.open_in_browser(query)
32
34
  when /(.*)/ then
33
35
  begin
34
- result = @geocoder.query(query)
36
+ result = @geocoder.query(cmd_line)
35
37
 
36
38
  puts "No results." if result.size == 0
37
39
  rescue Exception => e
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{google-geocoder}
8
- s.version = "0.0.3"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Alexander Shvets"]
12
- s.date = %q{2010-09-29}
12
+ s.date = %q{2010-10-01}
13
13
  s.description = %q{Simple client for Google Geocode API.}
14
14
  s.email = %q{alexander.shvets@gmail.com}
15
15
  s.executables = ["geo", "g"]
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  "bin/geo",
27
27
  "bin/geo.bat",
28
28
  "google-geocoder.gemspec",
29
- "lib/google_geocoder.rb"
29
+ "lib/google_geocoder/google_geocoder.rb"
30
30
  ]
31
31
  s.homepage = %q{http://github.com/shvets/google-geocoder}
32
32
  s.rdoc_options = ["--charset=UTF-8"]
@@ -44,19 +44,19 @@ Gem::Specification.new do |s|
44
44
  s.specification_version = 3
45
45
 
46
46
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
- s.add_runtime_dependency(%q<json_pure>, [">= 1.1.4"])
48
- s.add_runtime_dependency(%q<json_pure>, [">= 0"])
47
+ s.add_runtime_dependency(%q<json_pure>, ["~> 1.1.4"])
48
+ s.add_runtime_dependency(%q<launchy>, [">= 0"])
49
49
  s.add_development_dependency(%q<jeweler>, [">= 0"])
50
50
  s.add_development_dependency(%q<gemcutter>, [">= 0"])
51
51
  else
52
- s.add_dependency(%q<json_pure>, [">= 1.1.4"])
53
- s.add_dependency(%q<json_pure>, [">= 0"])
52
+ s.add_dependency(%q<json_pure>, ["~> 1.1.4"])
53
+ s.add_dependency(%q<launchy>, [">= 0"])
54
54
  s.add_dependency(%q<jeweler>, [">= 0"])
55
55
  s.add_dependency(%q<gemcutter>, [">= 0"])
56
56
  end
57
57
  else
58
- s.add_dependency(%q<json_pure>, [">= 1.1.4"])
59
- s.add_dependency(%q<json_pure>, [">= 0"])
58
+ s.add_dependency(%q<json_pure>, ["~> 1.1.4"])
59
+ s.add_dependency(%q<launchy>, [">= 0"])
60
60
  s.add_dependency(%q<jeweler>, [">= 0"])
61
61
  s.add_dependency(%q<gemcutter>, [">= 0"])
62
62
  end
@@ -3,30 +3,32 @@
3
3
  require 'open-uri'
4
4
  require 'cgi'
5
5
  require 'json'
6
+ require 'launchy'
6
7
 
7
8
  # Example:
8
9
  # {
9
10
  # "results"=> [
10
11
  # {"address_components"=>
11
- # [{"long_name"=>"Paris", "types"=>["locality", "political"], "short_name"=>"Paris"},
12
- # {"long_name"=>"Paris", "types"=>["administrative_area_level_2", "political" ], "short_name"=>"75"},
12
+ # [{"long_name"=>"Paris", "types"=>["locality", "political"], "short_name"=>"Paris"},
13
+ # {"long_name"=>"Paris", "types"=>["administrative_area_level_2", "political" ], "short_name"=>"75"},
13
14
  # {"long_name"=>"Ile-de-France", "types"=>["administrative_area_level_1", "political"], "short_name"=>"IDF"},
14
15
  # {"long_name"=>"France", "types"=>["country", "political"], "short_name"=>"FR"}
15
- # ],
16
+ # ],
16
17
  # "geometry"=>{
17
- # "bounds"=>{"northeast"=>{"lng"=>2.4699099, "lat"=>48.9021461}, "southwest"=>{"lng"=>2.2241006, "lat"=>48.8155414}},
18
- # "location"=>{"lng"=>2.3509871, "lat"=>48.8566667},
19
- # "location_type"=>"APPROXIMATE",
18
+ # "bounds"=>{"northeast"=>{"lng"=>2.4699099, "lat"=>48.9021461}, "southwest"=>{"lng"=>2.2241006, "lat"=>48.8155414}},
19
+ # "location"=>{"lng"=>2.3509871, "lat"=>48.8566667},
20
+ # "location_type"=>"APPROXIMATE",
20
21
  # "viewport"=>{"northeast"=>{"lng"=>2.4790465, "lat"=>48.915363}, "southwest"=>{"lng"=>2.2229277, "lat"=>48.7979015}}
21
22
  # },
22
- # "types"=>["locality", "political"],
23
+ # "types"=>["locality", "political"],
23
24
  # "formatted_address"=>"Paris, France"}
24
- # ],
25
+ # ],
25
26
  # "status"=>"OK"
26
27
  # }
27
28
 
28
29
  module Google
29
30
  class Geocoder
31
+
30
32
  def self.Exception(*names)
31
33
  cl = Module === self ? self : Object
32
34
  names.each {|n| cl.const_set(n, Class.new(Exception))}
@@ -35,17 +37,18 @@ module Google
35
37
  Exception :MissingLocation, :GeocoderServerIsDown, :InvalidResponse
36
38
 
37
39
  URL_STRING = "http://maps.googleapis.com/maps/api/geocode"
40
+ MAPS_URL_STRING = "http://maps.google.com/maps?f=q&source=s_q&iwloc=A&hl=en"
38
41
 
39
42
  def query(location)
40
- raise(MissingLocation) if location.nil?
41
-
42
- request = "#{URL_STRING}/json?address=#{CGI.escape(location)}&sensor=false"
43
-
43
+ raise(MissingLocation) if location.nil?
44
+
45
+ request = "#{URL_STRING}/json?address=#{CGI.escape(location)}&sensor=false"
46
+
44
47
  begin
45
48
  response = call_service(request)
46
49
 
47
50
  raise(GeocoderServerIsDown) if response.empty?
48
-
51
+
49
52
  if response['status'] == "ZERO_RESULTS"
50
53
  []
51
54
  else
@@ -69,18 +72,26 @@ module Google
69
72
  puts "Administrative Area (level 2): #{administrative_area_l2['long_name']} (#{administrative_area_l2['short_name']})" unless administrative_area_l2.nil?
70
73
 
71
74
  puts "Latitude: #{latitude}"
72
- puts "Longitude: #{longitude}"
75
+ puts "Longitude: #{longitude}"
73
76
 
74
- [latitude, longitude]
77
+ [latitude, longitude]
75
78
  end
76
79
  rescue OpenURI::HTTPError
77
80
  raise(GeocoderServerIsDown)
78
- end
81
+ end
79
82
  end
80
83
 
84
+ def open_in_browser q
85
+ location = q.gsub(/\s/, '+')
86
+ lng, lat = query(q)
87
+
88
+ Launchy::Browser.run("#{MAPS_URL_STRING}&geocode=&q=#{location}&sll=#{lng},#{lat}&hnear=#{location}")
89
+ end
90
+
81
91
  private
82
92
 
83
93
  def call_service(request)
94
+
84
95
  response = {}
85
96
 
86
97
  open(request) do |stream|
@@ -93,14 +104,14 @@ module Google
93
104
 
94
105
  response
95
106
  end
96
-
107
+
97
108
  def address_component(parent, type)
98
109
  parent.each do |child|
99
110
  if child["types"].include? type
100
111
  return child
101
112
  end
102
113
  end
103
-
114
+
104
115
  nil
105
116
  end
106
117
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-geocoder
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 3
10
- version: 0.0.3
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alexander Shvets
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-29 00:00:00 -04:00
18
+ date: 2010-10-01 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -25,7 +25,7 @@ dependencies:
25
25
  version_requirements: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
28
- - - ">="
28
+ - - ~>
29
29
  - !ruby/object:Gem::Version
30
30
  hash: 27
31
31
  segments:
@@ -37,7 +37,7 @@ dependencies:
37
37
  - !ruby/object:Gem::Dependency
38
38
  type: :runtime
39
39
  prerelease: false
40
- name: json_pure
40
+ name: launchy
41
41
  version_requirements: &id002 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
@@ -95,7 +95,7 @@ files:
95
95
  - bin/geo
96
96
  - bin/geo.bat
97
97
  - google-geocoder.gemspec
98
- - lib/google_geocoder.rb
98
+ - lib/google_geocoder/google_geocoder.rb
99
99
  - spec/geocoder_spec.rb
100
100
  - spec/spec_helper.rb
101
101
  has_rdoc: true