Sha256: 343ed4efc96e344f03417058d260df328cc6f9c6ab285dee8eb76279848e5189

Contents?: true

Size: 1.42 KB

Versions: 13

Compression:

Stored size: 1.42 KB

Contents

module XamarinTestCloud
  module HTTP

    class RequestError < RuntimeError; ; end

    # A representation of an HTTP request that can be passed passed to the HTTP
    # client as an argument for `get` or `post`.
    # @!visibility private
    class Request
      attr_reader :route, :params

      def initialize(route, params={})
        @route = route
        @params = params
      end

      # Create a new Request from `route` and `parameters`.
      #
      # @param [String] route The http route for the new request.
      # @param [Array, Hash] parameters An Array or Hash of parameters.
      # @return [Request] A new Request for `route` with `parameters`.
      # @raise [RequestError] Raises an error if the parameters cannot be
      #   converted to JSON
      def self.request(route, parameters)
        Request.new(route, Request.data(parameters))
      end

      private

      # Converts `parameters` to JSON.
      #
      # @param [Array, Hash] parameters An Array or Hash of parameters.
      # @return [String] A JSON formatted string that represents the parameters.
      # @raise [RequestError] Raises an error if the parameters cannot be
      #   converted to JSON
      def self.data(parameters)
        begin
          JSON.generate(parameters)
        rescue *[TypeError, JSON::GeneratorError] => e
          raise RequestError, "#{e}: could not generate JSON from '#{parameters}'"
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
xamarin-test-cloud-2.3.0 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.2.0 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.1.2 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.1.1 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.1.0 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.0.3 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.0.2 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.0.1 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.0.1.pre1 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.0.0 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.0.0.pre5 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.0.0.pre4 lib/xamarin-test-cloud/http/request.rb
xamarin-test-cloud-2.0.0.pre2 lib/xamarin-test-cloud/http/request.rb