Sha256: c9575f8126f0367d0e5db750a870430ad0c6a8011dad60bd009bf8d4127c4e73
Contents?: true
Size: 1.29 KB
Versions: 4
Compression:
Stored size: 1.29 KB
Contents
# encoding: UTF-8 require 'open-uri' module Spontaneous::Field class Location < String 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
4 entries across 4 versions & 1 rubygems