packagecloud-ruby

Build Status

Ruby library for communicating with the packagecloud.io API.

Implemented API Endpoints

* [Get Package Contents](https://packagecloud.io/docs/api#resource_packages_method_contents)
* [Upload Package](https://packagecloud.io/docs/api#resource_packages_method_create)
* [List Distributions](https://packagecloud.io/docs/api#resource_distributions_method_index)
* [View Repository](https://packagecloud.io/docs/api#resource_repositories_method_show)
* [View Repositories](https://packagecloud.io/docs/api#resource_repositories_method_index)
* [Create Repository](https://packagecloud.io/docs/api#resource_repositories_method_create)

Installation

```
gem install packagecloud-ruby
```

Getting your API token

Login to packagecloud.io and go to your Account Settings to see your API token.

Creating a Client

Note that you should not use the email address associated with your
[packagecloud.io](https://packagecloud.io) account when accessing the API.
Please use your username on the site.

```ruby
require 'packagecloud'

# Create a client using your username and API token
credentials = Packagecloud::Credentials.new("joedamato", "my_api_token")
@client = Packagecloud::Client.new(credentials)

```

Result objects

Every client API method call returns a ```Result``` object, which is simply:

```ruby
module Packagecloud
class Result
  attr_accessor :response
  attr_accessor :succeeded
end
end
```

If ```.succeeded``` is ```true``` then, ```.response``` is the parsed JSON response
of that endpoint, otherwise ```.response``` is the error text explaining what went wrong.

Usage

Distributions

This is the list of currently [supported distributions](https://packagecloud.io/docs#os_distro_version).

```ruby
# Get all distributions
distros = @client.distributions

# Looking up a distribution id by name
id = @client.find_distribution_id("el/6") # returns 27
```

Repositories

```ruby
# Looking up all repositories available for a client
repos = @client.repositories

# Lookup info on a single repo
repo = @client.repository("my_repo")

# Creating a repository
@client.create_repository("my_repo")

```

When specifying your repository name, you should use just the name and not
the fully qualified name (fqname).

For example:

```ruby
# INCORRECT: this should just be "my_repo"
repo = @client.repository("user/my_repo")
```

Packages

```ruby
# Create RPM Packages (can take File, IO, or path argument)
rpm_package = Packagecloud::Package.new(:file => "libcurl-0.1.2.rpm")

# Creating gem Packages using IO (needs :filename passed in)
gem_package = Packagecloud::Package.new(:file => io_object, :filename => "rails-4.0.0.gem")

# Creating source Packages
source_files = { "jake_1.0.orig.tar.bz2" => open("/path/jake_1.0.orig.tar.bz2"),
               "jake_1.0-7.debian.tar.gz" => open("/path/jake_1.0-7.debian.tar.gz") }
dsc_package = Packagecloud::Package.new(:file => "jake_1.0-7.dsc", :source_files => source_files)

# Upload Packages
@client.put_package("test_repo", gem_package)
@client.put_package("test_repo", rpm_package, "el/6")
@client.put_package("test_repo", dsc_package, "ubuntu/trusty")
@client.put_package("test_repo", node_package, "node")
```

Copyright (c) 2014-2018 Computology, LLC

See LICENSE.txt for details.