Sha256: 422e816398d6662b22811dfa2fc910f14f36fd33ec1fc78c3910096fc2054ab5

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

module OpenStreetMap
  class Client
    # methods for request
    module Request
      private

      # make request to API
      def call(type, args)
        url = hostname(args[:hostname]) + type
        headers = { 'User-Agent' => user_agent(args[:user_agent]) }
        self.class.get(url, query: generate_body(type, args), headers: headers).parsed_response
      end

      # generate body from args
      def generate_body(type, args)
        args['accept-language'.to_sym] = args[:accept_language] if args.key?(:accept_language)
        args.select { |key, _| valid_args(type).include?(key) }
      end

      # get list of permitted args
      def valid_args(type)
        case type
          when 'search' then %i[q format addressdetails extratags namedetails viewbox bounded exclude_place_ids limit accept-language email]
          when 'reverse' then %i[format lat lon zoom addressdetails extratags namedetails accept-language email]
          else []
        end
      end

      # select hostname for request
      def hostname(value)
        value || BASE_URI
      end

      # select user_agent for request
      def user_agent(value)
        value || DEFAULT_USER_AGENT
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
open_street_map-1.2.1 lib/open_street_map/client/request.rb
open_street_map-1.2.0 lib/open_street_map/client/request.rb