phl_geocode 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/.travis.yml +4 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +43 -0
- data/README.md +50 -0
- data/Rakefile +42 -0
- data/VERSION +1 -0
- data/lib/phl_geocode.rb +82 -0
- data/phl_geocode.gemspec +70 -0
- data/spec/fixtures/fake_http_response_body.json +1 -0
- data/spec/lib/phl_geocode_spec.rb +127 -0
- data/spec/spec_helper.rb +12 -0
- metadata +189 -0
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.1.3)
|
5
|
+
git (1.2.5)
|
6
|
+
jeweler (1.8.4)
|
7
|
+
bundler (~> 1.0)
|
8
|
+
git (>= 1.2.5)
|
9
|
+
rake
|
10
|
+
rdoc
|
11
|
+
json (1.7.5)
|
12
|
+
metaclass (0.0.1)
|
13
|
+
mocha (0.13.0)
|
14
|
+
metaclass (~> 0.0.1)
|
15
|
+
multi_json (1.3.7)
|
16
|
+
rake (10.0.1)
|
17
|
+
rdoc (3.12)
|
18
|
+
json (~> 1.4)
|
19
|
+
rspec (2.12.0)
|
20
|
+
rspec-core (~> 2.12.0)
|
21
|
+
rspec-expectations (~> 2.12.0)
|
22
|
+
rspec-mocks (~> 2.12.0)
|
23
|
+
rspec-core (2.12.0)
|
24
|
+
rspec-expectations (2.12.0)
|
25
|
+
diff-lcs (~> 1.1.3)
|
26
|
+
rspec-mocks (2.12.0)
|
27
|
+
simplecov (0.7.1)
|
28
|
+
multi_json (~> 1.0)
|
29
|
+
simplecov-html (~> 0.7.1)
|
30
|
+
simplecov-html (0.7.1)
|
31
|
+
|
32
|
+
PLATFORMS
|
33
|
+
ruby
|
34
|
+
|
35
|
+
DEPENDENCIES
|
36
|
+
bundler (= 1.2.2)
|
37
|
+
jeweler (~> 1.8.4)
|
38
|
+
json
|
39
|
+
mocha
|
40
|
+
rake (= 10.0.1)
|
41
|
+
rdoc (~> 3.12)
|
42
|
+
rspec (= 2.12.0)
|
43
|
+
simplecov
|
data/README.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
[](https://travis-ci.org/mdb/phl_geocode.rb)
|
2
|
+
|
3
|
+
# phl_geocode
|
4
|
+
|
5
|
+
A Ruby gem for getting latitude and longitude coordinates for a Philadelphia address.
|
6
|
+
|
7
|
+
This is the Ruby version of the Node.js [phl-geocoder](http://github.com/mdb/phl-geocoder).
|
8
|
+
|
9
|
+
The gem uses Philadelphia's [311 Mobile Data Service API](http://services.phila.gov/ULRS311).
|
10
|
+
|
11
|
+
## Get lat/long coordinates for a Philadelphia Address:
|
12
|
+
|
13
|
+
require "phl_geocode"
|
14
|
+
phl = PHLGeocode.new
|
15
|
+
phl.get_coordinates "1500 Market Street"
|
16
|
+
|
17
|
+
Example response:
|
18
|
+
|
19
|
+
[{
|
20
|
+
:address => "1500 MARKET ST",
|
21
|
+
:similarity => 100,
|
22
|
+
:latitude => 39.9521740263203,
|
23
|
+
:longitude => -75.1661518986459
|
24
|
+
}, {
|
25
|
+
:address => "1500S MARKET ST",
|
26
|
+
:similarity => 99,
|
27
|
+
:latitude => 39.9521740263203,
|
28
|
+
:longitude => -75.1661518986459
|
29
|
+
}]
|
30
|
+
|
31
|
+
## Get the address key for a Philadelphia Address:
|
32
|
+
|
33
|
+
require "phl_geocode"
|
34
|
+
phl = PHLGeocode.new
|
35
|
+
phl.get_address_key "1500 Market Street"
|
36
|
+
|
37
|
+
Example response:
|
38
|
+
|
39
|
+
{
|
40
|
+
:agency_id => "26",
|
41
|
+
:topic_name => "AddressKeys",
|
42
|
+
:topic_id => "410526",
|
43
|
+
:address_ref => "01500 MARKET ST"
|
44
|
+
}
|
45
|
+
|
46
|
+
## Override default settings:
|
47
|
+
|
48
|
+
require "phl_geocode"
|
49
|
+
phl = PHLGeocode.new :min_confidence => 100
|
50
|
+
phl.get_coordinates "1500 Market Street"
|
data/Rakefile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
|
6
|
+
begin
|
7
|
+
Bundler.setup(:default, :development)
|
8
|
+
rescue Bundler::BundlerError => e
|
9
|
+
$stderr.puts e.message
|
10
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
11
|
+
exit e.status_code
|
12
|
+
end
|
13
|
+
require 'rake'
|
14
|
+
|
15
|
+
require 'jeweler'
|
16
|
+
Jeweler::Tasks.new do |gem|
|
17
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
18
|
+
gem.name = "phl_geocode"
|
19
|
+
gem.homepage = "http://github.com/mdb/phl_geocode.rb"
|
20
|
+
gem.license = "MIT"
|
21
|
+
gem.summary = %Q{A Ruby gem that gets latitude and longitude coordinates for a Philadelphia address.}
|
22
|
+
gem.description = %Q{Get latitude and longitude coordinates for a Philadelphia address.}
|
23
|
+
gem.email = "mikedball@gmail.com"
|
24
|
+
gem.authors = ["Mike Ball"]
|
25
|
+
# dependencies defined in Gemfile
|
26
|
+
end
|
27
|
+
Jeweler::RubygemsDotOrgTasks.new
|
28
|
+
|
29
|
+
require 'rspec/core/rake_task'
|
30
|
+
RSpec::Core::RakeTask.new(:spec)
|
31
|
+
|
32
|
+
task :default => :spec
|
33
|
+
|
34
|
+
require 'rdoc/task'
|
35
|
+
Rake::RDocTask.new do |rdoc|
|
36
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
37
|
+
|
38
|
+
rdoc.rdoc_dir = 'rdoc'
|
39
|
+
rdoc.title = "phl_geocode #{version}"
|
40
|
+
rdoc.rdoc_files.include('README*')
|
41
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
42
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/lib/phl_geocode.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require "json"
|
2
|
+
require "open-uri"
|
3
|
+
require "net/http"
|
4
|
+
|
5
|
+
class PHLGeocode
|
6
|
+
attr_accessor :address_key_response
|
7
|
+
attr_accessor :coordinates_response
|
8
|
+
attr_accessor :last_queried_address_key_addr
|
9
|
+
attr_accessor :last_queried_coordinates_addr
|
10
|
+
attr_accessor :settings
|
11
|
+
|
12
|
+
def initialize(options={})
|
13
|
+
@settings = {
|
14
|
+
:min_confidence => 85,
|
15
|
+
:api_base => "http://services.phila.gov",
|
16
|
+
:location_path => "/ULRS311/Data/Location/",
|
17
|
+
:address_key_path => "/ULRS311/Data/LIAddressKey/"
|
18
|
+
}.merge(options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_coordinates(address=nil)
|
22
|
+
raise ArgumentError("Argument must be a string") unless address.is_a? String
|
23
|
+
|
24
|
+
if address == @last_queried_coordinates_addr
|
25
|
+
@coordinates_response ||= call_api('coordinates', address)
|
26
|
+
else
|
27
|
+
@coordinates_response = call_api('coordinates', address)
|
28
|
+
@last_queried_coordinates_addr = address
|
29
|
+
end
|
30
|
+
|
31
|
+
parse_locations @coordinates_response
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_address_key(address=nil)
|
35
|
+
raise ArgumentError("Argument must be a string") unless address.is_a? String
|
36
|
+
|
37
|
+
if address == @last_queried_address_key_addr
|
38
|
+
@address_key_response ||= call_api('address_key', address)
|
39
|
+
else
|
40
|
+
@address_key_response = call_api('address_key', address)
|
41
|
+
@last_queried_address_key_addr = address
|
42
|
+
end
|
43
|
+
|
44
|
+
parse_address_key @address_key_response
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
def parse_address_key(response)
|
49
|
+
key_json = JSON.parse(response.body)
|
50
|
+
|
51
|
+
{
|
52
|
+
:agency_id => key_json["AgencyID"],
|
53
|
+
:topic_name => key_json["TopicName"],
|
54
|
+
:topic_id => key_json["TopicID"],
|
55
|
+
:address_ref => key_json["AddressRef"]
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
def parse_locations(response)
|
60
|
+
locations_json = JSON.parse(response.body)["Locations"]
|
61
|
+
|
62
|
+
locations_json.find_all { |loc|
|
63
|
+
loc["Address"]["Similarity"] >= @settings[:min_confidence]
|
64
|
+
}.map { |item|
|
65
|
+
{
|
66
|
+
:address => item["Address"]["StandardizedAddress"],
|
67
|
+
:similarity => item["Address"]["Similarity"],
|
68
|
+
:latitude => item["YCoord"],
|
69
|
+
:longitude => item["XCoord"]
|
70
|
+
}
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def call_api(type, address)
|
75
|
+
addr = URI::encode(address)
|
76
|
+
type_path_map = {
|
77
|
+
:coordinates => @settings[:location_path],
|
78
|
+
:address_key => @settings[:address_key_path]
|
79
|
+
}
|
80
|
+
Net::HTTP.get_response(URI.parse("#{@settings[:api_base]}#{type_path_map[type.to_sym]}#{addr}"))
|
81
|
+
end
|
82
|
+
end
|
data/phl_geocode.gemspec
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "phl_geocode"
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Mike Ball"]
|
12
|
+
s.date = "2012-12-17"
|
13
|
+
s.description = "Get latitude and longitude coordinates for a Philadelphia address."
|
14
|
+
s.email = "mikedball@gmail.com"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.md"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".travis.yml",
|
20
|
+
"Gemfile",
|
21
|
+
"Gemfile.lock",
|
22
|
+
"README.md",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"lib/phl_geocode.rb",
|
26
|
+
"phl_geocode.gemspec",
|
27
|
+
"spec/fixtures/fake_http_response_body.json",
|
28
|
+
"spec/lib/phl_geocode_spec.rb",
|
29
|
+
"spec/spec_helper.rb"
|
30
|
+
]
|
31
|
+
s.homepage = "http://github.com/mdb/phl_geocode.rb"
|
32
|
+
s.licenses = ["MIT"]
|
33
|
+
s.require_paths = ["lib"]
|
34
|
+
s.rubygems_version = "1.8.24"
|
35
|
+
s.summary = "A Ruby gem that gets latitude and longitude coordinates for a Philadelphia address."
|
36
|
+
|
37
|
+
if s.respond_to? :specification_version then
|
38
|
+
s.specification_version = 3
|
39
|
+
|
40
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
41
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
42
|
+
s.add_development_dependency(%q<rake>, ["= 10.0.1"])
|
43
|
+
s.add_development_dependency(%q<rspec>, ["= 2.12.0"])
|
44
|
+
s.add_development_dependency(%q<mocha>, [">= 0"])
|
45
|
+
s.add_development_dependency(%q<bundler>, ["= 1.2.2"])
|
46
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
47
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
48
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
49
|
+
else
|
50
|
+
s.add_dependency(%q<json>, [">= 0"])
|
51
|
+
s.add_dependency(%q<rake>, ["= 10.0.1"])
|
52
|
+
s.add_dependency(%q<rspec>, ["= 2.12.0"])
|
53
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
54
|
+
s.add_dependency(%q<bundler>, ["= 1.2.2"])
|
55
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
56
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
57
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
58
|
+
end
|
59
|
+
else
|
60
|
+
s.add_dependency(%q<json>, [">= 0"])
|
61
|
+
s.add_dependency(%q<rake>, ["= 10.0.1"])
|
62
|
+
s.add_dependency(%q<rspec>, ["= 2.12.0"])
|
63
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
64
|
+
s.add_dependency(%q<bundler>, ["= 1.2.2"])
|
65
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
66
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
67
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
{"OriginalAddress":"1500 market street","Locations":[{"Address":{"StandardizedAddress":"FAKE ADDRESS","AliasMatch":null,"Similarity":100,"StreetNumber":1500,"StreetNumberSuffix":null,"Unit":"","StreetCode":53560,"StreetFullName":"MARKET ST","StreetPrefix":null,"StreetName":"MARKET","StreetType":"ST","StreetSuffix":null,"StreetCode2":0,"StreetFullName2":null,"StreetPrefix2":null,"StreetName2":null,"StreetType2":null,"StreetSuffix2":null},"XCoord":-75.1661518986459,"YCoord":39.9521740263203,"MatchType":1,"SegmentID":421333,"SegmentID2":-1},{"Address":{"StandardizedAddress":"1500S MARKET ST","AliasMatch":null,"Similarity":99,"StreetNumber":1500,"StreetNumberSuffix":"S","Unit":"","StreetCode":53560,"StreetFullName":"MARKET ST","StreetPrefix":null,"StreetName":"MARKET","StreetType":"ST","StreetSuffix":null,"StreetCode2":0,"StreetFullName2":null,"StreetPrefix2":null,"StreetName2":null,"StreetType2":null,"StreetSuffix2":null},"XCoord":-75.1661518986459,"YCoord":39.9521740263203,"MatchType":2,"SegmentID":421333,"SegmentID2":-1}]}
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe PHLGeocode do
|
4
|
+
before :each do
|
5
|
+
phl_geocode_root = File.expand_path(File.dirname(File.dirname(File.dirname(__FILE__))))
|
6
|
+
fake_resp_body_file = File.join(phl_geocode_root, "spec", "fixtures", "fake_http_response_body.json")
|
7
|
+
@fake_http_response_body = File.open(fake_resp_body_file).read
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#new" do
|
11
|
+
before :each do
|
12
|
+
@phl = PHLGeocode.new
|
13
|
+
end
|
14
|
+
|
15
|
+
it "creates a new PHLGeocode instance" do
|
16
|
+
@phl.class.should == PHLGeocode
|
17
|
+
end
|
18
|
+
|
19
|
+
context "it is not passed any options" do
|
20
|
+
it "creates a :settings hash with some default settings" do
|
21
|
+
@phl.settings[:min_confidence].should eq 85
|
22
|
+
@phl.settings[:api_base].should eq "http://services.phila.gov"
|
23
|
+
@phl.settings[:location_path].should eq "/ULRS311/Data/Location/"
|
24
|
+
@phl.settings[:address_key_path].should eq "/ULRS311/Data/LIAddressKey/"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "it is passed options on instantiation" do
|
29
|
+
it "has a settings hash set to the value of the options its passed" do
|
30
|
+
phl = PHLGeocode.new :min_confidence => 100
|
31
|
+
phl.settings[:min_confidence].should == 100
|
32
|
+
end
|
33
|
+
|
34
|
+
it "preserves default settings if no overriding values are passed in the options" do
|
35
|
+
phl = PHLGeocode.new :foo => "bar"
|
36
|
+
phl.settings[:min_confidence].should == 85
|
37
|
+
phl.settings[:foo].should == "bar"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#get_coordinates" do
|
43
|
+
before :each do
|
44
|
+
@phl = PHLGeocode.new
|
45
|
+
@http_mock = mock("Net::HTTP")
|
46
|
+
@http_mock.stubs(
|
47
|
+
:code => 200,
|
48
|
+
:message => "OK",
|
49
|
+
:content_type => "application/json",
|
50
|
+
:body => @fake_http_response_body
|
51
|
+
)
|
52
|
+
Net::HTTP.stub(:get_response).and_return @http_mock
|
53
|
+
end
|
54
|
+
|
55
|
+
it "exists as a method on a PHLGeocode" do
|
56
|
+
@phl.respond_to?(:get_coordinates).should == true
|
57
|
+
end
|
58
|
+
|
59
|
+
it "raises an error if it is not passed a valid string argument" do
|
60
|
+
lambda { @phl.get_coordinates }.should raise_error
|
61
|
+
lambda { @phl.get_coordinates(3) }.should raise_error
|
62
|
+
lambda { @phl.get_coordinates(nil) }.should raise_error
|
63
|
+
lambda { @phl.get_coordinates({}) }.should raise_error
|
64
|
+
end
|
65
|
+
|
66
|
+
it "makes a properly formatted API call to the proper endpoint" do
|
67
|
+
Net::HTTP.should_receive(:get_response).with(URI.parse("http://services.phila.gov/ULRS311/Data/Location/some%20address"))
|
68
|
+
@phl.get_coordinates "some address"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "sets :coordinates_response to the value of the API call response" do
|
72
|
+
@phl.get_coordinates "some address"
|
73
|
+
@phl.coordinates_response.should == @http_mock
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns an array of locations whose :similarity is greater than or equal to :settings.min_confidence" do
|
77
|
+
@phl.get_coordinates("some address")[0][:similarity].should == 100
|
78
|
+
end
|
79
|
+
|
80
|
+
it "returns an array of locations, each of which reports a :latitude" do
|
81
|
+
@phl.get_coordinates("some address")[0][:latitude].should == 39.9521740263203
|
82
|
+
end
|
83
|
+
|
84
|
+
it "returns an array of locations, each of which reports a :longitude" do
|
85
|
+
@phl.get_coordinates("some address")[0][:longitude].should == -75.1661518986459
|
86
|
+
end
|
87
|
+
|
88
|
+
it "returns an array of locations, each of which reports a standardized address as :address" do
|
89
|
+
@phl.get_coordinates("some address")[0][:address].should == "FAKE ADDRESS"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#get_address_key" do
|
94
|
+
before :each do
|
95
|
+
@phl = PHLGeocode.new
|
96
|
+
@http_mock = mock("Net::HTTP")
|
97
|
+
@http_mock.stubs(
|
98
|
+
:code => 200,
|
99
|
+
:message => "OK",
|
100
|
+
:content_type => "application/json",
|
101
|
+
:body => {foo: "bar"}.to_json
|
102
|
+
)
|
103
|
+
Net::HTTP.stub(:get_response).and_return @http_mock
|
104
|
+
end
|
105
|
+
|
106
|
+
it "exists as a method on a PHLGeocode" do
|
107
|
+
@phl.respond_to?(:get_address_key).should eq true
|
108
|
+
end
|
109
|
+
|
110
|
+
it "raises an error if it is not passed a valid string argument" do
|
111
|
+
lambda { @phl.get_address_key }.should raise_error
|
112
|
+
lambda { @phl.get_address_key(3) }.should raise_error
|
113
|
+
lambda { @phl.get_address_key(nil) }.should raise_error
|
114
|
+
lambda { @phl.get_address_key({}) }.should raise_error
|
115
|
+
end
|
116
|
+
|
117
|
+
it "makes a properly formatted API call to the proper endpoint" do
|
118
|
+
Net::HTTP.should_receive(:get_response).with(URI.parse("http://services.phila.gov/ULRS311/Data/LIAddressKey/some%20address"))
|
119
|
+
@phl.get_address_key "some address"
|
120
|
+
end
|
121
|
+
|
122
|
+
it "sets :address_key_response to the value of the API call response" do
|
123
|
+
@phl.get_address_key "some address"
|
124
|
+
@phl.address_key_response.should == @http_mock
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: phl_geocode
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Mike Ball
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - '='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 10.0.1
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 10.0.1
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.12.0
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.12.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: mocha
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: bundler
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - '='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.2.2
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - '='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.2.2
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rdoc
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '3.12'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '3.12'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: jeweler
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.8.4
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 1.8.4
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: simplecov
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
description: Get latitude and longitude coordinates for a Philadelphia address.
|
143
|
+
email: mikedball@gmail.com
|
144
|
+
executables: []
|
145
|
+
extensions: []
|
146
|
+
extra_rdoc_files:
|
147
|
+
- README.md
|
148
|
+
files:
|
149
|
+
- .travis.yml
|
150
|
+
- Gemfile
|
151
|
+
- Gemfile.lock
|
152
|
+
- README.md
|
153
|
+
- Rakefile
|
154
|
+
- VERSION
|
155
|
+
- lib/phl_geocode.rb
|
156
|
+
- phl_geocode.gemspec
|
157
|
+
- spec/fixtures/fake_http_response_body.json
|
158
|
+
- spec/lib/phl_geocode_spec.rb
|
159
|
+
- spec/spec_helper.rb
|
160
|
+
homepage: http://github.com/mdb/phl_geocode.rb
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ! '>='
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
segments:
|
174
|
+
- 0
|
175
|
+
hash: 2260791247020255392
|
176
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
requirements: []
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 1.8.24
|
185
|
+
signing_key:
|
186
|
+
specification_version: 3
|
187
|
+
summary: A Ruby gem that gets latitude and longitude coordinates for a Philadelphia
|
188
|
+
address.
|
189
|
+
test_files: []
|