geo_seeder 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.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GeoSeeder
2
2
 
3
- Seed your test database with real addresses for those apps that impliment maping and/or other location features.
3
+ Seed your test database with real addresses for apps that rely on geo data for mapping and/or other location features.
4
4
 
5
5
  ## Installation
6
6
 
@@ -17,9 +17,59 @@ Or install it yourself as:
17
17
  $ gem install geo_seeder
18
18
 
19
19
  ## Usage
20
+ PLEASE NOTE: GeoSeeder employs Google Maps' Geocoder API. If you're going to be making a large number of requests (one request per GeoSeeder::Location object retured), please register your app with google and obtain an api key. I suggest using [figaro](https://github.com/laserlemon/figaro) to manage your keys. Add this your applicaton.yml:
21
+ ```yaml
22
+ GOOGLE_KEY: "YOUR_GOOGLE_API_KEY"
23
+ ```
24
+ ### Random Addresses
25
+ Call GeoSeeder::Location.random to get a random an array of GeoSeeder::Location objects. The random method takes center (address_string) radius (in miles) and a quantity.
20
26
 
21
- TODO: Write usage instructions here
27
+ In your seed.rb:
28
+ ```ruby
29
+ locations = GeoSeeder.random({
30
+ center: "10003",
31
+ radius: 2,
32
+ quantity: 50
33
+ })
22
34
 
35
+ locations.each do |location|
36
+ Event.create!(
37
+ name: Faker::Name.name,
38
+ email: Faker::Email.email,
39
+ street: location.street_number + location.street,
40
+ city: location.city,
41
+ state: location.state,
42
+ zip: location.zip_code
43
+ )
44
+ end
45
+ ```
46
+ ### Setting Coordinates
47
+ If you have models that require lat/lng attributes you could use GeoSeeder in a before_validation like so:
48
+ ```ruby
49
+ before_validation :set_coordinates
50
+
51
+ def set_coordinates
52
+ address_string = [street, city, state].join(", ")
53
+ # => "123 Fake Street, Springfield, IL"
54
+
55
+ location = GeoSeeder::Location.latlng(address_string)
56
+ # => #<GeoSeeder::Location:0x007f8771311028>
57
+
58
+ if location.lat && location.lng
59
+ lat, lng = location.lat, location.lng
60
+ else
61
+ errors[:base] << "Unable to determine geo data based on provided address."
62
+ end
63
+ end
64
+ ```
65
+
66
+ ### Finding Addresses
67
+ If you're starting with a geometric location, perhaps provided by a mobile device, you can user GeoSeeder to return a street address:
68
+ ```ruby
69
+ location = GeoSeeder::Location.address([40.7492998, -73.8888135])
70
+ location.formatted_address
71
+ # => "77-11 37th Avenue, Jackson Heights, NY 11372"
72
+ ```
23
73
  ## Contributing
24
74
 
25
75
  1. Fork it ( http://github.com/<my-github-username>/geo_seeder/fork )
@@ -1,3 +1,3 @@
1
1
  module GeoSeeder
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/geo_seeder.rb CHANGED
@@ -3,48 +3,6 @@ require "addressable/uri"
3
3
  require "rest_client"
4
4
  require "json"
5
5
 
6
-
7
- # What do I want to be able to do?
8
- #
9
- # In seed file i want to be able to do
10
- #
11
- # locations = GeoSeeder.random({
12
- # center: "10003",
13
- # radius: 2,
14
- # quantity: 50
15
- # })
16
- #
17
- # locations.each do |location|
18
- # Event.create!(
19
- # name: Faker::Name.name,
20
- # email: Faker::Email.email,
21
- # street: location.street_number + location.street,
22
- # city: location.city,
23
- # state: location.state,
24
- # zip: location.zip_code
25
- # )
26
- # end
27
- #
28
- #
29
- # In a model I want to be able to use it for before validation
30
- #
31
- # before_validation :set_coordinates
32
- #
33
- # def set_coordinates
34
- # address_string = [street, city, state].join(", ")
35
- # => "123 Fake Street, Springfield, IL"
36
- #
37
- # location = GeoSeeder::Location.latlng(address_string)
38
- # => #<GeoSeeder::Location:0x007f8771311028>
39
- #
40
- # if location.lat && location.lng
41
- # lat, lng = location.lat, location.lng
42
- # else
43
- # errors[:base] << "Unable to determine geo data based on provided address."
44
- # end
45
- # end
46
-
47
-
48
6
  module GeoSeeder
49
7
  class Location
50
8
 
@@ -89,18 +47,25 @@ module GeoSeeder
89
47
  end
90
48
 
91
49
  def all
92
- {
93
- formatted_address: self.formatted_address,
94
- lat: self.lat,
95
- lng: self.lng,
96
- number: self.number,
97
- street: self.street,
98
- city: self.city,
99
- county: self.county,
100
- state: self.state,
101
- country: self.country,
102
- zip_code: self.zip_code
50
+ addr_hash = {
51
+ formatted_address: formatted_address,
52
+ lat: lat,
53
+ lng: lng,
54
+ street_number: street_number,
55
+ street: street,
56
+ city: city,
57
+ county: county,
58
+ state: state,
59
+ state_abrv: state_abrv,
60
+ country: country,
61
+ zip_code: zip_code
103
62
  }
63
+
64
+ if neighborhood
65
+ addr_hash[:neighborhood] = neighborhood
66
+ end
67
+
68
+ addr_hash
104
69
  end
105
70
 
106
71
  def self.random(defaults = {})
@@ -116,15 +81,13 @@ module GeoSeeder
116
81
  diff = options[:radius] * 1.0 / 70.0
117
82
 
118
83
  results = []
119
- i = 0
84
+
120
85
  while results.count < options[:quantity]
121
86
  rand_lat = (center_lat + rand(-diff..diff)).round(7)
122
87
  rand_lng = (center_lng + rand(-diff..diff)).round(7)
123
88
 
124
89
  rand_address = address([rand_lat, rand_lng])
125
90
 
126
- puts i
127
- i += 1
128
91
  if rand_address && rand_address.street_number
129
92
  results << rand_address
130
93
  end
@@ -135,7 +98,6 @@ module GeoSeeder
135
98
 
136
99
  def self.address(latlng)
137
100
  response = api_request({latlng: latlng})
138
- puts response.first
139
101
  response.count > 0 ? GeoSeeder::Location.new(response.first) : nil
140
102
  end
141
103
 
@@ -144,6 +106,7 @@ module GeoSeeder
144
106
  response.count > 0 ? GeoSeeder::Location.new(response.first) : nil
145
107
  end
146
108
 
109
+ protected
147
110
  def self.api_request(options = {})
148
111
  # options must either contain an address string or a latlng array
149
112
  if options[:latlng]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geo_seeder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: