Ruby Cookbook

Getting Started

The Ruby driver is published to https://rubygems.org/gems/cloudcms

Install the gem as you would any other Gem gem install cloudcms

You may choose to use Bundler or other dependency management tool.

Connecting to Gitana

To connect, create a file called gitana.json in a folder location readable by your application. For information on how to acquire this file, please read up on API Keys.

Load the library containing the driver: require 'cloudcms'

Connect to Cloud CMS by calling the connect method:

The connect method looks for a file in the current directory called gitana.json for connection and credential information. Or you can specify the file location.

cloudcms = Cloudcms::Cloudcms.new()
platform = cloudcms.connect()

The gitana.json file should look like:

{
    "clientKey": "{your client key}",
    "clientSecret": "{your client secret}",
    "username": "{your username or auth grant key}",
    "password": "{your password or auth grant secret}",
    "baseURL": "{the url to the Cloud CMS API endpoint}",
    "application": {"application id of the application object where these keys exist"}
}

Code Samples

Here are some code samples to help you get started. For all of these scenarios, we assume that you're connecting using the simplest method (loading gitana.json from the current working folder of your process).

In Gitana, a project contains a content repository. And this repository can have multiple branches (similar to Git). Branches are where you work with content nodes. There is always a master branch on a repository by default.

The first thing you should do is connect. You will then have a Platform object. Platform.project represents the project you are connected to based on the 'application' property in your gitana.json file.

Get your Repository

platform.project.repository is your content repository. There is also a shortcut on the Platform object: platform.repository:

cloudcms = Cloudcms::Cloudcms.new()
platform = cloudcms.connect()

repository = platform.repository

Get the Master Branch

For the purpose of most of these examples, we'll use the master branch on the content repository.

Use the read_branch method on the Repository object to fetch a specific branch. The user you've logged in as must have READ permissions to the branch. If they do not have read rights, a nil response is expected.

cloudcms = Cloudcms::Cloudcms.new()
platform = cloudcms.connect()

repository = platform.repository

branch = repository.read_branch("master");

There is also a shortcut to the master branch on the Repository object:

cloudcms = Cloudcms::Cloudcms.new()
platform = cloudcms.connect()

repository = platform.repository

branch = repository.master

Node Creation

Create a Node

Create a basic node of type n:node (the default type).

cloudcms = Cloudcms::Cloudcms.new()
platform = cloudcms.connect()

branch = platform.repository.master

new_node = {
    title: 'My First Node'
}

node = branch.create_node(new_node)

Create a Node for a Custom Content Type

Suppose we have a custom content type called custom:article that looks like this:

{
    "title": "Custom Article",
    "_qname": "custom:article",
    "type": "object",
    "properties": {
        "title": {
            "type": "string"
        },
        "body": {
            "type": "string"
        },
        "categories": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "rating": {
            "type": "number"
        }
    }
}

Create a content instance of this type like this:

cloudcms = Cloudcms::Cloudcms.new()
platform = cloudcms.connect()

master = platform.repository.master

new_node = {
    "title": "Custom Article",
    "_qname": "custom:article",
    "type": "object",
    "properties": {
        "title": {
            "type": "string"
        },
        "body": {
            "type": "string"
        },
        "categories": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "rating": {
            "type": "number"
        }
    }
}

node = master.create_node(new_node)

Query for Nodes

Let's now look at querying for content. This makes use of MongoDB's query language to express some pretty powerful queries. We recommend further reading on Query with Gitana.

Basic Querying

Find all of the nodes of type "custom:article1" and have a category with the value category1.

cloudcms = Cloudcms::Cloudcms.new()
platform = cloudcms.connect()

master = platform.repository.master

query = {
    '_type': 'custom:article',
    'category': 'category1'
}

node_array = branch.query_nodes(query);

node_array.each do |node|
    puts 'node: ' + JSON.pretty_generate(node)
end