he9qi/motion-geocoder

View on GitHub
lib/motion-geocoder/apple_api/place.rb

Summary

Maintainability
A
0 mins
Test Coverage
module MotionGeocoder
  module AppleApi
    module Place
      @@local_search = nil
      
      def self.build_request(input, params)
        lat = params[:lat]
        lng = params[:lng]
        rad = params[:radius] || 5000
        
        region = MKCoordinateRegionMakeWithDistance CLLocationCoordinate2DMake(lat, lng), rad, rad
        request = MKLocalSearchRequest.alloc.init
        request.region = region
        request.naturalLanguageQuery = NSString.stringWithUTF8String(input)
        request
      end

      def self.auto_complete(input, params={}, &block)
        @@local_search.cancel if !!@@local_search
        
        request = build_request input, params

        @@local_search = MKLocalSearch.alloc.initWithRequest request
        @@local_search.startWithCompletionHandler lambda {|response, e|
          if response && !response.mapItems.empty?
            results = response.mapItems.map do |item|
              {
                name: item.name,
                address: item.placemark.title,
                coordinate: {
                    lat: item.placemark.coordinate.latitude,
                    lng: item.placemark.coordinate.longitude
                  }
              }
            end
            block.call results
          end
        }

      end

    end
  end

end