ggeocode 0.0.2 → 0.0.3

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.
Files changed (3) hide show
  1. data/ggeocode.gemspec +1 -1
  2. data/lib/ggeocode.rb +52 -10
  3. metadata +4 -4
@@ -3,7 +3,7 @@
3
3
 
4
4
  Gem::Specification::new do |spec|
5
5
  spec.name = "ggeocode"
6
- spec.version = "0.0.2"
6
+ spec.version = "0.0.3"
7
7
  spec.platform = Gem::Platform::RUBY
8
8
  spec.summary = "ggeocode"
9
9
  spec.description = "description: ggeocode kicks the ass"
@@ -1,6 +1,7 @@
1
1
  module GGeocode
2
+ ### ref: http://code.google.com/apis/maps/documentation/geocoding/
2
3
 
3
- GGeocode::Version = '0.0.2'
4
+ GGeocode::Version = '0.0.3'
4
5
 
5
6
  def GGeocode.version
6
7
  GGeocode::Version
@@ -21,24 +22,43 @@ module GGeocode
21
22
  require 'yajl/json_gem'
22
23
  require 'map'
23
24
 
25
+ AddressPattern = /\w/iox
24
26
 
25
- def geocode(string)
26
- response = get(url_for(:address => string))
27
+ def geocode(*args, &block)
28
+ options = Map.options_for!(args)
29
+ if options[:reverse]
30
+ args.push(options)
31
+ return reverse_geocode(*args, &block)
32
+ end
33
+ string = args.join(' ')
34
+ address = address_for(string)
35
+ response = get(url_for(:address => address))
27
36
  result_for(response)
28
37
  end
29
38
 
30
- def reverse_geocode(string)
31
- response = get(url_for(:latlng => string))
39
+ def reverse_geocode(*args, &block)
40
+ options = Map.options_for!(args)
41
+ string = args.join(' ')
42
+ latlng = latlng_for(string)
43
+ response = get(url_for(:latlng => latlng))
32
44
  result_for(response)
33
45
  end
34
46
  alias_method('rgeocode', 'reverse_geocode')
35
47
 
36
- module Response
37
- attr_accessor :response
48
+ def GGeocode.call(*args, &block)
49
+ options = Map.options_for!(args)
50
+ string = args.join(' ')
51
+ reverse = string !~ AddressPattern || options[:reverse]
52
+ reverse ? GGeocode.reverse_geocode(string) : GGeocode.geocode(string)
53
+ end
38
54
 
39
- def body
40
- response.body
41
- end
55
+ def latlng_for(string)
56
+ lat, lng = string.scan(/[^\s,]+/)
57
+ latlng = [lat, lng].join(',')
58
+ end
59
+
60
+ def address_for(string)
61
+ string.to_s.strip
42
62
  end
43
63
 
44
64
  def result_for(response)
@@ -53,6 +73,14 @@ module GGeocode
53
73
  map
54
74
  end
55
75
 
76
+ module Response
77
+ attr_accessor :response
78
+ def body
79
+ response.body
80
+ end
81
+ alias_method('json', 'body')
82
+ end
83
+
56
84
  Url = URI.parse("http://maps.google.com/maps/api/geocode/json?")
57
85
 
58
86
  def url_for(options = {})
@@ -92,8 +120,22 @@ module GGeocode
92
120
  extend(GGeocode)
93
121
  end
94
122
 
123
+ module Kernel
124
+ private
125
+ def GGeocode(*args, &block)
126
+ GGeocode.call(*args, &block)
127
+ end
128
+ end
129
+
95
130
  Ggeocode = GGeocode
96
131
 
132
+ BEGIN {
133
+ if defined?(GGeocode)
134
+ Object.send(:remove_const, :GGeocode)
135
+ Object.send(:remove_const, :Ggeocode)
136
+ end
137
+ }
138
+
97
139
 
98
140
  if $0 == __FILE__
99
141
  require 'pp'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ggeocode
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ara T. Howard
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-02 00:00:00 -07:00
18
+ date: 2011-02-03 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency