request.rb 1.56 KB
# frozen_string_literal: true

require 'uri'
require 'net/http'
require 'json'

module Appdocks
  module Api
    class Request
      BASE_URL = "https://www.development-district.de/api"

      def send_request(command, data = {}, arguments = {})
        @command = command
        @arguments = arguments
        @data = data
        uri = URI(BASE_URL)

        http = Net::HTTP.new(uri.host, uri.port)
        http.use_ssl = true
        request = prepare_request(uri)
        response = http.request(request)

        if Integer(response.code, 10) == 200
          JSON.parse(response.body, symbolize_names: true)
        else
          {error: response.code.to_s, message: response.body}
        end
      end

      private

        attr_reader :command, :arguments, :data

        def prepare_request(uri)
          request = Net::HTTP::Post.new(uri)
          request.body = params.to_json
          set_request_options(request)
          request
        end

        def set_request_options(request, type = 'json')
          request["Content-Type"] = "application/#{type}"
          request["User-Agent"] = "contentDockAPI/1.0"
        end

        def params
          param = [
            api_key,
            arguments.merge({agent: "contentDockAPI/1.0"})
          ]
          param << data unless data.nil?

          {
            data: {
              query: {
                command: command,
                param:   param
              }
            }.to_json
          }
        end

        def api_key
          Appdocks::Api::Settings.api_key
        end
    end
  end
end