phl_geocode 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ script: rake
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "json"
4
+
5
+ group :development do
6
+ gem "rake", "10.0.1"
7
+ gem "rspec", "2.12.0"
8
+ gem "mocha"
9
+ gem "bundler", "1.2.2"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "jeweler", "~> 1.8.4"
12
+ gem "simplecov"
13
+ end
@@ -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
@@ -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"
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'bundler/setup'
4
+ require 'simplecov'
5
+ require 'mocha/api'
6
+ SimpleCov.start
7
+
8
+ require_relative '../lib/phl_geocode'
9
+
10
+ RSpec.configure do |config|
11
+ # some (optional) config here
12
+ end
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: []