phl_geocode 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://secure.travis-ci.org/mdb/phl_geocode.rb.png?branch=master)](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: []
|