Sha256: 2a0029b58baf1aaa36ac23fca7dd3c0e867d1df77a1f6cd356d3a83d9c599438

Contents?: true

Size: 1.48 KB

Versions: 3

Compression:

Stored size: 1.48 KB

Contents

module VagrantCloud

  class Account

    attr_accessor :username
    attr_accessor :access_token

    def initialize(username, access_token)
      @username = username
      @access_token = access_token
    end

    def get_box(name, data = nil)
      Box.new(self, name, data)
    end

    def create_box(name, description = nil)
      params = {:name => name}
      params[:description] = description if description
      params[:short_description] = description if description
      data = request('post', '/boxes', {:box => params})
      get_box(name, data)
    end

    def ensure_box(name, description = nil)
      begin
        box = get_box(name)
        box.data
      rescue RestClient::ResourceNotFound => e
        box = create_box(name, description)
      end
      if description and (description != box.description || description != box.description_short)
        box.update(description)
      end
      box
    end

    def request(method, path, params = {})
      params[:access_token] = access_token
      headers = {:access_token => access_token}
      result = RestClient::Request.execute(
          :method => method,
          :url => url_base + path,
          :payload => params,
          :headers => headers,
          :ssl_version => 'TLSv1'
      )
      result = JSON.parse(result)
      errors = result['errors']
      raise "Vagrant Cloud returned error: #{errors}" if errors
      result
    end

    private

    def url_base
      'https://vagrantcloud.com/api/v1'
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
vagrant_cloud-0.2.3 lib/vagrant_cloud/account.rb
vagrant_cloud-0.2.2 lib/vagrant_cloud/account.rb
vagrant_cloud-0.2.1 lib/vagrant_cloud/account.rb