Sha256: 6dc8f494946c64acb5ef8446813c94f9bed08d3d480266ce46f6c5efdd9f6a46

Contents?: true

Size: 1.3 KB

Versions: 6

Compression:

Stored size: 1.3 KB

Contents

# encoding: UTF-8

require 'open-uri'

module Spontaneous::Field
  class Location < String

    def outputs
      [:html, :lat, :lng]
    end

    def generate_outputs(input, site)
      values = {}
      values[:html] = escape_html(input)
      values.update(geolocate(input))
      values
    end

    def geolocate(address)
      return {} if address.blank?
      url = "http://maps.google.com/maps/api/geocode/json?address=#{URI.escape(address)}&sensor=false"

      response = open(url).read rescue "{}"
      data = Spontaneous.parse_json(response) rescue {}
      return {} unless data[:results]
      values = {}
      result = data[:results].first
      values[:formatted_address] = result[:formatted_address]
      geometry = result[:geometry]
      values[:lat] = geometry[:location][:lat]
      values[:lng] = geometry[:location][:lng]
      country = (result[:address_components].detect { |c| c[:types].first == "country" } || {})[:long_name]
      values[:country] = country
      values
    end

    def latitude
      value(:lat)
    end

    def longitude
      value(:lng)
    end

    def country
      value(:country)
    end

    def formatted_address
      value(:formatted_address)
    end

    alias_method :lat, :latitude
    alias_method :lng, :longitude

    self.register
  end # LongStringField
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
spontaneous-0.2.0.beta10 lib/spontaneous/field/location.rb
spontaneous-0.2.0.beta9 lib/spontaneous/field/location.rb
spontaneous-0.2.0.beta8 lib/spontaneous/field/location.rb
spontaneous-0.2.0.beta7 lib/spontaneous/field/location.rb
spontaneous-0.2.0.beta6 lib/spontaneous/field/location.rb
spontaneous-0.2.0.beta5 lib/spontaneous/field/location.rb