geo_seeder 1.0.0 → 1.0.1
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/.gitignore +1 -0
- data/README.md +12 -2
- data/lib/geo_seeder/version.rb +1 -1
- data/lib/geo_seeder.rb +31 -32
- metadata +2 -2
    
        data/.gitignore
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -58,7 +58,7 @@ def set_coordinates | |
| 58 58 | 
             
              if location.lat && location.lng
         | 
| 59 59 | 
             
                lat, lng = location.lat, location.lng
         | 
| 60 60 | 
             
              else
         | 
| 61 | 
            -
                errors[:base] << "Unable to determine geo data  | 
| 61 | 
            +
                errors[:base] << "Unable to determine geo data from provided address."
         | 
| 62 62 | 
             
              end
         | 
| 63 63 | 
             
            end
         | 
| 64 64 | 
             
            ```
         | 
| @@ -71,8 +71,18 @@ location.formatted_address | |
| 71 71 | 
             
            # => "77-11 37th Avenue, Jackson Heights, NY 11372"
         | 
| 72 72 | 
             
            ```
         | 
| 73 73 |  | 
| 74 | 
            +
            ### .all
         | 
| 75 | 
            +
            Instance method if you want all Location object attributes in hash form.
         | 
| 76 | 
            +
            ```ruby
         | 
| 77 | 
            +
            location = GeoSeeder::Location.random.first
         | 
| 78 | 
            +
            location.all
         | 
| 79 | 
            +
            # => {:formatted_address=>"2467 Bedford Avenue, Brooklyn, NY 11226, USA",
         | 
| 80 | 
            +
            #     :lat=>40.643426,
         | 
| 81 | 
            +
            #     :lng=>-73.95428,
         | 
| 82 | 
            +
            #     :city=>"Brooklyn", ...}
         | 
| 83 | 
            +
            ```
         | 
| 84 | 
            +
             | 
| 74 85 | 
             
            ### Comming Soon!
         | 
| 75 | 
            -
            * .all instance method - returns a hash containing all of a locations object's attributes. 
         | 
| 76 86 | 
             
            * output option - call any class method with the option - output: ["attribute1", "attribute2", ...] - and it will return a hash/array of hashes with only those attributes, all ready for your merging pleasure.
         | 
| 77 87 |  | 
| 78 88 | 
             
            ## Contributing
         | 
    
        data/lib/geo_seeder/version.rb
    CHANGED
    
    
    
        data/lib/geo_seeder.rb
    CHANGED
    
    | @@ -7,9 +7,21 @@ module GeoSeeder | |
| 7 7 | 
             
              class Location
         | 
| 8 8 |  | 
| 9 9 | 
             
                API_KEY = ENV["GOOGLE_KEY"]
         | 
| 10 | 
            -
                
         | 
| 10 | 
            +
                ADDRESS_COMPONENT_TYPES = {
         | 
| 11 | 
            +
                  "street_number" => "@street_number",
         | 
| 12 | 
            +
                  "route" => "@street",
         | 
| 13 | 
            +
                  "neighborhood" => "@neighborhood",
         | 
| 14 | 
            +
                  "administrative_area_level_1" => "@state",
         | 
| 15 | 
            +
                  "administrative_area_level_2" =>  "@county",
         | 
| 16 | 
            +
                  "locality" => "@city",
         | 
| 17 | 
            +
                  "administrative_area_level_3" => "@city",
         | 
| 18 | 
            +
                  "sublocality" => "@city",
         | 
| 19 | 
            +
                  "postal_code" => "@zip_code",
         | 
| 20 | 
            +
                  "country" => "@country"
         | 
| 21 | 
            +
                }
         | 
| 22 | 
            +
             | 
| 11 23 | 
             
                attr_reader :formatted_address, :street_number, :street, :neighborhood, 
         | 
| 12 | 
            -
                            :city, :state, : | 
| 24 | 
            +
                            :city, :state, :zip_code, :county, :region,
         | 
| 13 25 | 
             
                            :country, :lat, :lng
         | 
| 14 26 |  | 
| 15 27 | 
             
                def initialize(options)
         | 
| @@ -18,28 +30,11 @@ module GeoSeeder | |
| 18 30 | 
             
                  @lng = options["geometry"]["location"]["lng"]
         | 
| 19 31 |  | 
| 20 32 | 
             
                  options["address_components"].each do |comp|
         | 
| 21 | 
            -
                     | 
| 33 | 
            +
                    type = comp["types"].first
         | 
| 22 34 | 
             
                    ln = comp["long_name"]
         | 
| 23 | 
            -
                    sn = comp["short_name"]
         | 
| 24 35 |  | 
| 25 | 
            -
                     | 
| 26 | 
            -
                       | 
| 27 | 
            -
                    elsif types.include?("route")
         | 
| 28 | 
            -
                      @street = ln
         | 
| 29 | 
            -
                    elsif types.include?("administrative_area_level_1")
         | 
| 30 | 
            -
                      @state = ln
         | 
| 31 | 
            -
                      @state_abrv = sn
         | 
| 32 | 
            -
                    elsif types.include?("administrative_area_level_2")
         | 
| 33 | 
            -
                      @county = ln
         | 
| 34 | 
            -
                    elsif types.include?("sublocality") ||
         | 
| 35 | 
            -
                          types.include?("administrative_area_level_3")
         | 
| 36 | 
            -
                      @city = ln
         | 
| 37 | 
            -
                    elsif types.include?("postal_code")
         | 
| 38 | 
            -
                      @zip_code = ln
         | 
| 39 | 
            -
                    elsif types.include?("neighborhood")
         | 
| 40 | 
            -
                      @neighborhood = ln
         | 
| 41 | 
            -
                    elsif types.include?("country")
         | 
| 42 | 
            -
                      @country = ln
         | 
| 36 | 
            +
                    unless eval(ADDRESS_COMPONENT_TYPES[type])
         | 
| 37 | 
            +
                      eval("#{ADDRESS_COMPONENT_TYPES[type]} = '#{ln}'")
         | 
| 43 38 | 
             
                    end
         | 
| 44 39 | 
             
                  end
         | 
| 45 40 | 
             
                end
         | 
| @@ -66,18 +61,10 @@ module GeoSeeder | |
| 66 61 | 
             
                    radius: 1
         | 
| 67 62 | 
             
                  }.merge(defaults)
         | 
| 68 63 |  | 
| 69 | 
            -
                  center_point = latlng(options[:center])
         | 
| 70 | 
            -
                  center_lat = center_point.lat
         | 
| 71 | 
            -
                  center_lng = center_point.lng
         | 
| 72 | 
            -
                  diff = options[:radius] * 1.0 / 70.0
         | 
| 73 | 
            -
                  
         | 
| 74 64 | 
             
                  results = []
         | 
| 75 65 |  | 
| 76 66 | 
             
                  while results.count < options[:quantity]
         | 
| 77 | 
            -
                     | 
| 78 | 
            -
                    rand_lng = (center_lng + rand(-diff..diff)).round(7)
         | 
| 79 | 
            -
                    
         | 
| 80 | 
            -
                    rand_address = address([rand_lat, rand_lng])
         | 
| 67 | 
            +
                    rand_address = address(rand_coords(options[:center], options[:radius]))
         | 
| 81 68 |  | 
| 82 69 | 
             
                    if rand_address && rand_address.street_number
         | 
| 83 70 | 
             
                      results << rand_address
         | 
| @@ -87,6 +74,7 @@ module GeoSeeder | |
| 87 74 | 
             
                  results
         | 
| 88 75 | 
             
                end
         | 
| 89 76 |  | 
| 77 | 
            +
                
         | 
| 90 78 | 
             
                def self.address(latlng)
         | 
| 91 79 | 
             
                  response = api_request({latlng: latlng})
         | 
| 92 80 | 
             
                  location = response.count > 0 ? GeoSeeder::Location.new(response.first) : nil
         | 
| @@ -103,6 +91,18 @@ module GeoSeeder | |
| 103 91 | 
             
                end
         | 
| 104 92 |  | 
| 105 93 | 
             
                protected
         | 
| 94 | 
            +
                def self.rand_coords(center, radius)
         | 
| 95 | 
            +
                  center_pt = nil
         | 
| 96 | 
            +
                  until center_pt
         | 
| 97 | 
            +
                    center_pt = latlng(center)
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
                  center_coords = [center_pt.lat, center_pt.lng]
         | 
| 100 | 
            +
                  diff = radius * 1.0 / 70.0
         | 
| 101 | 
            +
                  center_coords.map do |coord|
         | 
| 102 | 
            +
                    (coord + rand(-diff..diff)).round(7)
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
                
         | 
| 106 106 | 
             
                def self.api_request(options = {})
         | 
| 107 107 | 
             
                  # options must either contain an address string or a latlng array
         | 
| 108 108 | 
             
                  if options[:latlng]
         | 
| @@ -121,7 +121,6 @@ module GeoSeeder | |
| 121 121 | 
             
                    :query_values => q_vals
         | 
| 122 122 | 
             
                  ).to_s
         | 
| 123 123 |  | 
| 124 | 
            -
                
         | 
| 125 124 | 
             
                  JSON.parse(RestClient.get(query_string))["results"]
         | 
| 126 125 | 
             
                end
         | 
| 127 126 | 
             
              end
         | 
    
        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: 1.0. | 
| 4 | 
            +
              version: 1.0.1
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2014-03- | 
| 12 | 
            +
            date: 2014-03-10 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: addressable
         |