Thanks to visit codestin.com
Credit goes to github.com

Skip to content

martinciu/redbooth-ruby

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Code Climate Test Coverage Inline docs

Redbooth-Ruby

This is a Ruby wrapper for redbooth's API.

Documentation

We use YARD for documentation.

Usage

First, you've to install the gem

  gem install redbooth-ruby

and require it

  require 'redbooth-ruby'

and set up your app credentials

  RedboothRuby.config do |configuration|
    configuration[:consumer_key] = '_your_consumer_key_'
    configuration[:consumer_secret] = '_your_consumer_secret_'
  end

in fact this last step is optional (yes! we support multiple applications) but if as most fo the humans you use only one redbooth app, this is the easyest way to go.

Oauth

Redbooth oauth2 API documentation

using omniauth? 👍 good choice, just try this gem

teambox/omniauth-redbooth

not using omniauth,? no prob oauth implementation comming soon

...

Client

Everything starts with the client, once you have the user credentials you should create a session and a client to start interaction with the API

  session = RedboothRuby::Session.new(
    token: '_your_user_token_'
  )
  client = RedboothRuby::Client.new(session)

Now you can perform any user api call inside the clien wrapper

  client.me(:show)

If you have multiple applications or you just want to ve explicit use the application credentials inside the session creation

  session = RedboothRuby::Session.new(
    token: '_your_user_token_',
    consumer_key: '_your_app_key_',
    consumer_secret: '_your_app_secret'
  )
  client = RedboothRuby::Client.new(session)

Async Endpoints

Redbooth API is ready to transform any endpoint to async performing in order to optimize the API response time. When this happens the response will contain:

  • 202 status code

  • Retry-After header with the time in seconds to wait until retry the same request

To know the real response of this request you just need to perform the same request once the retry-after time passed.

In the client we handle this work for you by waiting and repeating the request if needed, but if you want to perform the retry method in any other way (renqueue the job for instance) you should declare it in the client initialize process:

client = RedboothRuby::Client.new(session, retry: -> { |time|  YourFancyJob.enque_in(time, params) })

Collections

Index methods always return a RedboothRuby::Request::Collection object to handle the pagination and ordering.

ie:

tasks_collection = client.task(:index, project_id: 2)
tasks_collection.class # => RedboothRuby::Request::Collection
tasks = tasks_collection.all

tasks_collection.current_page # => 1
tasks_collection.total_pages # => 7
tasks_collection.per_page # => 30
tasks_collection.count # => 208

next_page_collection = tasks_collection.next_page
next_page_collection.class # => RedboothRuby::Request::Collection

prev_page_collection = tasks_collection.prev_page
prev_page_collection.class # => RedboothRuby::Request::Collection

## Collection Methods

  • all : Array of elements in the current page

  • count : Integer number of the total elements

  • current_page: Integer current page number (nil if the resource is not paginated)

  • total_pages: Integer total pages number (nil if the resource is not paginated)

  • next_page: RedboothRuby::Request::Collection Collection object pointing to the next page (nil if the resource is not paginated or there is no next page)

  • prev_page: RedboothRuby::Request::Collection Collection object pointing to the prev page (nil if the resource is not paginated or there is no next page)

Examples

Iterating thought all the pages

tasks_collection = client.task(:index, project_id: 2)
tasks = tasks_collection.all

while task_collection = tasks_collection.next_page do
  tasks << task_collection.all
end

tasks.flatten!

Users

List users in your network

  users_collection = client.user(:index)
  users = users_collection.all

Fetch a specific user

  user = client.user(:show, id: 123)

TaskLists

Lists task lists in your visibility scope

  tasklists_collection = client.task_list(:index)
  tasklists = tasklists_collection.all

You can also filter by multiple params (see docs here )

  filtered_tasklists = client.task_list(:index, order: 'id-DESC',
                                                per_page: 50,
                                                project_id: 123)

Fetch a specific tasklist

  tasklist = client.task_list(:show, id: 123)

Update a specific tasklist

  tasklist = client.task_list(:update, id: 123, name: 'new name')

Delete a specific tasklist

  client.task_list(:delete, id: 123)

Tasks

Lists tasks in your visibility scope

  tasks_collection = client.task(:index)
  tasks = tasks_collection.all

You can also filter by multiple params (see docs here )

  filtered_tasks = client.task(:index, order: 'id-DESC',
                                        per_page: 50,
                                        project_id: 123)

Fetch a specific task

  task = client.task(:show, id: 123)

Update a specific task

  task = client.task(:update, id: 123, name: 'new name')

Delete a specific task

  client.task(:delete, id: 123)

Organizations

Lists organizations in your visibility scope

  organization_collection = client.organization(:index)
  organizations = organization_collection.all

You can also filter by multiple params (see docs here )

  filtered_organizations = client.organization(:index, order: 'id-DESC',
                                                       per_page: 50)

Fetch a specific organization

  organization = client.organization(:show, id: 123)

Create a organization

  organization = client.organization(:create, name: 'New Organization')

Update a specific organization

  organization = client.organization(:update, id: 123, name: 'new name')

Delete a specific organization

  client.organization(:delete, id: 123)

Projects

Lists projects in your visibility scope

  project_collection = client.project(:index)
  projects = project_collection.all

You can also filter by multiple params (see docs here )

  filtered_projects = client.project(:index, order: 'id-DESC',
                                                       per_page: 50)

Fetch a specific project

  project = client.project(:show, id: 123)

Create a project

  project = client.project(:create, name: 'New Project')

Update a specific project

  project = client.project(:update, id: 123, name: 'new name')

Delete a specific project

  client.project(:delete, id: 123)

People

People is the redbooth relation between projects and users containing the role information

|-------|         |--------|         |---------|
| User  |   ==>   | Person |   ==>   | Project |
|-------|         |--------|         |---------|
                      \
                    {role}

Lists People in your visibility scope

  people_collection = client.person(:index)
  people = people_collection.all

You can also filter by multiple params (see docs here )

  filtered_people = client.person(:index, order: 'id-DESC',
                                          per_page: 50)

Fetch a specific person

  people = client.person(:show, id: 123)

Create a person

  person = client.person(:create, project_id: 123, user_id: 123, role: 'participant')

Update a specific person

  person = client.person(:update, id: 123, role: 'admin')

Delete a specific person

  client.person(:delete, id: 123)

Memberships

Memberships is the redbooth relation between organization and users containing the role information

|-------|         |------------|         |--------------|
| User  |   ==>   | Membership |   ==>   | Organization |
|-------|         |------------|         |--------------|
                      \
                    {role}

Lists Memberships in your visibility scope

  membership_collection = client.membership(:index)
  memberships = membership_collection.all

You can also filter by multiple params (see docs here )

  filtered_memberships = client.membership(:index, order: 'id-DESC',
                                                   per_page: 50)

Fetch a specific membership

  memberships = client.membership(:show, id: 123)

Create a membership

  membership = client.membership(:create, organization_id: 123, user_id: 123, role: 'participant')

Update a specific membership

  membership = client.membership(:update, id: 123, role: 'admin')

Delete a specific membership

  client.membership(:delete, id: 123)

Conversations

Lists conversations in your visibility scope

  conversation_collection = client.conversation(:index)
  conversations = conversation_collection.all

You can also filter by multiple params (see docs here )

  filtered_conversations = client.conversation(:index, order: 'id-DESC',
                                                       per_page: 50,
                                                       project_id: 123)

Fetch a specific conversation

  conversation = client.conversation(:show, id: 123)

Update a specific conversation

  conversation = client.conversation(:update, id: 123, name: 'new name')

Delete a specific conversation

  client.conversation(:delete, id: 123)

Comments

Comments are the redbooth resources containing the Task and Conversation Content. It also contains the information about the task status changes, assigned changes and due_data changes.

To consume the comments endpoint you allways need to provide a target_type and target_id. This is needed for performance reasons.

Lists comments in your visibility scope

  comment_collection = client.comment(:index, target_type: 'task', target_id: 123)
  comments = comment_collection.all

You can also filter by multiple params (see docs here )

  filtered_comments = client.comment(:index, order: 'id-DESC',
                                             per_page: 50,
                                             project_id: 123,
                                             target_type: 'task',
                                             target_id: 123)

Fetch a specific comment

  comment = client.comment(:show, id: 123)

Update a specific comment

  comment = client.comment(:update, id: 123, body: 'new body content')

Delete a specific comment

  client.comment(:delete, id: 123)

Notes

Lists notes in your visibility scope

  notes_collection = client.note(:index)
  notes = notes_collection.all

You can also filter by multiple params (see docs here )

  filtered_notes = client.note(:index, order: 'id-DESC',
                                       per_page: 50,
                                       project_id: 123)

Fetch a specific note

  note = client.note(:show, id: 123)

Update a specific note

  note = client.note(:update, id: 123, name: 'new name')

Delete a specific note

  client.note(:delete, id: 123)

Subtasks

Subtasks are little sentences under a task that could de resolved or not.

Lists subtasks in your visibility scope. Needs a task_id

  subtask_collection = client.subtask(:index, task_id: 123)
  subtasks = subtask_collection.all

You can also filter by multiple params (see docs here )

  filtered_subtasks = client.subtask(:index, task_id: 123,
                                             order: 'id-DESC',
                                             per_page: 50)

Fetch a specific subtask

  subtask = client.subtask(:show, id: 123)

Create a new subtask

  subtask = client.subtask(:create, task_id: 123, name: 'new name')

Update a specific subtask

  subtask = client.subtask(:update, id: 123, name: 'new name')

Delete a specific subtask

  client.subtask(:delete, id: 123)

Files

Files in redbooth could be uploaded or choosen form other service providers (Copy, Dropbox, Gdrive, Box, Signnow, ...). This client allows you to browse or create files in redbooth api.

Lists files in your visibility scope.

  files_colilection = client.file(:index)
  files = files_collection.all

You can also filter by multiple params (see docs here )

  filtered_files_collection = client.file(:index, backend: 'redbooth',
                                                  project_id: 123,
                                                  order: 'id-DESC',
                                                  per_page: 25)

Update a specific file

  file = client.file(:update, id: 123, name: 'new_name.doc')

Create a new file

  file = File.open('path/to/the/file')
  new_file = client.file(:create, project_id: 123,
                                  parent_id: nil,
                                  backend: 'redbooth',
                                  is_dir: false,
                                  asset: file )

Delete a specific subtask

  client.file(:delete, id: 123)

Download a file

  file # RedBoothRuby::File

  open('/path/to/your_new_file.txt', 'w') { |f| f.puts file.download }

Search

You can search throught any redbooth entity by using the search method. There is some filter params available:

  • query: Regex like query to search

  • project_id: Reduce the scope to search for

  • target_type: List of entity types to be returned

Search for redbooth objects in your visibility scope

  entities = client.search(query: 'task+nothing*')

Metadata

ADVISE: Redbooth metadata API is in Beta status so use this under your own risk.

Metadata API allows you to add custo key value attributes to objects inside redbooth and search by those key value attributes. This is really helpful when doing API syncs or tiny implementations in top of the Redbooth API.

Fetch object metadata

  task.metadata

Update object metadata by adding new keys or overwriding the exisiting ones but not touching the others if there is any one.

  task.metadata_merge("new_key" => "new value")

Restore user metadata by overwiritng the existing ones.

  task.metadata = {"key" => "value"}

Search for a certain metadata key value

  metadata_collection = client.metadata(key: 'key', value: 'value', target_type: 'Task')

License

Copyright (c) 2012-2013 Redbooth. See LICENSE for details.

About

Ruby wrapper for Redbooth API 3

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%