Sha256: 5417843c25ae17e8dc45e4816798973f003f49190b8bca42327a7ac18f3590a6

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

require 'geocoder'

module Calabash
  # @!visibility private
  module Location
    # Simulates gps location of the device/simulator.
    # @note Seems UIAutomation is broken here on physical devices on iOS 7.1
    #
    # @example
    #  set_location({latitude: 48.8567, longitude: 2.3508})
    #
    # @example
    #  set_location(coordinates_for_place('The little mermaid, Copenhagen'))
    #
    # @param [Hash] location The location to simulate.
    # @raise [ArgumentError] If location is not a hash and does not contain a
    #  latitude and longitude key.
    def set_location(location)
      unless location.is_a?(Hash)
        raise ArgumentError, "Expected location to be a Hash, not '#{location.class}'"
      end

      unless location[:latitude] || location[:longitude]
        raise ArgumentError, 'You must supply :latitude and :longitude'
      end

      Device.default.set_location(location)
    end

    # Get the latitude and longitude for a certain place, resolved via Google
    # maps api. This hash can be used in `set_location`.
    #
    # @example
    #  coordinates_for_place('The little mermaid, Copenhagen')
    #  # => {:latitude => 55.6760968, :longitude => 12.5683371}
    #
    # @return [Hash] Latitude and longitude for the given place
    # @raise [RuntimeError] If the place cannot be found
    def coordinates_for_place(place)
      result = Geocoder.search(place)

      if result.empty?
        raise "No result found for '#{place}'"
      end

      {latitude: result.first.latitude,
       longitude: result.first.longitude}
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
calabash-1.9.9.pre3 lib/calabash/location.rb