Sha256: 848ad0e1c59aacffa5fe5e318c05cd65c7edb0476b3227c450659b4adf724a0f

Contents?: true

Size: 1.31 KB

Versions: 7

Compression:

Stored size: 1.31 KB

Contents

# encoding: UTF-8

require 'open-uri'

module Spontaneous::FieldTypes
  class LocationField < StringField

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

    def generate_outputs(input)
      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

7 entries across 7 versions & 1 rubygems

Version Path
spontaneous-0.2.0.alpha7 lib/spontaneous/field_types/location_field.rb
spontaneous-0.2.0.alpha6 lib/spontaneous/field_types/location_field.rb
spontaneous-0.2.0.alpha5 lib/spontaneous/field_types/location_field.rb
spontaneous-0.2.0.alpha4 lib/spontaneous/field_types/location_field.rb
spontaneous-0.2.0.alpha3 lib/spontaneous/field_types/location_field.rb
spontaneous-0.2.0.alpha2 lib/spontaneous/field_types/location_field.rb
spontaneous-0.2.0.alpha1 lib/spontaneous/field_types/location_field.rb