Pinpoint

(Un)conventional Address Composition for Ruby (and Rails)

Build Status Code Climate Code Climate

Supported Rubies

  • MRI Ruby 1.9.2
  • MRI Ruby 1.9.3
  • JRuby (in 1.9 compat mode)



Installation

First:

gem install pinpoint

Then in your script:

require 'pinpoint'

or in your Gemfile

gem 'pinpoint'

or from IRB

irb -r 'pinpoint'

Usage

Direct

Typically Pinpoint is used by requiring it and using the Pinpoint::Address class directly. Like so:

class ThingWithAddress
  attr_accessor :address
end

thing = ThingWithAddress.new
thing.address = Pinpoint::Address.new(:foo => :bar)

Composable

However it can also be included in the class when the class already has accessors for all of the different address attributes to generate a composed address.

class ThingWithAddress
  include Pinpoint::Composable

  attr_accessor :street
  attr_accessor :city
  attr_accessor :state
  attr_accessor :zip_code
  attr_accessor :country

  pinpoint :address
end

thing = ThingWithAddress.new

# Set all address fields on `thing`

thing.address # => Pinpoint::Address

Field Prefixes

If your class has fields that are prefixed by a string (eg venue_city, venue_state, etc) you can pass field_prefix to the compose class method like so:

class ThingWithAddress
  # attr_accessors like:
  attr_accessor :venue_street
  attr_accessor :venue_city

  pinpoint :venue, :field_prefix => 'venue'
end

Address Formatting

Pinpoint has an advanced address formatter which can output an address in multiple country formats.

pinpoint_address.to_s(country:  :us,
                      style:    :one_line)
# => 'Kwik-E-Mart, 123 Apu Lane, Springfield, NW 12345, United States'

pinpoint\_address.to\_s(country:  :ru,
                      style:    :one_line)
# => 'Kwik-E-Mart, ul. Apu Lane d. 123, pos. Springfield, NW obl, 12345, United States'

Note: By default, Pinpoint will format addresses for the country that the address is located in.

Retrieving Address Information

  • :name - The name of the person or business this address is associated with
  • :location_details - Free form but typically describes the department, mail stop, etc).
  • :street - The name of the street
  • :street_number - The number that corresponds to the place that the address is associated with.
  • :suite_number - The number associated with the aparment, office or suite.
  • :zip_code - The postal code associated with the address
  • :city - The town/villiage/city associated with the address
  • :state - The state/department/province associated with the address
  • :country - The country associated with the address

Aliases

Some of the above attributes are aliased to some other common names:

  • :name => :recipient
  • :name => :building_name
  • :location_details => :mail_stop
  • :zip_code => :postal_code
  • :city => :locality
  • :state => :province

Geocoding

By default, Pinpoint uses Geocoder to add latitude and longitude information to addresses.

If a Pinpoint address is composed into your class, you can add a :latitude and :longitude attribute to it and it will be set/modified when the address is changed.

Road Map

  • Advanced parsing support
  • SimpleForm inputs

Issues

If you have problems, please create a Github issue.

Credits

pinpoint is maintained by Chrrpy, LLC

The names and logos for Chirrpy are trademarks of Chrrpy, LLC

Contributors

License

pinpoint is Copyright © 2012 Chirrpy. It is free software, and may be redistributed under the terms specified in the LICENSE file.