Sha256: 6e024c0a33cb331c456f5c9997ddd5fd2a7187c9f91a271bec53fc7d45529858

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

require 'cmis/connection/request_modifier'
require 'cmis/connection/response_parser'
require 'cmis/connection/url_resolver'
require 'cmis/version'
require 'faraday'

module CMIS
  class Connection
    def initialize(options)
      options.symbolize_keys!

      message = "option `service_url` must be set"
      service_url = options[:service_url] or raise message

      options[:adapter] ||= :net_http

      @http = Faraday.new(connection_options(options)) do |builder|
        builder.use RequestModifier
        builder.request :multipart
        builder.request :url_encoded

        if options[:username]
          builder.basic_auth(options[:username], options[:password])
        end

        builder.adapter options[:adapter].to_sym
        builder.response :logger if options[:log_requests]
        builder.use ResponseParser
      end

      @url_resolver = URLResolver.new(@http, service_url)
    end

    def execute!(params = {}, options = {})
      params.symbolize_keys!
      options.symbolize_keys!

      query = options.fetch(:query, {})
      headers = options.fetch(:headers, {})
      url = @url_resolver.url(params.delete(:repositoryId), params[:objectId])

      response = if params[:cmisaction]
        @http.post(url, params, headers)
      else
        @http.get(url, params.merge(query), headers)
      end

      response.body
    end

    private

    def connection_options(options)
      headers = { user_agent: "cmis-ruby/#{VERSION} [#{options[:adapter]}]" }
      headers.merge!(options[:headers]) if options[:headers]

      conn_opts = { headers: headers }
      conn_opts[:ssl] = options[:ssl] if options[:ssl]

      conn_opts
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cmis-ruby-0.4.7 lib/cmis/connection.rb