Sha256: 2fcb101b4ba637afaffdd89fa4f9215416aa2eaa27cae5454ca74d84a4cbe62e

Contents?: true

Size: 1.93 KB

Versions: 2

Compression:

Stored size: 1.93 KB

Contents

# frozen_string_literal: true

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

module  Chamber
module  Adapters
module  Cloud
class   CircleCi
  API_HOST     = 'circleci.com'
  API_PORT     = 443
  API_BASE_URI = '/api/v1.1'

  attr_accessor :api_token,
                :project,
                :username,
                :vcs_type

  def initialize(options = {})
    self.api_token = options.fetch(:api_token)
    self.project   = options.fetch(:project)
    self.username  = options.fetch(:username)
    self.vcs_type  = options.fetch(:vcs_type)
  end

  def add_environment_variable(name, value)
    value   = value.gsub(/\n/, '\n')
    request = ::Net::HTTP::Post.new(request_uri(resource: 'envvar'))

    request.basic_auth api_token, ''
    request['Content-Type'] = 'application/json'
    request.body            = ::JSON.dump(name: name, value: value)

    response = ::JSON.parse(response(request).body)

    fail NameError, response['message'] if response['message']

    response['name']
  end

  def environment_variables
    @environment_variables ||= begin
      request = ::Net::HTTP::Get.new(request_uri(resource: 'envvar'))

      request.basic_auth api_token, ''
      request['Content-Type'] = 'application/json'

      ::JSON
        .parse(response(request).body)
        .each_with_object({}) { |e, m| m[e['name']] = e['value'] }
    end
  end

  def remove_environment_variable(name)
    request = ::Net::HTTP::Delete.new(request_uri(resource: "envvar/#{name}"))

    request.basic_auth api_token, ''
    request['Content-Type'] = 'application/json'

    ::JSON.parse(response(request).body)['message'] == 'ok'
  end

  private

  def request_uri(resource:)
    "#{API_BASE_URI}/project/#{vcs_type}/#{username}/#{project}/#{resource}"
  end

  def response(request)
    connection.request(request)
  end

  def connection
    @connection ||= ::Net::HTTP.new(API_HOST, API_PORT).tap do |conn|
      conn.use_ssl = true
    end
  end
end
end
end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
chamber-2.13.1 lib/chamber/adapters/cloud/circle_ci.rb
chamber-2.13.0 lib/chamber/adapters/cloud/circle_ci.rb